有没有一种方法可以使有序列表中的数字加粗?


68

是否有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>解决方法...



只需使用计数器重置和列表样式类型即可:none codepen.io/gc-nomade/pen/fdbEm
G-Cyrillus

Answers:


101

反增量

的CSS

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) ".";
}

演示


2
如果您的LI包含Ps或其他块级元素,则还需要撤消text-indent,就像这样...`ol> li * {text-indent:0; }`编辑:抱歉,代码格式在注释中损坏。
jenlampton 2014年

也感谢您添加文字缩进!这个解决方案是完美的!
spasticninja

在此处添加此自定义CSS时:hlbenefits.com/best-vegan-vegetarian-protein-sources-2016当编号变为1.1时,我得到一个奇怪的结果。| 2.1。| 3.1。| 等等。第二个(1)变粗体。因此,基本上,它增加了另一个编号而不进行计数。谁能告诉我为什么会这样?
faceoff

@faceoff设置list-style-typenone摆脱第一个(本机)数字。同样,此答案中建议的方法很聪明,但是如果出现li换行符,则很难正确地使文本左对齐。
Ted Nyberg

这不考虑具有指定的li type =“ a”,type =“ i”等的列表。如果您具有按字母顺序排列的列表,而一个项目具有按罗马顺序排列的嵌套列表,则所有这些都将变为十进制数。
弗朗西斯科·扎拉波佐

33

另一个简单的可能性是将列表项内容包装为<p>,将样式设置<li>为粗体和<p>正常。从IA的角度来看,这也是优选的,尤其是当<li>s可以包含子列表时(以避免将文本节点与块级元素混合)。

完整的示例为您提供方便:

<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>

如果您希望使用更通用的方法(该方法还可以覆盖<li>s而不是后代的s等其他场景<p>,则可能要使用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。)

如果您只想将块级后代的样式设置为常规样式,而不要像“ foo粗体字”这样的内联样式,请确保使用选择器,li > *而不要使用选择器li *<strong></strong> foo”。


与上面列出的两种方法相比,这是一种更轻松,更好的方法。如果您希望在主CSS文件中使用它,但又不希望它在应用程序范围内使用,请改用类(例如,ol-> class-name-1,li-> class-name-2)。
jdnew18

1
辉煌!这甚至应该是公认的答案。使用以下附加代码,您可以在不需要<p>s的情况下标准化嵌套列表:.listClassName li {font-weight: bold;} .listClassName li > *, .listClassName li > * > * {font-weight: normal;}
Frank Conijn

尽管灵活性较差,但这是对最初提出的问题的直接回答。
MaxPRafferty

什么是“ IA”
彼得·莫滕森

@ peter-mortensen:IA =信息架构
Stefan Gentz

20

JSFiddle:

ol {
    counter-reset: item;
}
ol li { display: block }

ol li:before {
    content: counter(item) ". ";
    counter-increment: item;
    font-weight: bold;
}

17

撰写新闻时,我遇到了类似的问题。因此,我必须以这种方式内联样式:

<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>

唯一适用于电子邮件的解决方案(在所有电子邮件模板中,因为我们无法在其中提供CSS)
afzalex


3

这是dcodesmith答案的更新 https://stackoverflow.com/a/21369918/1668200

当文本较长时(即需要换行),建议的解决方案也可以使用:更新了Fiddle

使用网格系统时,您可能需要执行以下一项操作(至少对于Foundation 6来说是正确的-无法在Fiddle中重现它):

  • 添加box-sizing:content-box;到列表或其容器
  • 或更改text-indent:-2em;-1.5em

PS:我想将此添加为原始答案的编辑,但被拒绝了。


3

如果您使用的是Bootstrap 4:

<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>

听起来很简单。我将尝试安装Bootstrap 4进行​​尝试。
Lewis86 '18 -5-14

3

回答来自dcodesmith的https://stackoverflow.com/a/21369918/2526049具有副作用,该副作用使所有类型的列表变为数字。 <ol type="a">将显示1. 2. 3. 4.而不是abcd

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类型选择大写或小写。


先前的答案有多个。您是全部还是一个?请通过编辑答案来回答(但不要包含“编辑:”,“更新:”或类似内容)。
彼得·莫滕森

0

您还可以将<span style =“ font-weight:normal”>放在a,b,c周围,然后在CSS中加粗ul。

ul {
    font-weight: bold;
}

<ul><li><span style="font-weight:normal">a</span></li></ul>

-1

答案很晚,但希望有人会发现这个有用

我有这样的情况:

  1. 项目清单

    一种。项目清单

第一项是<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>

希望这可以帮助某人!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.