html5中的 hr定位,被大家遗忘的 hr 标签元素

我们在 UI 还原的过程中,难免会碰到水平或垂直方向的分隔线。在现代 Web 的开发中,大部分前端开发者首先的方案是使用非


标签元素,通过 CSS 或 SVG 来制作分隔线,即使在使用 React 或 Vue 构建 Separator (或 Divier)组件,也是采用非
标签。可以说,时至今日,
标签元素已被大部分开发者给遗忘了。既然如此,为什么我要用一篇文章的篇幅来聊
元素呢?这主要是出于 Web 的可读性(无障碍)出发点。希望阅读文这篇文章之后,你会有一个更好的选择。

UI 中的分隔线

在 Web 中,分隔线又被称之为“分离器”,主要用于两个区块之间的分隔,让用户从视觉上就能立马知道,分隔线的上下(或左右)两部分内容是有所区别的。另外,根据 UI 美感的需求,特别是在当下,分隔线的 UI 效果是非常有个性的,比如:

7accf52e25be0752ec177d452cae66d7.png

甚至还有一些更具艺术效果的分隔线 UI:

c22e775905300060a4266a8d590c2ed2.png

或许正因为上图这样的分隔线的效果,开发者很多时候更多的是采用 或 div 这样的 HTML 元素使用 background-image 来实现具有浓厚艺术氛围的分隔线 UI 效果。

不过,我们今天这篇文章主要目的并不是聊怎么使用 CSS 实现不同分隔线 UI 的效果,而更多的是 Web 的开发中,碰到分隔线的场景时,应该不应该使用


元素。

换句话说,我们怎么让有障碍的用户(比如,视障群体)在访问 Web 页面时,碰到分隔线,能很好的告诉这些用户。简单地说,使用


除了保持语义和可访问性之外,也能让其适应各种上下文。

HTML 中的


元素

HTML 的


标签元素最初所表示的含义是 段落元素之间的主题转换,例如,一个故事中的场景的改变,或一个章节的主题的改变。在 HTML 的早期版本中,它是一条水平线,即使是在现在,它在浏览器的渲染也是一条水平线,但目前被定义为语义上的,而不是表现层面上。

HTML 的


元素可以使用以下几个属性来设置其最初的表现形式:

align :设置对齐方式,默认值为left

color :设置颜色

noshade :去除阴影

width :使用像素或者百分比设置宽度

默认情况之下,客户端(浏览器)会


有一个默认渲染,比如说,就一个纯
时,浏览器给其默认的样式如下:

/* Chrome 版本 89.0.4389.90(正式版本) (x86_64) macOS Big Sur 11.2.3版本的系统 */

hr {

display: block;

unicode-bidi: isolate;

margin-block-start: 0.5em;

margin-block-end: 0.5em;

margin-inline-start: auto;

margin-inline-end: auto;

overflow: hidden;

border-style: inset;

border-width: 1px;

}

以下所示的都是 Chrome 89的渲染效果。

如果在


上显式设置不同的属性值,渲染的结果:

如果


元素上显式设置了一个非负值的 size 属性,那么浏览器将使用解析值(size 的值)除以 2 作为元素上 height 的值,且 border-width 的值为 1px

如果


元素上未显式设置 size 属性,那么浏览器不会渲染 height 值,只会渲染 border-width 的值为 1px

如果


元素上未显式设置 color 或 noshade 值,该元素的border-style将会渲染为inset,否则会渲染为 solid

注意,上面描述是仅针对于 Chrome 客户端的渲染结果进行的描述,具体效果如下:

cf3412785e174825fa324d0e18cbd353.png

为此,为了满足所有浏览器下的渲染效果能更一致,不建议在


标签上使用 color、align、noshade 和 size 来定义其渲染效果,而更趋向于使用 CSS 来设置其样式风格,比如:

hr {

color: gray;

border-style: inset;

border-width: 1px;

margin-block-start: 0.5em;

margin-inline-end: auto;

margin-block-end: 0.5em;

margin-inline-start: auto;

overflow: hidden;

}

而且最好是重置默认 hr 的样式:

/* CSS Normalizing */

hr {

box-sizing: content-box;

height: 0;

overflow: visible;

}

或者像下面这样重置 hr 的样式:

hr {

background-color: currentColor;

border: none 0;

height: 1px;

width: 100%;

color: inherit;

overflow: visible

}

这样一来,我们就可以使用 CSS 给 hr 添加不同的样式风格。这里暂且不表,后面会和大家一起聊聊,CSS 怎么来设置 hr 样式。

16f2fb6ad738d320b8b5a563f96ea13f.png

HTML 的语义化和 Web 可访问性

前面提到过,HTML 的


元素不仅仅表述的是视觉上的水平分隔线。它是具有一定语义的,并在其周围内容的上下文中发挥着有意义的作用。

HTML 的


元素表示段落级的主题分隔,例如故事中的场景变化,或参考书中某一章节的另一个主题的过渡。

简单地说,


元素具有 隐含的分隔符 的作用。

因此,


能被屏幕阅读器理解并朗读出来。比如说,
在 iOS(或macOS)上会被朗读成“分割线”:

c9fe2fe873c1a1ee8ee20ac833efce09.png

如果是在 macOS的旁白(VoiceVoer)会朗读成“水平分离器”


也会被屏幕阅读器这样的ATs技术模式显示为一条“水平线”,这种情况之下,CSS 通常会被剥离出来,而 HTML 语义会被屏幕阅读器决定其样式。

有趣的是,


绘制的直线具有一个隐含 role 角色,其值是 separator,正如前面所看到的,如果不使用其他 CSS 来调整其布局方向,它默认情况之下是水平的。但我们在实际使用的时候,除了会用到水平的分隔线之外,还有可能会在垂直的方向用一条直线来分隔内容。比如下面这个示例:

The Article Contents element


The Article Contents element

The Article Contents element


The Article Contents element

html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值