【问题标题】:How to keep consistence space before list item如何在列表项之前保持一致性空间
【发布时间】:2017-01-31 18:47:51
【问题描述】:

我有这个无序列表:

<ul>
<li><i class="fa fa-chevron-down"></i>Item 1</li>
<li><i class="fa fa-chevron-left"></i>Item 2</li>
<li>Item 3</li>
</ul>

如何让“项目”一词在左侧(而不是中间)垂直排列?项目的第一个字母应该是垂直的。

问题是有时会有一个图标。有时不是。并且有时图标的大小会略有不同,例如向下和向左图标之间的差异。

这基本上是一个简单的树形视图显示。

【问题讨论】:

  • &lt;i&gt;上做vertical-align:top;
  • 我不是在寻找垂直居中。图标左对齐后的第一个单词。

标签: html css


【解决方案1】:

您将需要固定宽度的图标来完成您的要求。除非有固定宽度,否则无法对齐项目。从版本 3.1.1 开始,您可以使用类 icon-fixed-width 和自版本 4.0 以来的 fa-fw 为 font-awesome 图标添加固定宽度。这给出了1.28571429em 的固定值,这很烦人,但始终如一。

不幸的是,CSS 没有 :parent 选择器,因此您可能需要向 &lt;li&gt; 标签添加一个类,指定它们是否包含图标:

<ul>
    <li class="yes"><i class="fa fa-fw fa-chevron-down"></i>Item 1</li>
    <li class="yes"><i class="fa fa-fw fa-chevron-left"></i>Item 2</li>
    <li>Item 3</li>
</ul>

li:not(.yes) {
    padding-left: 1.28571429em;
}

我在这里创建了一个小提琴:http://jsfiddle.net/3qwkkg4a/1/

当然,您总是可以将类放在不包含图标的&lt;li&gt; 标签上,或者在这个特定示例中只使用li:nth-of-type(3) 定位第三个标签;)

希望这会有所帮助! :)

编辑

这些类也可以通过 jQuery 添加,假设您有访问权限,使用:

$('li:has(i)').addClass('yes');

可以在此处看到展示这一点的小提琴,而 HTML 保持不变:

http://jsfiddle.net/Obsidian_Age/3qwkkg4a/2/

【讨论】:

  • 我认为这根本不能真正回答这个问题。 OP 正在寻找垂直对齐方式
  • @JacobGray:OP 询问“我如何让‘项目’这个词垂直排列?”。前两行在图标右侧显示了“项目”一词,并且他的图标占据了可变宽度。他想在一个正下方显示所有三个单词“Item”。要像这样垂直对齐单词,您需要修改第三个
  • 项的水平偏移量。您还需要确保所有图标在自己内部占据相同的宽度:)
  • @ObsidianAge 我试过了,这如您的示例所示。但是,这些项目是在代码中创建的。所以我最终得到了所有带有'yes'类的li元素,所以它们都以额外的缩进结束。可能有 3 个项目,或 30 个。
  • 不幸的是,这必须在代码中解决。有 multiple other questions 关于基于其子元素的样式,但不幸的是,这在 CSS 中是不可能的。恐怕你能做的最好的事情就是根据条件代码定义一个类后端。 jQuery 也是一个选项,如果可用的话。
  • 没问题!很高兴听到我在正确的轨道上与你所追求的。遗憾的是您需要在后端代码中创建项目,但如果您可以访问 jQuery,则可以使用 $('li:has(i)').addClass('yes'); 解决问题,这将即时创建相关类。我在我的答案中添加了一个新的小提琴来展示这一点。否则,恐怕您的 only 选项是以某种方式修改条件后端逻辑中的类。
  • 【解决方案2】:

    li 一个固定的padding-leftposition: relative 并将图标position: absolute; 放在左边应该可以解决您的问题。

    li {
      padding-left: 40px;
      position: relative;
    }
    
    li i {
      left: 0;
      position: absolute;
      top: 0;
    }
    

    此外,您可以为图标设置宽度或最大宽度:

    li i {
      left: 0;
      position: absolute;
      top: 0;
      max-width: 30px;
    }
    

    【讨论】:

    【解决方案3】:

    尝试将文本放在一个跨度中并使用下面的 css 代码

    <ul>
    <li><i class="fa fa-chevron-down"></i><span>Item 1</span></li>
    <li><i class="fa fa-chevron-left"></i><span>Item 2</span></li>
    <li>Item 3</li>
    </ul>
    

    和css

    ul li i{vertical-align:middle}
    ul li span{vertical-align:middle}
    

    希望它能解决你的问题

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签