javascript - Center one of many spans in div horizontaly -


i have css question change. 1 best described image. enter image description here

the exact definition. have div multiple inline div's inside of it. want set class 1 of them (yellow one) center , move rest of them accordingly in 1 line (outside div has overflow hidden) if make second 1 right yellow, centered , there 3 of them on left side, it(centered) , 1 on right. hope made clear. know can done javascript fluid introduce couple of problems later on while re-sizing whole page.

help appreciated.

thanks, peter

(tl;dr: http://jsfiddle.net/feeela/3eq8dclc/)

health advice: use javascript such tasks, or maybe crazy.

having said that, present fluid css-only version.

the variables need know are:

  • how many items in list
  • which item should highlighted

both can solved in css.


limitations:

  • each list-count must written down in css; if have slider, may contain 3 hundred items, have write css 98 times.
  • doesn't work floated items inside inner wrapper (the usual way slider set up) – can't translate inner wrapper, because there no way of knowing how many children element has – don't know how far translate left or right. can work directly on individual items (as counting siblings possible).

knowing this, cannot move row of items setting class name targeted item (the 1 should highlighted) can using class name on parent container.


example markup:

<div class="slider item-4">     <ul>         <li>lorem ipsum dolor sit amet</li>         <li>consectetur adipisicing elit</li>         <li>alias aspernatur</li>         <li>assumenda atque aut consectetur</li>         <li>consequatur culpa dolore</li>     </ul> </div> 

step 1:

set item widths percentages, based on count of siblings.

for explanation on how works, see https://stackoverflow.com/a/12198561/341201 , linked resources.

/* 2 items */ .slider > ul li:first-child:nth-last-child(2), .slider > ul li:first-child:nth-last-child(2) ~ li {     width: 50%; }  /* 3 items */ .slider > ul li:first-child:nth-last-child(3), .slider > ul li:first-child:nth-last-child(3) ~ li {     width: 33.3333%; } 

step 2:

move first item using positive (move right) or negative (move left) margin based on position of highlighted item , sibling count. tricky part.

/* second item   notes:   - second item of 3 in middle */ .slider.item-2 > ul li:first-child:nth-last-child(2) {     margin-left: -25%; } .slider.item-2 > ul li:first-child:nth-last-child(4) {     margin-left: 12.5%; } .slider.item-2 > ul li:first-child:nth-last-child(5) {     margin-left: 20%; } .slider.item-2 > ul li:first-child:nth-last-child(6) {     margin-left: 25%; }  /* third item   notes:   - no third item in list of 2   - third item of 5 in middle */ .slider.item-3 > ul li:first-child:nth-last-child(3) {     margin-left: -33.3333%; } .slider.item-3 > ul li:first-child:nth-last-child(4) {     margin-left: -12.5%; } .slider.item-3 > ul li:first-child:nth-last-child(6) {     margin-left: 8.3333%; }  /* …expand required n items */ 

i prepared example works 2 6 items in row. if sliders may contain more items, have expand css accordingly.

full example:

(also available js fiddle)

hr {      /* visual sugar */      margin-top: 5em;      margin-bottom: 5em;  }    .slider {      overflow: hidden;  }    .slider > ul {      margin: 0;      padding-left: 0;      list-style: none;      white-space: nowrap;  }    .slider > ul li {      box-sizing: border-box;      display: inline-block;      overflow: hidden;      margin-left: -4px;      min-height: 5rem;      white-space: normal;      border: 1px solid black;  }  .slider > ul li:first-child {      margin-left: 0;  }    /* following sections sets slider item widths */    /* 2 items */  .slider > ul li:first-child:nth-last-child(2),  .slider > ul li:first-child:nth-last-child(2) ~ li {      width: 50%;  }    /* 3 items */  .slider > ul li:first-child:nth-last-child(3),  .slider > ul li:first-child:nth-last-child(3) ~ li {      width: 33.3333%;  }    /* 4 items */  .slider > ul li:first-child:nth-last-child(4),  .slider > ul li:first-child:nth-last-child(4) ~ li {      width: 25%;  }    /* 5 items */  .slider > ul li:first-child:nth-last-child(5),  .slider > ul li:first-child:nth-last-child(5) ~ li {      width: 20%;  }    /* 6 items */  .slider > ul li:first-child:nth-last-child(6),  .slider > ul li:first-child:nth-last-child(6) ~ li {      width: 16.6666%;  }    /* n items – expand required… */        /* highlight specific item */  .slider.item-2 > ul li:nth-child(2),  .slider.item-3 > ul li:nth-child(3),  .slider.item-4 > ul li:nth-child(4),  .slider.item-5 > ul li:nth-child(5),  .slider.item-6 > ul li:nth-child(6) {      background: yellow;  }      /* sections centers specific item */    /* second item    notes:    - second item of 3 in middle  */  .slider.item-2 > ul li:first-child:nth-last-child(2) {      margin-left: -25%;  }  .slider.item-2 > ul li:first-child:nth-last-child(4) {      margin-left: 12.5%;  }  .slider.item-2 > ul li:first-child:nth-last-child(5) {      margin-left: 20%;  }  .slider.item-2 > ul li:first-child:nth-last-child(6) {      margin-left: 25%;  }    /* third item    notes:    - no third item in list of 2    - third item of 5 in middle  */  .slider.item-3 > ul li:first-child:nth-last-child(3) {      margin-left: -33.3333%;  }  .slider.item-3 > ul li:first-child:nth-last-child(4) {      margin-left: -12.5%;  }  .slider.item-3 > ul li:first-child:nth-last-child(6) {      margin-left: 8.3333%;  }    /* fourth item    notes:    - no fourth item in list of 2 , 3  */  .slider.item-4 > ul li:first-child:nth-last-child(4) {      margin-left: -37.5%;  }  .slider.item-4 > ul li:first-child:nth-last-child(5) {      margin-left: -20%;  }  .slider.item-4 > ul li:first-child:nth-last-child(6) {      margin-left: -8.3333%;  }    /* fifth item    notes:    - no fifth item in list of two, 3 , 4  */  .slider.item-5 > ul li:first-child:nth-last-child(5) {      margin-left: -40%;  }  .slider.item-5 > ul li:first-child:nth-last-child(6) {      margin-left: -25%;  }    /* sixth item    notes:    - no sixth item in list of two, three, 4 , 5  */  .slider.item-6 > ul li:first-child:nth-last-child(6) {      margin-left: -41.6666%;  }
<h3>highlight second item</h3>    <div class="slider item-2">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>      </ul>  </div>    <div class="slider item-2">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>      </ul>  </div>    <div class="slider item-2">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>      </ul>  </div>    <div class="slider item-2">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>      </ul>  </div>    <div class="slider item-2">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>          <li>ducimus facilis ipsam itaque</li>      </ul>  </div>    <hr/>    <h3>highlight third item</h3>    <div class="slider item-3">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>      </ul>  </div>    <div class="slider item-3">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>      </ul>  </div>    <div class="slider item-3">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>      </ul>  </div>    <div class="slider item-3">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>      </ul>  </div>    <div class="slider item-3">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>          <li>ducimus facilis ipsam itaque</li>      </ul>  </div>    <hr/>    <h3>highlight fourth item</h3>    <div class="slider item-4">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>      </ul>  </div>    <div class="slider item-4">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>      </ul>  </div>    <div class="slider item-4">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>      </ul>  </div>    <div class="slider item-4">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>      </ul>  </div>    <div class="slider item-4">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>          <li>ducimus facilis ipsam itaque</li>      </ul>  </div>    <hr/>    <h3>highlight fifth item</h3>    <div class="slider item-5">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>      </ul>  </div>    <div class="slider item-5">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>      </ul>  </div>    <div class="slider item-5">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>      </ul>  </div>    <div class="slider item-5">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>      </ul>  </div>    <div class="slider item-5">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>          <li>ducimus facilis ipsam itaque</li>      </ul>  </div>    <hr/>    <h3>highlight sixth item</h3>    <div class="slider item-6">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>      </ul>  </div>    <div class="slider item-6">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>      </ul>  </div>    <div class="slider item-6">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>      </ul>  </div>    <div class="slider item-6">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>      </ul>  </div>    <div class="slider item-6">      <ul>          <li>lorem ipsum dolor sit amet</li>          <li>consectetur adipisicing elit</li>          <li>alias aspernatur</li>          <li>assumenda atque aut consectetur</li>          <li>consequatur culpa dolore</li>          <li>ducimus facilis ipsam itaque</li>      </ul>  </div>


Comments