HTML & CSS – Styling List


前言

ul > li 经常会用到, 它原本的 style 很丑, 这篇介绍如果修改它.

以前学 W3Schools 的时候也有记入过: 

参考:

Youtube – HTML & CSS for Beginners Part 17: How to Create and Style HTML Lists

Youtube – Styling your list-items just got so much easier with this pseudo-element!

Youtube – Next-Level List Bullets With CSS ::marker

HTML 默认

<div class="container">
  <ul>
    <li>item1li>
    <li>item2li>
  ul>
div>

 效果

黑框是 container 范围. 可以看到 bullet 是在外面的.

list-style-type

常见的 type 有: circle, alpha, roman, decimal

甚至可以直接写 string 哦

li {
  list-style-type: "> ";
}

效果

list-style-position

我用 text-align: center 比较明显可以看出效果

设置 bullet 在里面还是外面. 默认是 outside, 而且是 out of the container 很恐怖一下...

Tailwind CSS 的解释图, 非常清晰:

Custom Styling

如果要完全控制的话, 可以把 list-style-type: none. 然后通过 ::before 自己插入想要的 svg 图, 等等.

.container {
  border: 1px solid black;
  width: fit-content;
  min-width: 200px;

  padding: 0.5rem;
  ul {
    list-style-type: none;
    li {
      &::before {
        font: var(--fa-font-solid);
        content: "\f00c";
        padding-right: 0.25rem;
      }
    }
  }
}

效果

另一种方式是用 build-in 的 ::marker, 虽然它没有 cover 100% 场景 (不支持 margin, padding), 但是通常够用.

ul {
  font-size: 2rem;
  li {
    padding-left: 0.5rem;
  }
  ::marker {
    color: red;
    font: var(--fa-font-solid);
    content: "\f00d";
  }
}

marker 可以选中 bullet, 然后就可以自定义内容了. 上面用了 fontawesome 的 code. 效果:

也可以换成 text, url(svg..) 等等

::marker {
  color: red;
  content: "> " counter(list-item);
}

还可以配上 counter 输出 index 哦.

spacing between bullet and li

这个满痛疼的, ::marker 写不到 padding, margin 所以它和 value 是黏在一起的.

像上面这个例子的 spacing, list-style-position 必须是 outside, 因为 inside 根本没法做 spacing.

要让它进入 container, 做法是让 container 有 padding-left.

然后 bullet 和 item 是粘一起的, 要分开就要给 li padding-left. 

2 个 padding-left 完成 spacing 非常不直观. 所以还是比较推荐使用 ::before 的做法.

其它 spacing 做法参考:

CSS – Indenting the second line of LI (List Items)

相关