Я хочу, чтобы сделать список, который выглядит следующим образом:Создание списка иерархического с чистым CSS
я не уверен, если есть название для этого типа конструкции, но «иерархического список «вернул результаты в google, которые выглядят так, как я хочу, поэтому я называю это здесь. Это, по сути, тот же шаблон пользовательского интерфейса, который можно увидеть, например, с помощью браузера файловой системы (но это не мой вариант использования).
Я считаю, что могу добиться этого с помощью SVG, но мне интересно, есть ли способ с чистым CSS?
Одна вещь, которую я пробовал, - это вложенный <ul>
с псевдоэлементом before
, содержащий символ рисования в виде юникода, например ┖
. То, что я до сих пор это:
ul {
position: relative;
}
li {
list-style: none;
}
li.child::before {
content: "┖";
transform: scale(1, 1.8);
position: absolute;
left: 1em;
}
<ul>
<li>Root</li>
<ul>
<li class="child">Child Lv. 1</li>
<ul>
<li class="child">Child Lv. 2</li>
</ul>
<li class="child">Child Lv. 1</li>
<ul>
<li class="child">Child Lv. 2</li>
<li class="child">Child Lv. 2</li>
</ul>
</ul>
</ul>
Это выглядит довольно мерзко, и я не могу думать о какой-либо способ на самом деле имеют вертикальные линии, которые соединяют по пунктам, как я в моем примере изображения , Познакомились бы с любыми трюками, которые могут помочь мне приблизиться к моему примеру с изображением.
SVG может быть приемлемым, но я не хочу добавлять какие-либо тяжеловесные библиотеки только для этого одного компонента пользовательского интерфейса, поэтому я прошу очистить CSS.
Я бы попытался придать псевдоэлементам рамку-левый и -ббот (вместо символа '┖') для достижения линий. Думаю, что с правильной шириной/высотой и положением, которые должны работать достаточно хорошо. – CBroe
Я согласен, что смогу позиционировать их лучше, но моя главная забота - я не думаю, что когда-нибудь смогу иметь вертикальную линию, соединяющую два «Child Lv». 1' в моем примере изображения, если я не понимаю вас – qwwqwwq
Эта линия будет левым краем псевдоэлемента внутри второго ребенка Lv1. Насколько высок этот элемент, который должен быть сделан, зависит от того, сколько детей у первого Lv1 находится ниже него, поэтому вам нужно будет как-то подсчитать их. (Разумеется, все это развалится, если один из ваших элементов разбит на несколько строк. Тогда ему может понадобиться JS для динамического вычисления необходимых значений высоты.) – CBroe