Равномерно распределять ли позиции
надеюсь, что это самоочевидно:
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: top
(и line-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