【问题标题】:What is the use of CSS display "list-item" if there is no display "list"?如果没有显示“列表”,CSS显示“列表项”有什么用?
【发布时间】:2014-10-16 03:39:55
【问题描述】:

我正在寻找使用来自 div 标签的列表项创建一个 HTML 列表元素。我知道有display:list-item,但如果我有这个:

 <ul>
  <li>A</li>
  <li>B</li>
  <li>C</li>
 </ul>

得到这个:

.item { display: list-item};
.list { display: block };
<div class="list">
  <div class="item">A</div>
  <div class="item">B</div>
  <div class="item">C</div>
</div>

什么都没有。

问题:
有没有办法使用&lt;div&gt; 标签获得&lt;ul&gt; 等价物,为什么display:list 不存在时会有display:list-item

谢谢!

【问题讨论】:

    标签: html css list responsive-design


    【解决方案1】:

    HTML 列表元素 - 例如 &lt;ol&gt;&lt;ul&gt;&lt;dl&gt; - 是 block-level elements 就像 &lt;div&gt; 是通用块级容器。

    唯一的区别是用户代理在用户代理样式表中的元素上应用了一些paddingmargin。例如,谷歌浏览器将以下内容应用于&lt;ul&gt; 元素:

    ul, menu, dir {
      display: block;
      list-style-type: disc;
      -webkit-margin-before: 1em;
      -webkit-margin-after: 1em;
      -webkit-margin-start: 0px;
      -webkit-margin-end: 0px;
      -webkit-padding-start: 40px;
    }
    

    可以看到,&lt;ul&gt; 右侧有padding,它允许在每个项目(左侧)旁边显示标记(项目符号)。否则它们会从盒子里伸出来,看不见。

    因此,为了伪造&lt;ul&gt; 的效果,你最终会得到这样的结果:

    .list {
        margin-top: 1em;
        margin-bottom: 1em;
        padding-left: 40px;
    }
    

    或者,我们可以通过将list-style-position: inside 赋予列表项,将标记的位置更改为框的inside

    【讨论】:

      【解决方案2】:

      使用list-item,您正在这样做:

      该元素为内容生成一个块框和一个单独的列表项内联框

      所以你需要定义列表项,这个属性允许你定义另一个属性,像这样:

      .list > div {
          display:list-item;
          list-style-type: disc;
          list-style-position: inside;
      }
      

      查看Demo Fiddle

      注意 >>

      如果你想定义某种子弹类型的图像,我建议使用@Doctus 的答案方法,但如果你想要一些数字,让我们使用这个并将asterisks 更改为decimal

      【讨论】:

        【解决方案3】:

        你所拥有的一切都会好起来的。您需要做的就是将list-style 属性添加到.list 项。

        例如

        .item {
            display: list-item;
            list-style: disc inside;
        }
        

        【讨论】:

        • 这会创建一个项目符号列表,但它没有按要求创建 &lt;ul&gt; 的等效项。所以我想知道真正的问题是什么。
        • @frequent 实际上它并不一定需要使用list-style 属性。您只需在.list 的右侧添加一些填充即可看到子弹。伪造&lt;ul&gt; 的效果(取自Chrome):.list { margin-top: 1em; margin-bottom: 1em; padding-left: 40px; }
        • @HashemQolami 请将您的注释作为 asnwer 发布......因为这是真正的答案,唯一有助于 celmar 回答和我的是 inside 规则
        • @HashemQolami:同意丹科的观点
        【解决方案4】:

        我什至不会理会display: list-item,创建一个容器,将 div“项目”嵌套在其中,然后使用伪元素创建项目符号:

        http://jsfiddle.net/0j5uch7q/

        .list
        {
            display: block;
            padding-left: 20px;
        }
        
        .item
        {
            display: block;
            margin-bottom: 2px;
            position: relative;
        }
        
        .item:before
        {
            content: " ";
            display: block;
            width: 6px;
            height: 6px;
            border-radius: 3px;
            background: #000;
            position: absolute;
            left: -13px;
            top: 6px;
        }
        <ul>
            <li>A</li>
            <li>B</li>
            <li>C</li>
        </ul>
        
        <hr>
        
        <div class="list">
          <div class="item">A</div>
          <div class="item">B</div>
          <div class="item">C</div>
        </div>

        您可能想玩转定位,但这是它的基础。

        【讨论】:

        • 这没有回答任何一个问题。
        • @JukkaK.Korpela "有没有办法使用
          标签获得
            等价物"
        • @frequent 是的,我建议你使用其中之一:)
        猜你喜欢
        相关资源
        最近更新 更多
        热门标签