【问题标题】:If the `li` element is a flexbox, then the bullet will not show?如果 `li` 元素是一个 flexbox,那么项目符号不会显示?
【发布时间】:2021-03-31 13:01:46
【问题描述】:

如果我们有无序列表,默认是有项目符号的:

<ul>
  <li>hello</li>
  <li>world</li>
</ul>

但是,如果我们将其设为 display: flex,则项目符号将不再显示:

li { display: flex }
<ul>
  <li>hello</li>
  <li>world</li>
</ul>

CSS中是否有这样的规则,因为它可能仍然显示项目符号但让

ul { list-style-type: none; }

控制是否显示子弹。

【问题讨论】:

  • 默认显示是list-item,如果你改变它,那么它就不再是一个列表项(它发生在所有值inline;inline-block等)
  • 元素的性质由CSS定义(默认显示来自用户代理CSS)
  • 如果您将li 设置为显示为弹性项目,您将无法设置list-style-type,因为它不再是list-item,这是li 的默认值。
  • @T.J.Crowder 您将 nature 视为语义,但我将其视为演示。我指的不是语义,我指的是根据规范使用用户代理 CSS 定义的默认行为:html.spec.whatwg.org/multipage/rendering.html#rendering
  • 哇。 JavaScript 版税在 CSS 中访问我们。荣誉@T.J.Crowder。你的回答让我经历了很多困难的情况。谢谢:-)

标签: css flexbox


【解决方案1】:

是的,你是对的。使用 display:flex 你告诉 ul 它不再是 display:list 了。如果您希望使用 flex 显示项目符号,请使用伪元素:

ul li:before {
    content: "";
    position: absolute;
    transform: translateY(-50%);
    top: 50%;
    border-radius: 50%;
    left: 0;
    margin-top: -7px; /* half bullet height */
    width: 14px;
    height: 14px;
    background: #000;
}

【讨论】:

  • 一个更简单的选择可能是在您使用 flex 设置样式的 &lt;li&gt; 标签内添加一个嵌套的 div/span 元素
  • @kano 嵌套 div/span 是另一种选择,你是对的。但它需要额外的 html,如果有很多列表,这将显着增加 DOM 大小......
猜你喜欢
  • 2017-12-10
  • 2019-09-18
  • 2023-04-02
  • 1970-01-01
  • 2017-06-16
  • 2016-02-21
  • 2015-11-05
  • 2018-09-15
  • 2015-12-30
相关资源
最近更新 更多