2013-07-13 2 views
15

Как бы я идти о рисовании вертикальной линии между пулями в неупорядоченном списке, например, так:CSS - Вертикальная линия между пулями в неупорядоченном списке

enter image description here

Обратите внимание, что линия останавливается на последнем список bullet. Я использую list-style:none; и изображения в виде пуль. HTML выглядит следующим образом:

<ul class="experiences"> 

    <!-- Experience --> 
    <li class="green"> 
    <div class="where">New York Times</div> 
    <h3 class="what green">Senior Online Editor</h3> 
    <div class="when">2012 - Present</div> 

    <p class="description">Jelly-o pie chocolate cake...</p> 
    </li> 

    ... 

CSS код, запрошенную:

/* Experiences */ 
ul.experiences { 
    padding-left: 15px; 
    margin-top: -1px; 
} 
ul.experiences li { 
    padding-left: 33px; 
    margin-bottom: 2.5em; 
    list-style: none; 
    background: url('../img/misc/list-bullet-darkgray.png') no-repeat; 
} 
ul.experiences li.green { 
    background: url('../img/misc/list-bullet-green.png') no-repeat; 
} 
ul.experiences li.blue { 
    background: url('../img/misc/list-bullet-blue.png') no-repeat; 
} 
ul.experiences li.pink { 
    background: url('../img/misc/list-bullet-pink.png') no-repeat; 
} 
.where { 
    font-size: 1.2857em; /* 18/16 -> 18px */ 
    font-weight: 300; 
    display: inline; 
    margin-right: 0.5em; 
} 
.what { 
    font-size: 0.75em; /* 12/16 -> 12px */ 
    font-weight: 700; 
    text-transform: uppercase; 
    color: #fff; 
    background-color: #444444; 
    display: inline-block; 
    padding: 0 12px; 
    margin: -5px 0.5em 0 0 !important; 
    -webkit-border-radius: 3px; 
    -moz-border-radius: 3px; 
    border-radius: 3px; 
} 
.what.green { 
    background-color: #c4df9b; 
} 
.what.blue { 
    background-color: #6dcff6; 
} 
.what.pink { 
    background-color: #f06eaa; 
} 
.when { 
    float: right; 
    color: #b9b9b9; 
    font-style: italic; 
} 
.description { 
    display: block; 
    margin-top: 0.5em; 
} 
+0

ваш CSS код пожалуйста – falguni

+0

Я считаю, вы можете использовать '.experiences li: last-child' для -not- отображения левой границы, в то время как вы можете использовать' .experiences li' для отображения границы с левой стороны остальных – Sumurai8

+0

@ Sumurai8 Таким образом, граница выиграла «Иди до последней пули. – sbichenko

ответ

16

Я сомневаюсь, что это достижимо, используя только границы и «возился с полями», как другие полагают, по крайней мере, у меня не было никакой удачи в этом ,

Данное решение использует созданный CSS-контент (:before и :after), чтобы нарисовать пули и линии. Это позволяет высокой степени настройки, и он сохраняет разметку в чистоте, но обратите внимание на browser support.

JSFiddle (прокрутите CSS до /* BORDERS AND BULLETS */ комментариев)

ul.experiences li { 
    position:relative; /* so that pseudoelements are positioned relatively to their "li"s*/ 
    /* use padding-bottom instead of margin-bottom.*/ 
    margin-bottom: 0; /* This overrides previously specified margin-bottom */ 
    padding-bottom: 2.5em; 
} 

ul.experiences li:after { 
    /* bullets */ 
    content: url('http://upload.wikimedia.org/wikipedia/commons/thumb/3/30/RedDisc.svg/20px-RedDisc.svg.png'); 
    position: absolute; 
    left: -26px; /*adjust manually*/ 
    top: 0px; 
} 

ul.experiences li:before { 
    /* lines */ 
    content:""; 
    position: absolute; 
    left: -16px; /* adjust manually */ 
    border-left: 1px solid black; 
    height: 100%; 
    width: 1px; 
} 

ul.experiences li:first-child:before { 
    /* first li's line */ 
    top: 6px; /* moves the line down so that it disappears under the bullet. Adjust manually */ 
} 

ul.experiences li:last-child:before { 
    /* last li's line */ 
    height: 6px; /* shorten the line so it goes only up to the bullet. Is equal to first-child:before's top */ 
} 

ПРИМЕЧАНИЯ: если линия-х border-color имеет альфа-канал, указанный, перекрытие между границами первых и вторым элементов станет заметно.

+0

