有没有 CSS 选择器可以仅将样式附加到有序列表的数字部分?
我的 HTML 如下:
<ol>
<li>a</li>
<li>b</li>
<li>c</li>
</ol>
应输出:
1.a
2.b
3.c
我需要将1、2和3加粗,同时保留a、b和c的原样。
我知道可以使用<span>
标签来解决这个问题...
有没有 CSS 选择器可以仅将样式附加到有序列表的数字部分?
我的 HTML 如下:
<ol>
<li>a</li>
<li>b</li>
<li>c</li>
</ol>
应输出:
1.a
2.b
3.c
我需要将1、2和3加粗,同时保留a、b和c的原样。
我知道可以使用<span>
标签来解决这个问题...
使用 CSS 属性 counter-increment
ol {
margin:0 0 1.5em;
padding:0;
counter-reset:item;
}
ol>li {
margin:0;
padding:0 0 0 2em;
text-indent:-2em;
list-style-type:none;
counter-increment:item;
}
ol>li:before {
display:inline-block;
width:1.5em;
padding-right:0.5em;
font-weight:bold;
text-align:right;
content:counter(item) ".";
}
<ol>
<li>a</li>
<li>b</li>
<li>c</li>
</ol>
ol > li * { text-indent: 0; }
编辑:抱歉,评论中的代码格式似乎已损坏。 - jenlamptonlist-style-type
设置为 none
可以去掉第一个(本地)数字。此外,这个答案中建议的方法很聪明,但如果 li
换行,将使左对齐文本变得困难。 - Ted Nyberg在CSS Pseudo-Elements Level 4中添加了新的::marker
伪元素选择器,可以轻松地将列表项数字设置为粗体。
ol > li::marker {
font-weight: bold;
}
<p>
中,将<li>
样式设置为粗体,<p>
样式设置为普通。从信息架构的角度来看,这也是更可取的选择,尤其是当<li>
包含子列表时(以避免文本节点与块级元素混合)。
以下是完整示例:
<html>
<head>
<title>Ordered list items with bold numbers</title>
<style>
ol li {
font-weight:bold;
}
li > p {
font-weight:normal;
}
</style>
</head>
<body>
<ol>
<li>
<p>List Item 1</p>
</li>
<li>
<p>Liste Item 2</p>
<ol>
<li>
<p>Sub List Item 1</p>
</li>
<li>
<p>Sub List Item 2</p>
</li>
</ol>
</li>
<li>
<p>List Item 3.</p>
</li>
</ol>
</body>
</html>
如果您希望采用更通用的方法(也可以涵盖其他场景,例如带有除 <p>
之外的后代的 <li>
),则可以使用 li > *
而不是 li > p
:
<html>
<head>
<title>Ordered list items with bold numbers</title>
<style>
ol li {
font-weight:bold;
}
li > * {
font-weight:normal;
}
</style>
</head>
<body>
<ol>
<li>
<p>List Item 1</p>
</li>
<li>
<p>Liste Item 2</p>
<ol>
<li>
<p>Sub List Item 1</p>
</li>
<li>
<p>Sub List Item 2</p>
</li>
</ol>
</li>
<li>
<p>List Item 3.</p>
</li>
<li>
<code>List Item 4.</code>
</li>
</ol>
</body>
</html>
请检查这里的列表项4,它是ol/li/code而不是ol/li/p/code。
如果你只想将块级后代元素样式化为常规元素,请确保使用选择器li > *
而不是li *
,但不包括像“foo <strong>
bold word</strong>
foo.”这样的内联元素。
<p>
标签:.listClassName li {font-weight: bold;} .listClassName li > *, .listClassName li > * > * {font-weight: normal;}
- Frank Conijn - Support Ukraineol {
counter-reset: item;
}
ol li { display: block }
ol li:before {
content: counter(item) ". ";
counter-increment: item;
font-weight: bold;
}
我在写一封通讯时也遇到了类似的问题。因此,我不得不以这种方式内联样式:
<ol>
<li style="font-weight:bold"><span style="font-weight:normal">something</span></li>
<li style="font-weight:bold"><span style="font-weight:normal">something</span></li>
<li style="font-weight:bold"><span style="font-weight:normal">something</span></li>
</ol>
来自dcodesmith的https://dev59.com/H2Ei5IYBdhLWcg3wWLIS#21369918答案具有将所有类型的列表变为数字的副作用。
<ol type="a">
会显示1. 2. 3. 4.而不是a. b. c. d。
ol {
margin: 0 0 1.5em;
padding: 0;
counter-reset: item;
}
ol > li {
margin: 0;
padding: 0 0 0 2em;
text-indent: -2em;
list-style-type: none;
counter-increment: item;
}
ol > li:before {
display: inline-block;
width: 1em;
padding-right: 0.5em;
font-weight: bold;
text-align: right;
content: counter(item) ".";
}
/* Add support for non-numeric lists */
ol[type="a"] > li:before {
content: counter(item, lower-alpha) ".";
}
ol[type="i"] > li:before {
content: counter(item, lower-roman) ".";
}
<ol class="font-weight-bold">
<li><span class="font-weight-light">Curabitur aliquet quam id dui posuere blandit.</span></li>
<li><span class="font-weight-light">Curabitur aliquet quam id dui posuere blandit.</span></li>
</ol>
这是对dcodesmith答案的更新 https://dev59.com/H2Ei5IYBdhLWcg3wWLIS#21369918
如果文本较长 (即需要换行),建议使用以下解决方案: 更新版Fiddle
当您使用网格系统时,您可能需要执行以下操作之一 (至少Foundation 6是如此 - 在Fiddle中无法复制):
box-sizing: content-box;
添加到列表或其容器中text-indent:-2em;
更改为-1.5em
P.S.: 我想将此作为原始答案的编辑添加,但被拒绝了。
您也可以在a、b、c周围放置<span style="font-weight:normal">,然后在CSS中将ul加粗。
ul {
font-weight: bold;
}
<ul><li><span style="font-weight:normal">a</span></li></ul>
回答有点晚,但希望有人会发现这个有用
我遇到了这样的情况:
列表项
a. 列表项
第一项是 <strong>
,子元素是普通字体,而 '1.' 就是无法加粗。
我的解决方案是使用 jQuery:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
if ($('ol').has('li').has('strong')) {
$('ol ').css('font-weight', 'bold');
$('ol > li > ol').css('font-weight', 'normal');
}
});
</script>
希望这能帮助到某人!