Равномерно распределять ли позиции

надеюсь, что это самоочевидно:

HTML:

<ul class="steps">
<li class="step1 first">
    <div class="icon basket"></div>
    1.Warenkorb
</li>
<li class="step2">
    <div class="icon registration"></div>
    2.Adresse
</li>
<li class="step3">
    <div class="icon payment"></div>
    3.Zahlungsart
</li>
<li class="step4">
    <div class="icon order"></div>
    4.Bestätigen
</li>
<li class="step5 last">
    <div class="icon thankyou last"></div>
    5.Danke
</li>
<div style="clear:both"></div>

CSS

.steps {
width:100%;
list-style-type: none;
padding:0;
margin:0 auto;
background:url(http://tnsdev.cloudapp.net/dev/steps_slice.png) repeat-x;
 }

 .steps li {
width:20%;
float:left;

}

.steps li .icon {
background:url(http://tnsdev.cloudapp.net/dev/steps_icon.png) no-repeat;
height:44px;
width:44px;
}

http://jsfiddle.net/HYYwn/1/

Как я могу достичь того, что расстояния между пузырьками все одинаковы, а пузырька шага 5 находится в крайнем правом углу? Я ограничусь тем, что у меня есть 5 разных li и для использования%, поэтому он остается отзывчивым.

не может обойти это сам в данный момент, играя с ним уже какое-то время!

EDIT:

результат должен выглядеть так:

 O--O--O--O--O 

и не нравится

--O--O--O--O--O  

или

O--O--O--O--O--  

или

--O--O--O--O--O--

Ответ 1

Вот один из способов сделать это, используя text-align: justify.

Преимущество этого подхода в том, что круговые/пузырьковые мотивы равномерно распределены, и вы также можете контролировать обоснование меток ниже.

Сначала вам нужно обернуть метки в контейнер, я использовал тег <p> и добавлю завершающий элемент <li>, эквивалентный элементу очистки.

<ul class="steps">
    <li class="step1 first">
        <div class="icon basket"></div>
        <p>1.Warenkorb</p>
    </li>
    <li class="step2">
        <div class="icon registration"></div>
        <p>2.Adresse</p>
    </li>
    <li class="step3">
        <div class="icon payment"></div>
        <p>3.Zahlungsart</p>
    </li>
    <li class="step4">
        <div class="icon order"></div>
        <p>4.Bestätigen</p>
    </li>
    <li class="step5 last">
        <div class="icon thankyou last"></div>
        <p>5.Danke</p>
    </li>
    <li class="filler"></li>
</ul>

Для CSS:

.steps {
    width:100%;
    list-style-type: none;
    padding:0;
    margin:0 auto;
    background:url(http://tnsdev.cloudapp.net/dev/steps_slice.png) repeat-x;
    text-align: justify;
    line-height: 0;
}
.steps li {
    width: auto;
    display: inline-block;
    margin: 0;
    padding: 0;
    line-height: 1.5;
    position: relative;
    text-align: center;
}
.steps li .icon {
    background:url(http://tnsdev.cloudapp.net/dev/steps_icon.png) top center no-repeat;
    height:44px;
    width:44px;
}
.steps li p {
    position: absolute;
    width: 100px;
    top: 50px;
    left: -22px;
    margin: 0;
}
.steps li.first p {
    text-align: left;
    left: 0;
}
.steps li.last p {
    text-align: right;
    left: auto;
    right: 0;
}
.steps li.filler {
    width: 100%;
    height: 0;
    font-size: 0;
    vertical-align: top;
}

См. демонстрацию в jsFiddle

Во-первых, я использовал text-align: justify в родительском контейнере для равномерного распределения элементов li, которые являются встроенными блоками, которые сжимаются, чтобы соответствовать квадратным .icon элементам.

Строка .filler заставляет новую линию ширины 100%, которая позволяет работать с текстом. Я установил vertical-align: topline-height: 0 в родительском), чтобы избавиться от сироты с пространством, созданным элементом filler.

Затем я вынимаю метки из потока, используя абсолютное позиционирование, и отрегулируйте выравнивание текста для первого и последнего элементов списка и поместите их с помощью отрицательного поля, чтобы центрировать метки.

Единственное ограничение заключается в том, что для ярлыков указана ширина, поэтому вы должны добавить минимальную ширину в родительский контейнер, как вы считаете нужным.

У вас есть достаточно места для настройки вещей по мере необходимости.

Ответ 2

См. этот скрипт

Я использую функцию calc для ширины 4 первых li s.

это работает следующим образом.

4 сначала будет выглядеть как O------, а 5'-будет выглядеть как O.

width: calc((100% - 44px)/4);

Объяснение: пятый li принимает ровно 44px, поэтому 4 первых li разделяют остальные между ними одинаково.

Ответ 3

CSS

ul{
    text-align: justify;
}

ul::after {
    content: '';
    width: 100%; 
    display: inline-block;
}

li{
    display:inline-block;
}

Ответ 4

Try:

.steps {
width:100%;
list-style-type: none;
padding:0;
margin:0 auto;
background:url(http://tnsdev.cloudapp.net/dev/steps_slice.png) repeat-x;
 }

 .steps li {
width:20%;
float:left;
left: 200px;
right: 200px;
}

.steps li .icon {
background:url(http://tnsdev.cloudapp.net/dev/steps_icon.png) no-repeat;
height:44px;
width:44px;
}

http://jsfiddle.net/HYYwn/2/

Ответ 5

Мне понравился этот вопрос! Настоящий мозговой тизер...

Вот что у меня есть: http://jsfiddle.net/HYYwn/10/

Я упростил HTML и поменял ваш значок <div /> на <img />, потому что легче поддерживать требуемое квадратное отношение. Может быть сделано с помощью <div />, но нам нужно использовать немного JS, чтобы сделать его отзывчивым.

[Упрощенный] HTML

<div class="steps">
    <ul>
        <li>
            <img  src="http://tnsdev.cloudapp.net/dev/steps_icon.png" />
        </li>
        <li>
            <img  src="http://tnsdev.cloudapp.net/dev/steps_icon.png" />
        </li>
        <li>
            <img  src="http://tnsdev.cloudapp.net/dev/steps_icon.png" />
        </li>
        <li>
            <img  src="http://tnsdev.cloudapp.net/dev/steps_icon.png" />
        </li>
        <li>
            <img  src="http://tnsdev.cloudapp.net/dev/steps_icon.png" />
        </li>
    </ul>
</div>

CSS

* {
    margin: 0;
    padding: 0;
    border: 0;
}
.steps * {
    position: relative;
}
.steps {
    width: 100%;
    overflow: hidden;
    background-image: url(http://tnsdev.cloudapp.net/dev/steps_slice.png);
    background-repeat: repeat-x;
    background-position: 50%;
}
.steps ul {
    width: 119%;
    list-style-type: none;
}
.steps li {
    width: 20%;   /* 1/5 of ul.width */
    float: left;
}
.steps img {
    width: 20%;   /* 1/5 of li.width */
    height: auto; /* Always "square" */
}

Примечание: здесь используется магическое число... 119%. Я не могу сказать, почему это работает, но это так. Надеюсь, кто-то умнее меня может объяснить алгебру за этим значением (обратите внимание, что если мы изменим ширину <img />, тогда мы должны изменить это значение).

Ответ 6

Я достиг этого с :before, и он работает очень хорошо, единственное, что вас беспокоит, - это last-child, но вы можете добавить класс .last-child к последнему элементу, который сделает его перекрестным браузером.

Демо: http://jsfiddle.net/F2Kh6/

CSS

li{
    float: left;
    list-style: none;
    width: 20%;
    position: relative;
}

li .icon{
    background: url('http://tnsdev.cloudapp.net/dev/steps_icon.png') no-repeat;
    width: 44px;
    height: 44px;
}

li:last-child:before{
    display: none;
}

li:before{
    content: '';
    position: absolute;
    top:0; left:0; right:0; bottom:0;
    background: url('http://tnsdev.cloudapp.net/dev/steps_slice.png') repeat-x;
    z-index: -1;
}

Итак, мы просто выполняем фрагменты в :before и скрываем :before на :last-child