Кажется, что он отлично работает - за исключением IE8, который также показывает строку для последнего элемента ... Есть ли способ обойти это? Я приму этот ответ, если я получу его для работы с IE8. Посмотрите на этот пример с IE8: http://graphic-dev.com/stuff/vcard – transbetacism

+0

Я не нашел способ поддерживать IE8 здесь исключительно с помощью CSS. Лучшим обходным решением является использование jQuery (поскольку вы, вероятно, будете использовать его на странице в любом случае). Он имеет селектор ': last-child', который может использоваться для назначения определенного класса последнему ребенку, например. 'Опыт-последней li'. Затем измените селектор последнего правила из 'ul.experiences li: last-child: before' to' ul.experiences li.experiences-last-li: before'. Не забудьте добавить комментарий в источник, объясняющий необходимость этого обходного пути! – sbichenko

+0

EDIT: Работает как шарм! Почему я не подумал об этом ...? :) Большое спасибо! – transbetacism

0
ul.experiences li { 
    padding-left: 33px; 
    margin-bottom: 2.5em; 
    list-style: none; 
    background: url('../img/misc/list-bullet-darkgray.png') no-repeat; 
    border-left: 1px solid #yourcolor; 
} 

И тогда я бы просто использовать отступы и поля, чтобы выровнять его и остановить последний от расширения:

ul.experiences li:last-child { 
    padding-left: 33px; 
    margin-bottom: 2.5em; 
    list-style: none; 
    background: url('../img/misc/list-bullet-darkgray.png') no-repeat; 
    border-left: none; 
} 

последний селектор ребенка не работает в версиях IE 7 <

DEMO

+0

В настоящее время это решение выглядит следующим образом: http://s18.postimg.org/jok2ljwzd/line.png Как вы можете видеть, есть пара вопросов. Пробел между элементами списка можно исправить, используя пробел вместо поля, но я не уверен, что это оптимально ... Кроме того, я не хочу, чтобы линия увеличивала даже один пиксель выше первой пули или ниже последнего ... – transbetacism

+0

@graphic_dev, тогда вам нужно поиграть с прокладками, полями и компенсировать фоновое изображение точки маркера, чтобы все это выстроено вверх. Оптимальным решением является его использование, но использование границы. –

0

Вам нужно добавить внутреннюю и Outter DIV, а затем играть с полями. Вот что я имею в виду

DEMO: http://jsfiddle.net/kevinPHPkevin/N9svF/

ul { 
    padding-left:14px; 
    margin-top:-6px; 
    margin-bottom:-6px; 
    padding-bottom:0; 
} 
#mainDiv { 
    height: 200px; 
    width:200px; 
    position: relative; 
} 
#borderLeft { 
    border-left: 2px solid #f51c40; 
    position: absolute; 
    top: 25px; 
} 
+0

Я не думаю, что это сработает. Вы используете отрицательный нижний предел, чтобы убедиться, что строка не распространяется под последней маркой, но нет способа узнать, какова будет высота последнего элемента li. См. Этот пример, где у меня есть две строки содержимого для последнего элемента li: http://jsfiddle.net/N9svF/3/ – transbetacism

+0

ЭТО РАБОТЫ. Однако вы должны добавить отрицательное левое поле к элементам списка. Например: li {margin-left: -5px;} –

0

Возможно, это уже немного устарело, но здесь вы можете сделать это. Это требует немного больше разметки для создания стилей и контролировать высоту элементов (я использовал пролеты, но вы можете использовать тэги):

ol, 
 
ul { 
 
    list-style: none; 
 
} 
 
li { 
 
    display: flex; 
 
    flex-flow: row; 
 
    min-height: 100px; 
 
    position: relative; 
 
} 
 
span.number { 
 
    margin-right: 100px; 
 
    text-align: center; 
 
    width: 1em; 
 
    height: 1em; 
 
    background-color: red; 
 
    border-radius: 50%; 
 
    z-index: 1; 
 
} 
 
span.line { 
 
    position: absolute; 
 
    height: 100%; 
 
    border: solid black 0.1em; 
 
    top: 0.5em; 
 
    left: 0.45em; 
 
} 
 
li:last-child span.line { 
 
    display: none; 
 
} 
 
} 
 
span.blob {}
<ul> 
 
    <li><span class='line'></span><span class='number'>1</span> 
 
    <div class='blob'>Hello</div> 
 
    </li> 
 
    <li><span class='number'>2</span> 
 
    <div class='blob'>Goodbye</div> 
 
    </li> 
 
</ul>

http://jsfiddle.net/efava0je/

+0

Вы должны включить свой css из jsfiddle. – cpburnz

Смежные вопросы