У меня есть то, что, по моему мнению, должно быть относительно простым набором ограничений, для которых я не могу найти решение.Я пытаюсь создать набор стилей WYSIWYG-компонентов, которые будут гибко работать вместе и не могут получить комбинацию маркированных / нумерованных списков для предсказуемого переноса вокруг всплывающих фигур без потери отступов или создания наложения контента:
Ограничения:
- Вложенные списки должны иметь больший отступ с каждым уровнем вложенности
- Плавающее содержимое может перемещаться либо вправо, либо влево
- Списки могут быть произвольнымиlong и должен предсказуемо обернуться вокруг плавающего содержимого
Это стиль по умолчанию для списка справа от содержимого, для которого установлено значение «float: left».Пули пересекаются с плавающим содержимым, и отступ теряется.
.pull-left {
background: #3333ff;
color: white;
float: left;
width: 50%;
height: 80px;
}
<div class="pull-left">Floating content</div>
<ul>
<li>First Item
<ul>
<li>Nested Item</li>
<li>Nested Item</li>
</ul>
</li>
<li>Second Item</li>
<li>Third Item
<ul>
<li>Nested Item</li>
<li>Nested Item</li>
</ul>
</li>
</ul>
Установка значения overflow
(т.е. overflow: hidden
) в элементе <ul>
исправляет форматирование маркера + отступ, но не позволяетсодержимое для упаковки:
.pull-left {
background: #3333ff;
color: white;
float: left;
width: 50%;
height: 80px;
}
ul {
overflow: hidden;
}
<div class="pull-left">Floating content</div>
<ul>
<li>First Item
<ul>
<li>Nested Item</li>
<li>Nested Item</li>
</ul>
</li>
<li>Second Item</li>
<li>Third Item
<ul>
<li>Nested Item</li>
<li>Nested Item</li>
</ul>
</li>
</ul>
Единственное другое решение, о котором я могу подумать, это использовать вложенные transform
s и смещение padding
, чтобы заставить его работать:
.pull-left {
background: #3333ff;
color: white;
float: left;
width: 50%;
height: 80px;
}
ul {
padding: 0;
}
li {
list-style-position: inside;
transform: translateX(30px);
padding-right: 30px;
}
<div class="pull-left">Floating content</div>
<ul>
<li>First Item
<ul>
<li>Nested Item</li>
<li>Nested Item</li>
</ul>
</li>
<li>Second Item</li>
<li>Third Item
<ul>
<li>Nested Item</li>
<li>Nested Item</li>
</ul>
</li>
</ul>
Однако это решение не работает, когда плавающий контент перемещается вправо:
.pull-right {
background: #3333ff;
color: white;
float: right;
width: 50%;
height: 80px;
}
ul {
padding: 0;
}
li {
list-style-position: inside;
transform: translateX(30px);
padding-right: 30px;
}
<div class="pull-right">Floating content</div>
<ul>
<li>First Item
<ul>
<li>Nested Item with long enough text that it overlaps the floating content</li>
<li>Nested Item</li>
</ul>
</li>
<li>Second Item</li>
<li>Third Item
<ul>
<li>Nested Item</li>
<li>Nested Item</li>
</ul>
</li>
</ul>
Я искал в интернете гибкое решение этой проблемы и нигде не могу ничего найти.Разве этот набор (довольно разумных) ограничений не является чем-то, что можно сделать?Или я что-то упустил?