我正在读书 “创意列表样式” 在 Google 的 web.dev 博客上,注意到其中的一个代码示例有些奇怪 ::marker
文章的一部分。 内置的列表标记是项目符号、序号和字母。 这 ::marker
伪元素允许我们设置这些标记的样式或用自定义字符或图像替换它们。
::marker { content: url('/marker.svg') ' ';
}
引起我注意的示例使用 SVG 图标作为列表项的自定义标记。 但是还有一个空格字符(" "
) 在旁边的 CSS 值中 url()
功能。 这个空间的目的似乎是在自定义标记之后插入一个间隙。
当我看到这段代码时,我立即想知道是否有更好的方法来创建间隙。 追加一个空格 content
感觉更像是一种解决方法,而不是最佳解决方案。 CSS提供 margin
和 padding
以及其他在页面上分隔元素的标准方法。 在这种情况下不能使用这些属性吗?
首先,我尝试用适当的边距替换空格字符:
::marker { content: url('/marker.svg'); margin-right: 1ch;
}
这没有用。 事实证明, ::marker
只支持一个 一小组主要与文本相关的 CSS 属性. 例如,您可以更改 font-size
和 color
标记,并通过设置定义自定义标记 content
到字符串或 URL,如上所示。 但是 margin
和 padding
属性是 不支持, 所以设置它们没有效果。 多么令人失望。
难道空格字符真的是在自定义标记后插入间隙的唯一方法吗? 我需要找出答案。 在研究这个主题时,我有了一些有趣的发现,我想在本文中与大家分享。
添加填充和边距
首先,让我们确认一下 margin
和 padding
做的 <ul>
和 <li>
元素。 为此,我创建了一个测试页。 拖动相关的滑块并观察对列表标记每侧间距的影响。 提示:随意使用“重置”按钮将所有控件重置为其初始值。
请注意: 浏览器应用默认值 padding-inline-left
of 40px
至 <ol>
和 <ul>
元素。 合乎逻辑的 padding-inline-left
财产等同于物理 padding-left
具有从左到右内联方向的书写系统中的属性。 在这篇文章中,为了简单起见,我将使用物理属性。
正如你可以看到, padding-left
on <li>
增加列表标记后的空隙。 其他三个属性控制标记左侧的间距,换句话说,列表项的缩进。
请注意,即使列表项的 padding-left
is 0px
, 标记后仍有最小间隙。 这个差距不能减少 margin
or padding
. 最小间隙的确切长度取决于浏览器。
总而言之,列表项的内容位于浏览器特定的距标记的最小距离处,并且可以通过添加 padding-left
至 <li>
.
接下来,让我们看看当我们定位标记时会发生什么 内 列表项。
在列表项内移动标记
list-style-position
属性接受两个关键字: outside
,这是默认值,并且 inside
, 它将标记移动到列表项内。 后者对于创建具有全角列表项的设计很有用。
如果标记现在 内 列表项,这是否意味着 padding-left
on <li>
不再增加标记后的间隙? 让我们找出来。 在我的测试页面上,打开 list-style-position: inside
通过复选框。 四人如何 padding
和 margin
受此更改影响的属性?
正如你可以看到, padding-left
on <li>
现在将间距增加到 左 的标记。 这意味着我们失去了在标记之后增加间隙的能力。 在这种情况下,能够添加 margin-right
到 ::marker
本身,但这不起作用,正如我们在上面建立的那样。
此外,还有一个 Chromium 中的错误 这会导致标记后的间隙 三重 切换到 inside
定位。 默认情况下,间隙的长度约为文本大小的三分之一。 所以在默认情况下 font-size
of 16px
, 差距大约是 5.5px
. 切换到后 inside
, 差距增长到满 16px
在铬中。 这个错误影响 disc
, circle
及 square
标记,但是 不是序数标记.
下图显示了 macOS 上三个主要浏览器中外部和内部定位列表标记的默认呈现。 为方便起见,我已将所有列表项在其标记上水平对齐,以便更容易比较间隙大小的差异。
总结一下,切换到 list-style-position: inside
引入两个问题。 我们不能再通过增加差距 padding-left
on <li>
, 并且间隙大小在浏览器之间不一致。
最后,让我们看看用自定义标记替换默认列表标记时会发生什么。
切换到自定义标记
有两种方法可以定义一个 自定义标记:
list-style-type
和list-style-image
content
上的财产::marker
伪元素
content
属性更强大。 例如,它允许我们使用 counter()
函数访问列表项的序号( 含蓄 list-item
对付) 并用自定义字符串装饰它。
不幸的是,Safari 不支持 content
财产在 ::marker
然而 (WebKit 错误). 出于这个原因,我将使用 list-style-type
属性来定义自定义标记。 您仍然可以使用 ::marker
选择器来设置通过声明的自定义标记的样式 list-style-type
. 那个方面 ::marker
在 Safari 中受支持。
任何 Unicode 字符都可以用作自定义列表标记,但实际上只有一小部分字符的正式名称中包含“Bullet”,因此我想将它们编译在这里以供参考。
字符 | 名字 | 代码点 | CSS关键字 |
---|---|---|---|
• | 子弹 | U+2022 |
disc |
‣ | 三角子弹 | U+2023 |
|
⁃ | 连字符项目符号 | U+2043 |
|
⁌ | 黑色向左子弹 | U+204C |
|
⁍ | 黑色向右子弹 | U+204D |
|
◘ | 逆子弹 | U+25D8 |
|
• | 白子弹 | U+25E6 |
circle |
☙ | 反向旋转花卉心形子弹 | U+2619 |
|
❥ | 旋转重型黑色心形子弹 | U+2765 |
|
❧ | 旋转花心子弹 | U+2767 |
|
⦾ | 带圆圈的白色子弹 | U+29BE |
|
⦿ | 带圆圈的子弹 | U+29BF |
请注意: CSS square
关键字在 Unicode 中没有相应的“项目符号”字符。 最接近的角色是黑色小方块 (▪️) 表情符号 (U+25AA
).
现在让我们看看当我们将默认列表标记替换为 list-style-type: "•"
(U+2022
子弹)。 这是与默认项目符号相同的字符,因此应该没有任何重大的渲染差异。 在我的测试页面上,打开 list-style-type
选项并观察标记的任何变化。
如您所见,有两个重大变化:
- 标记后不再有最小间隙。
- 子弹变小了,就好像它被渲染成一个更小的
font-size
.
根据 CSS 计数器样式第 3 级, 默认列表标记 (disc
) 应该是“类似于 • U+2022
子弹”。 似乎浏览器增加了默认项目符号的大小以使其更易读。 Firefox 甚至使用了一种特殊的字体, -moz-bullet-font
, 为标记。
尺寸小的问题可以用 CSS 解决吗? 在我的测试页面上,打开标记样式并观察当您更改 font-size
, line-height
及 font-family
的标记。
如您所见,增加 font-size
导致自定义标记垂直错位,并且无法通过减小 line-height
。 该 vertical-align
可以轻松解决此问题的属性不受支持 ::marker
.
但是你有没有注意到改变 font-family
会导致marker变大? 尝试将其设置为 Tahoma
. 对于小尺寸问题,这可能是一个足够好的解决方法,尽管我还没有测试哪种字体在主要浏览器和操作系统上效果最好。
您可能还注意到,当您将标记放置在列表项内时,Chromium 错误不再发生。 这意味着自定义标记可以作为此错误的解决方法。 这让我想到了主要问题,也是我开始研究这个话题的原因。 如果您定义自定义标记并将其放置在列表项内,则标记后没有间隙,也无法通过标准方式插入间隙。
- 自定义标记后没有最小间隙。
::marker
不支持padding
ormargin
.padding-left
on<li>
不会增加间隙,因为标记已定位inside
.
总结
以下是我在文章中提到的所有关键事实的摘要:
- 浏览器应用默认值
padding-inline-start
of40px
至<ul>
和<ol>
元素。 - 内置列表标记(
disc
,decimal
, ETC。)。 自定义标记(字符串或 URL)后没有最小间隙。 - 可以通过添加一个来增加间隙的长度
padding-left
至<ul>
,但前提是标记位于列表项之外(默认模式)。 - 自定义字符串标记的默认大小小于内置标记。 改变
font-family
on::marker
可以增加它们的大小。
结论
回顾文章开头的代码示例,我想我现在明白为什么在 content
价值。 没有比在 SVG 标记后插入空隙更好的方法了。 这是一个需要的解决方法,因为没有多少 margin
和 padding
可以在位于列表项内的自定义标记之后创建间隙。 A margin-right
on ::marker
可以轻松做到,但不支持。
直到 ::marker
添加对更多属性的支持,Web 开发人员通常别无选择,只能隐藏标记并使用 ::before
伪元素。 我最近不得不自己做,因为我无法更改标记的 background-color
. 希望我们不必等待更强大的时间太久 ::marker
伪元素。
- SEO 支持的内容和 PR 分发。 今天得到放大。
- 柏拉图区块链。 Web3 元宇宙智能。 知识放大。 访问这里。
- Sumber: https://css-tricks.com/everything-you-need-to-know-about-the-gap-after-the-list-marker/
- 1
- 11
- 7
- 9
- 98
- a
- 对,能力--
- Able
- 关于我们
- 以上
- 接受
- ACCESS
- 横过
- 通
- 添加
- 后
- 对齐的
- 所有类型
- 允许
- 尽管
- 量
- 和
- 使用
- 刊文
- 方面
- 关注我们
- 背部
- 因为
- 成为
- 开始
- 最佳
- 更好
- 之间
- 大
- 黑色
- 博客
- 边界
- 半身裙/裤
- 浏览器
- 浏览器
- 问题
- 内建的
- 按键
- 不能
- 抓
- 原因
- 原因
- CGI
- 更改
- 更改
- 改变
- 字符
- 字符
- 选择
- 铬
- 铬
- 码
- 比较
- 结论
- 确认
- 考虑
- 内容
- 控制
- 控制
- 方便
- 更正
- 相应
- 可以
- Counter
- 创建信息图
- 创建
- 创造
- 的CSS
- 习俗
- 默认
- 依靠
- 设计
- 开发
- 开发
- DID
- 差异
- 方向
- 失望
- 距离
- 不会
- DOM
- 每
- 更容易
- 容易
- 边缘
- 效果
- 分子
- 表情符号
- 整个
- 成熟
- 等
- 醚(ETH)
- 甚至
- 一切
- 例子
- 例子
- 延长
- 少数
- 找到最适合您的地方
- 火狐
- 姓氏:
- 固定
- 固定
- 以下
- 字体
- 第四
- 止
- ,
- 功能
- 进一步
- 差距
- 去
- 谷歌的
- 杂货
- 成长
- 发生
- 胸襟
- 重
- 点击此处
- 隐藏
- 希望
- 创新中心
- HTTPS
- ICON
- 图片
- 立即
- in
- 其他
- 包含
- 增加
- 增加
- 增加
- 增加
- 初始
- 有趣
- 互操作性
- 推出
- 问题
- IT
- 项目
- 本身
- 键
- 知道
- 信息
- 长度
- Level
- 清单
- 合乎逻辑的
- 长
- 不再
- MacOS的
- 制成
- 主要
- 维护
- 主要
- 使
- 余量
- 标记
- 手段
- 提到
- 最低限度
- 时尚
- 模式
- 更多
- 移动
- 姓名
- 需求
- 打印车票
- 下页
- 数
- 数字
- 观察
- 官方
- 一
- 三分之一
- 操作
- 操作系统
- 最佳
- 附加选项
- 其他名称
- 学校以外
- 面包
- 的
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 位置
- 定位的
- 定位
- 可能
- 强大
- 市场问题
- 问题
- 正确
- 财产
- 提供
- 目的
- 推
- 阅读
- 原因
- 最近
- 相应
- 翻译
- 更换
- 揭示
- Safari
- 清酒
- 同
- 部分
- 似乎
- 选
- 服务
- 集
- 设置
- Share
- 应该
- 如图
- 作品
- 显著
- 简单
- 自
- 单
- 情况
- SIX
- 尺寸
- 尺寸
- 小
- 小
- So
- 方案,
- 东西
- 太空
- 特别
- 广场
- 标准
- 开始
- 仍
- 样式
- 概要
- SUPPORT
- 支持
- 支持
- SVG的
- 产品
- test
- 其
- 认为
- 思想
- 三
- 类型
- 至
- 也有
- 主题
- true
- 转
- 理解
- 统一
- 网址
- us
- 使用
- 折扣值
- 价值观
- 垂直
- 通过
- 等待
- 方法
- 卷筒纸
- 网络开发者
- 网络套件
- 什么是
- 这
- 白色
- 将
- 话
- 工作
- 合作
- 将
- 写作
- 您一站式解决方案
- 和风网