【问题标题】:Custom List style not working自定义列表样式不起作用
【发布时间】:2014-03-04 03:50:58
【问题描述】:

我试图为<li> 元素添加一个很棒的字体列表样式。

<ul>
    <li>
    <i class="fa fa-circle-o"></i>
    <a rel="tooltip" data-original-title="To not influence reports" title="">Do not track Events coming from your IP</a>
    </li>
    <li>
    <i class="fa fa-circle-o"></i>
    <a rel="tooltip" data-original-title="To not influence reports" title="">Do not track Events coming from your IP</a>
    </li>
    <li>
    <i class="fa fa-circle-o"></i>
    <a rel="tooltip" data-original-title="To not influence reports" title="">Do not track Events coming from your IP</a>
    </li>
</ul>

和css

li{
    list-style:none;
}

但是当我们调整窗口大小时,li 文本会在列表样式的圆圈下方,这是不可接受的。我认为它应该在列表样式圈之后开始,即使文本进入第二行。

有人可以建议我一个更好的方法吗? jsfiddle:http://jsfiddle.net/n6bf3/

【问题讨论】:

  • @bjb568,如果你去jsfiddle,你可以看到列表样式为圆形的列表。现在,如果您调整窗口大小以使该行进入第二行,它将位于圆圈的正下方(列表样式)。但应该有一个缩进。如果您查看 stackoverflow 页面中的 related 部分,就在此评论的正前方,您可以看到数字部分是一个单独的部分,第二行文本的开头不低于数字。这就是我想要的。

标签: html css


【解决方案1】:

列表标记的行为不像列表标记的原因是因为您使用的标记不是真正的列表标记,它是列表元素内部的一个元素。字形和文本在同一个容器中,因此根据normal flow 包裹在它下面。

您可以拼凑一些方法使其按预期工作,但仅使用真正的标记会容易得多,并且会产生更清洁、更易于维护的代码。

<li>
<a rel="tooltip" data-original-title="To not influence reports" title="">Do not track Events coming from your IP</a>
</li>

使用默认圆圈:

li{
    list-style: circle;
}

http://jsfiddle.net/UselessCode/B842c/

如果您必须使用自定义图像而不是默认标记之一,您也可以使用标记样式来做到这一点:

li{
    list-style-image: url("circle-bullet.png")
}

http://jsfiddle.net/UselessCode/fPBrS/

【讨论】:

  • 如果操作人员只是想要一种方法来创建一个带圆圈的列表,我建议您遵循此方法。我的回答是基于这样的理解,即操作者想要使用特定的网络字体作为他的标记。 fwiw,如果干净的 html 和特定的 web 字体是关键标准,我个人会使用 :before css 在 css 中添加列表项内容,也不让它显示在 html 中,所以可以使用 webfonts 并仍然使用这个语义标记
  • 而且好像已经这样解释过了..stackoverflow.com/questions/12468359/…
【解决方案2】:

有几种方法可以做到这一点。基本上,如果你想让圆圈显示在锚文本旁边,即使文本已经换行,你本质上是希望 CSS 按行布局。所以在这种情况下,这是最简单的方法:

li{
    list-style:none;
    display:table-row;
}

li *
{
    display:table-cell;
}

http://jsfiddle.net/mL34R/1/

但是,css 中的表格布局可能很挑剔,所以这是另一种将元素彼此相邻放置为内联块的方式,但允许锚内容正常换行:

li{
    list-style:none;
    white-space:nowrap;
}

li i
{
    display:inline-block;
    vertical-align:top;
}

li a
{
    display:inline-block;
    white-space:normal;
}

http://jsfiddle.net/pV4cp/

【讨论】:

  • inline-block 有空间问题。 i 和 a 之间有空格。
  • 这取决于您是否认为这是一个问题。 table-row 方法没有这个空间,但是 imo 看起来更糟。您可以添加 margin-right:-3px;如果您特别关心它,请使用 li i 样式。
  • 对于一些&lt;a&gt;,我使用虚线作为使用边框底部的文本装饰。因此,如果文本进入另一行,则整个文本下方将只有一行。
  • 这可能是另一个问题.. 我认为您不会实现自定义下划线,至少不会在 css 中包装。当文本进入第二行时,包含块会增长。
  • 好的,有办法,但还是有点不支持:developer.mozilla.org/en-US/docs/Web/CSS/…
【解决方案3】:

http://jsfiddle.net/n6bf3/2/

i {
    position: absolute;
}
a {
    display: block;
    padding-left: 16px;
}

定位i 绝对会使其脱离a 的方式,因此a 可以得到它的padding-left(只有在a 被阻止时才能正常工作)。

【讨论】:

  • 在样式中添加特定的尺寸(例如 16 像素)意味着现在不考虑字体大小。如果使用不同的圆形字体,则必须手动调整此样式。
  • 如果我在某些列表中没有一些 标签,它就不能正常工作。
  • @Mike 无论如何你都会设置字体大小。如果需要,可以使用预处理器变量。
  • @user1012181 你可以给li一个min-height: 18px。
猜你喜欢
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 2015-07-05
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
相关资源
最近更新 更多