css 带有font-awesome图标的自定义li列表样式

z5btuh9x  于 2023-01-18  发布在  其他
关注(0)|答案(9)|浏览(134)

我想知道是否有可能利用font-awesome(或任何其他图标字体)类来创建一个自定义的<li>列表样式类型?
我目前正在使用jQuery来实现这一点,即:

$("li.myClass").prepend("<i class=\"icon-chevron-right\"></i>");

然而,当<li>文本在页面上换行时,这就不能正确地设置样式,因为它认为图标是文本的一部分,而不是实际的项目符号指示器。
有什么建议吗?

e1xvtsh3

e1xvtsh31#

CSS列表和计数器模块第3级引入了::marker伪元素。据我所知,它允许这样的事情。不幸的是,似乎没有浏览器支持它。
下面的解决方案适用于任何类型的图标字体。但FontAwesome显然提供了自己的方法来实现这一点(我在写答案之前并不知道这一点)。查看Darrrrrren的答案以了解更多细节。
它的工作原理是向父ul添加一些填充,然后将图标拉入该填充中:

ul {
  --icon-space: 1.3em;
  list-style: none;
  padding: 0;
}

li {
  padding-left: var(--icon-space);
}

li:before {
  content: "\f00c"; /* FontAwesome Unicode */
  font-family: FontAwesome;
  display: inline-block;
  margin-left: calc( var(--icon-space) * -1 );
  width: var(--icon-space);
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<ul>
  <li>Item one</li>
  <li>Item two</li>
</ul>

根据自己的喜好调整填充/字体大小/等,就这样。

    • 编辑:**

到目前为止,::marker伪元素已经有90%的浏览器支持,下面是一个使用它的实现。

ul {
  --icon-size: .8em;
  --gutter: .5em;
  padding: 0 0 0 var(--icon-size);
}

ul li {
  padding-left: var(--gutter);
}

ul li::marker {
  content: "\f00a"; /* FontAwesome Unicode */
  font-family: FontAwesome;
  font-size: var(--icon-size);
}
ni65a41a

ni65a41a2#

根据Font Awesome Documentation

<ul class="fa-ul">
  <li><i class="fa-li fa fa-check"></i>Barbabella</li>
  <li><i class="fa-li fa fa-check"></i>Barbaletta</li>
  <li><i class="fa-li fa fa-check"></i>Barbalala</li>
</ul>

或者,使用Jade:

ul.fa-ul
  li
    i.fa-li.fa.fa-check
    | Barbabella
  li
    i.fa-li.fa.fa-check
    | Barbaletta
  li
    i.fa-li.fa.fa-check
    | Barbalala
xlpyo6sf

xlpyo6sf3#

我想提供一个替代的,更简单的解决方案,这是具体的FontAwesome。如果你使用不同的图标字体,JOPLomacedo的答案仍然是完美的罚款使用。
FontAwesome now handles list styles internally with CSS classes.
下面是官方的例子:

<ul class="fa-ul">
  <li><span class="fa-li"><i class="fas fa-check-square"></i></span>List icons can</li>
  <li><span class="fa-li"><i class="fas fa-check-square"></i></span>be used to</li>
  <li><span class="fa-li"><i class="fas fa-spinner fa-pulse"></i></span>replace bullets</li>
  <li><span class="fa-li"><i class="far fa-square"></i></span>in lists</li>
</ul>
von4xj4u

von4xj4u4#

我想补充一下Joplomacedo的回答。他的解决方案是我最喜欢的,但当li有多行时,我总是遇到缩进的问题。找到正确的缩进和边距等是很麻烦的。但这可能只是我关心的问题。
对于我来说,:before伪元素的绝对定位效果最好。我在ul上设置padding-left,在:before元素上设置负位置,与ul的padding-left相同。为了获得内容到:before元素的距离,我只在li上设置padding-left。当然li必须具有相对位置。例如

ul {
  margin: 0 0 1em 0;
  padding: 0 0 0 1em;
  /* make space for li's :before */
  list-style: none;
}

li {
  position: relative;
  padding-left: 0.4em;
  /* text distance to icon */
}

li:before {
  font-family: 'my-icon-font';
  content: 'character-code-here';
  position: absolute;
  left: -1em;
  /* same as ul padding-left */
  top: 0.65em;
  /* depends on character, maybe use padding-top instead */
  /*  .... more styling, maybe set width etc ... */
}

希望这是明确的,并有一些价值的人比我。

ljo96ir5

ljo96ir55#

我做了两件事的灵感来自@奥斯卡Jovanny评论,与一些黑客。
第一步:

  • Here下载图标文件为svg,因为我只需要从字体真棒这个图标

第二步:

<style>
ul {
    list-style-type: none;
    margin-left: 10px;
}

ul li {
    margin-bottom: 12px;
    margin-left: -10px;
    display: flex;
    align-items: center;
}

ul li::before {
    color: transparent;
    font-size: 1px;
    content: " ";
    margin-left: -1.3em;
    margin-right: 15px;
    padding: 10px;
    background-color: orange;
    -webkit-mask-image: url("./assets/img/check-circle-solid.svg");
    -webkit-mask-size: cover;
}
</style>
    • 结果**

ukdjmx9f

ukdjmx9f6#

我是这样做的:

li {
  list-style: none;
  background-image: url("./assets/img/control.svg");
  background-repeat: no-repeat;
  background-position: left center;
}

如果您想更改颜色,也可以尝试以下操作:

li::before {
  content: "";
  display: inline-block;
  height: 10px;
  width: 10px;
  margin-right: 7px;

  background-color: orange;
  -webkit-mask-image: url("./assets/img/control.svg");
  -webkit-mask-size: cover;
}
wqlqzqxt

wqlqzqxt7#

既然::marker元素在evergreenbrowsers中可用,下面就是使用它的方法,包括使用:hover更改标记,如您所见,现在您可以使用任何Unicode字符作为列表项标记,甚至可以使用自定义计数器。

@charset "UTF-8";
@counter-style fancy {
  system: fixed;
  symbols: 🙂 😀 😁;
  suffix: " ";
}

p {
  margin-left: 8em;
}

p.note {
  display: list-item;
  counter-increment: note-counter;
}

p.note::marker {
  content: "Note " counter(note-counter) ":";
}

ol {
  margin-left: 8em;
  padding-left: 0;
}

ol li {
  list-style-type: lower-roman;
}

ol li::marker {
  color: blue;
  font-weight: bold;
}

ul {
  margin-left: 8em;
  padding-left: 0;
}

ul.happy li::marker {
  content: "🙂";
}

ul.happy li:hover {
  color: blue;
}

ul.happy li:hover::marker {
  content: "😐";
}

ul.fancy {
  list-style: fancy;
}
<p>This is the first paragraph in this document.</p>
<p class="note">This is a very short document.</p>
<ol>
  <li>This is the first item.
    <li>This is the second item.
      <li>This is the third item.
</ol>
<p>This is the end.</p>

<ul class="happy">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

<ul class="fancy">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>
4ktjp1zp

4ktjp1zp8#

这是我的版本:FontAwesome 5 ul

ul {
  list-style-position: inside;
  padding-left: 0;
}
ul li {
  list-style: none;
  position: relative;
  padding-left: 20px;
}
ul li::before {
  position: absolute;
  top: calc(50% - 4px); /* half font-size */
  left: 0px;
  font-family: "Font Awesome 5 Free";
  content: "\f111";
  font-size: 8px;
  font-weight: 900;
}
<script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script>
<ul>
  <li>Line 1</li>
  <li>Line 2</li>
  <li>Line 3</li>
  <li>Line 4</li>
  <li>Line 5</li>
</ul>
xiozqbni

xiozqbni9#

参见参考文献:https://fontawesome.com/v5.15/how-to-use/on-the-web/styling/icons-in-a-list

<ul class="fa-ul">
  <li><span class="fa-li"><i class="fas fa-check-square"></i></span>List icons can</li>
  <li><span class="fa-li"><i class="fas fa-check-square"></i></span>be used to</li>
  <li><span class="fa-li"><i class="fas fa-spinner fa-pulse"></i></span>replace bullets</li>
  <li><span class="fa-li"><i class="far fa-square"></i></span>in lists</li>
</ul>

相关问题