html - 使用 :before to increment counter with sub lists 时防止列表项文本在元素下换行

标签 html css list

我有一个简单的有序列表,其中包含一些列表项,其中可能有一个子列表。我想将列表项的数量增加到子/子有序列表,所以布局如下:

1. Blah blah blah
2. Yeah yeah yeah
3. Jadda jadda jadda
3.1 Sub jadda
3.2 Sub Jadda

这并不难,我的代码就是这样做的(看看代码片段)...

.container {
	background-color: #c7e8f7;
	border: 1px solid #00bcd4;
	width:800px;
	padding: 5px;
}

ol {
	counter-reset: item;
	list-style-type: none;
	padding-left: 0px;
}

li:before {
	content: counters(item, ".") ".";
	counter-increment: item;
}

/* Add an indent to the sub ol*/

ol ol {
	padding-left: 10px;
}
<div class="container">
<ol>
	<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis, interdum libero non, tincidunt dolor. Quisque vestibulum vitae augue eu tempus. Suspendisse nec enim mollis, auctor mi vitae, tincidunt lectus. Nullam interdum nisi at elit pretium, in tempus elit pharetra. Etiam posuere tempor sapien. Mauris pretium augue sapien, id vestibulum elit scelerisque a. Sed condimentum ligula mauris, in posuere metus ultricies eu. Quisque ac sem ut mauris finibus porta. Etiam sit amet aliquam odio, eu interdum tortor. Etiam ac porttitor nunc, quis elementum diam. Morbi nec vestibulum quam. Proin ultricies tempus tellus sit amet ultrices. Cras quam dolor, vestibulum non quam ut, rutrum tincidunt augue. Vestibulum et nisl elit.</li>
	<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis, interdum libero non, tincidunt dolor. Quisque vestibulum vitae augue eu tempus. Suspendisse nec enim mollis, auctor mi vitae, tincidunt lectus. Nullam interdum nisi at elit pretium, in tempus elit pharetra. Etiam posuere tempor sapien. Mauris pretium augue sapien, id vestibulum elit scelerisque a. Sed condimentum ligula mauris, in posuere metus ultricies eu. Quisque ac sem ut mauris finibus porta. Etiam sit amet aliquam odio, eu interdum tortor. Etiam ac porttitor nunc, quis elementum diam. Morbi nec vestibulum quam. Proin ultricies tempus tellus sit amet ultrices. Cras quam dolor, vestibulum non quam ut, rutrum tincidunt augue. Vestibulum et nisl elit.</li>
	<li> here is some text...
		<ol>
			<li>orem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis</li>
			<li>orem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis</li>
			<li>orem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis</li>
			<li>orem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis</li>
		</ol>
	</li>
</ol>
</div>

现在的问题是我的文本在列表项编号下换行,我不想要这个,我希望该编号有一个列(就像我没有使用 :before 设置增量数)。我上传的图片显示了内容如何在数字下方换行。有谁知道不修改 HTML 结构(仅限 CSS) 以防止换行的方法吗?

请注意,如果我没有清楚地描述我的问题,请说明,我会重新措辞 - 非常感谢。

enter image description here

最佳答案

这可以通过使用列表上的 display: table 属性来完成。然后在 li:before 上应用 display: table-cell 以便在第二行提供缩进等等。 display: table-row on li 为了让 li 文本与 table-cell 在同一行.

CSS 的补充

ol{
  display: table;
}

li:before {
  display: table-cell;
}

li {
  display: table-row;
  // Add spacing to left as per requirement.
}

片段

    .container {
  background-color: #c7e8f7;
  border: 1px solid #00bcd4;
  width: 800px;
  padding: 5px;
}

ol {
  counter-reset: item;
  list-style-type: none;
  padding-left: 0px;
  display: table;
}

li {
  display: table-row;
}

li:before {
  content: counters(item, ".") ".";
  counter-increment: item;
  display: table-cell;
}


/* Add an indent to the sub ol*/

ol ol {
  padding-left: 10px;
}
<div class="container">
<ol>
	<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis, interdum libero non, tincidunt dolor. Quisque vestibulum vitae augue eu tempus. Suspendisse nec enim mollis, auctor mi vitae, tincidunt lectus. Nullam interdum nisi at elit pretium, in tempus elit pharetra. Etiam posuere tempor sapien. Mauris pretium augue sapien, id vestibulum elit scelerisque a. Sed condimentum ligula mauris, in posuere metus ultricies eu. Quisque ac sem ut mauris finibus porta. Etiam sit amet aliquam odio, eu interdum tortor. Etiam ac porttitor nunc, quis elementum diam. Morbi nec vestibulum quam. Proin ultricies tempus tellus sit amet ultrices. Cras quam dolor, vestibulum non quam ut, rutrum tincidunt augue. Vestibulum et nisl elit.</li>
	<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis, interdum libero non, tincidunt dolor. Quisque vestibulum vitae augue eu tempus. Suspendisse nec enim mollis, auctor mi vitae, tincidunt lectus. Nullam interdum nisi at elit pretium, in tempus elit pharetra. Etiam posuere tempor sapien. Mauris pretium augue sapien, id vestibulum elit scelerisque a. Sed condimentum ligula mauris, in posuere metus ultricies eu. Quisque ac sem ut mauris finibus porta. Etiam sit amet aliquam odio, eu interdum tortor. Etiam ac porttitor nunc, quis elementum diam. Morbi nec vestibulum quam. Proin ultricies tempus tellus sit amet ultrices. Cras quam dolor, vestibulum non quam ut, rutrum tincidunt augue. Vestibulum et nisl elit.</li>
	<li> here is some text...
		<ol>
			<li>orem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis</li>
			<li>orem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis</li>
			<li>orem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis</li>
			<li>orem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fringilla tellus purus, quis convallis odio accumsan at. Pellentesque non sagittis risus. Morbi in nulla lobortis</li>
		</ol>
	</li>
</ol>
</div>

关于html - 使用 :before to increment counter with sub lists 时防止列表项文本在元素下换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42228492/

相关文章:

javascript - 旋转木马幻灯片(未滑动)事件的火灾事件,Bootstrap 3

html - 使用背景图标拆分 css 边框

CSS:高度:100% 与底部:0

javascript - 我想将文本放入 SVG(youtube Logo )

java - 如何像数组一样迭代列表

javascript - 无法获取 particleground javascript 作为 div/部分的背景

jquery - 如何比较两个 XML 并在网页上显示它们的差异?

jquery - 当滚动时图像随 div 移动时,如何将图像粘贴到 div 的左侧?

C# - 实时显示多行文本框计数

java - 如何从 ant CSV 属性中提取第一个元素