Самый простой способ предотвратить это - просто дать элемент списка display: table-cell
:
.foo li {
display: table-cell;
padding-left: 20px;
}
<article>
<div>
<ul class='foo'>
<li class='num'>1.</li>
<li class='txt'>bar</li>
</ul>
<ul class='foo'>
<li class='num'>2.</li>
<li class='txt'>foo</li>
</ul>
<ul class='foo'>
<li class='num'>2a.</li>
<li class='txt'>very long test here so that it moves to a new line on the webpage</li>
</ul>
<ul class='foo'>
<li class='num'>5.</li>
<li class='txt'>bar</li>
</ul>
<ul class='foo'>
<li class='num'>6.</li>
<li class='txt'>foo</li>
</ul>
</div>
</article>
Кроме того, вы можете использовать display: flex
на родительском элементе и display: inline-flex
на элементе списка:
.foo {
display: flex;
}
.foo li {
display: inline-flex;
padding-left: 20px;
}
<article>
<div>
<ul class='foo'>
<li class='num'>1.</li>
<li class='txt'>bar</li>
</ul>
<ul class='foo'>
<li class='num'>2.</li>
<li class='txt'>foo</li>
</ul>
<ul class='foo'>
<li class='num'>2a.</li>
<li class='txt'>very long test here so that it moves to a new line on the webpage</li>
</ul>
<ul class='foo'>
<li class='num'>5.</li>
<li class='txt'>bar</li>
</ul>
<ul class='foo'>
<li class='num'>6.</li>
<li class='txt'>foo</li>
</ul>
</div>
</article>
Если вы хотите, чтобы текст был «полностью» в строке, вам нужно будет присвоить margin-left: -8px
элементу с дополнительной буквой внумерация:
.foo {
display: flex;
}
.foo li {
display: inline-flex;
padding-left: 20px;
}
.foo .long {
margin-left: -8px;
}
<article>
<div>
<ul class='foo'>
<li class='num'>1.</li>
<li class='txt'>bar</li>
</ul>
<ul class='foo'>
<li class='num'>2.</li>
<li class='txt'>foo</li>
</ul>
<ul class='foo'>
<li class='num'>2a.</li>
<li class='txt long'>very long test here so that it moves to a new line on the webpage</li>
</ul>
<ul class='foo'>
<li class='num'>5.</li>
<li class='txt'>bar</li>
</ul>
<ul class='foo'>
<li class='num'>6.</li>
<li class='txt'>foo</li>
</ul>
</div>
</article>
Сказав все это, 'лучший' способ справиться с этим будет использовать только один <ul>
и использоватьlist-style-type: decimal
.Таким образом, отступ выравнивается, и ваша нумерация обрабатывается для вас автоматически:
.foo li {
list-style-type: decimal;
padding-left: 20px;
}
<article>
<div>
<ul class='foo'>
<li>bar</li>
<li>foo</li>
<li>very long test here so that it moves to a new line on the webpage</li>
<li>bar</li>
<li>foo</li>
</ul>
</div>
</article>
Это может быть даже расширено, чтобы иметь подсписки, покрывающие латинские буквы, смещенные на минус margin-left
:
.foo li {
list-style-type: decimal;
padding-left: 20px;
}
.foo li ul li {
list-style-type: lower-alpha;
margin-left: -40px;
}
<article>
<div>
<ul class='foo'>
<li>bar</li>
<li>foo</li>
<li>foo
<ul>
<li>very long test here so that it moves to a new line on the webpage</li>
</ul>
</li>
<li>bar</li>
<li>foo</li>
</ul>
</div>
</article>