CSS 中的双向水平规则

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程的每个阶段提供云产品。 立即开始使用 价值 200 美元的免费积分!

假设您有一个 <blockquote>,并且设计要求在左侧有一个粗边框。 嗯,您可能并不一定意味着 左侧,而是实际上意味着 文本开始的那一侧

这正是 CSS 逻辑属性 所要解决的问题,Hussein Al Hammad 有一篇 不错的文章 说明了一些用例,包括我上面提到的 blockquote 问题。

通过使用逻辑属性,您不必费心手动编写包含 [dir="rtl"] 的选择器,也不需要了解书写模式等等。 盒模型相关内容(边框、填充、边距……)将在需要的地方进行调整。

Hussein 的 blockquote 是一个很好的入门示例,可以帮助您理解所有这些

blockquote {
  /* Rather than... */
  border-left: 4px solid #aaa;
  padding-left: 1.75rem;

  /* You'd do... */
  border-inline-start: 4px solid #aaa;
  padding-inline-start: 1.75rem;
}

查看 CodePen 上的
逻辑属性演示:blockquote
,由 Hussein Al Hammad (@hus_hmd) 创建。
CodePen 上。

支持情况相当不错。

这些浏览器支持数据来自 Caniuse,其中包含更多详细信息。 数字表示浏览器从该版本开始支持该功能。

桌面

ChromeFirefoxIEEdgeSafari
8966不支持8915

移动设备/平板电脑

Android ChromeAndroid FirefoxAndroidiOS Safari
12712712715.0-15.1

文章中有一个术语让我有点困惑,那就是“水平规则”。 我首先想到的是 <hr> 元素。 然后我想用逻辑属性反转设计方向。 通常,<hr> 只是一个线,所以水平方向无关紧要,但假设它就像包裹后新行开始的边缘上的一条 线。

我们可以用覆盖盒模型不同部分的背景来绘制这条短线,然后在填充应用的地方使用逻辑属性。 这是一种非常独特的边缘情况,但它很有趣,值得尝试

查看 CodePen 上的
具有方向感知能力的 <hr>
,由 Chris Coyier (@chriscoyier) 创建。
CodePen 上。

如果我们有 逻辑渐变,那就更容易了。

直接链接 →