发布于 2026-01-06 0 阅读
0

CSS DEV 的全球展示与分享挑战赛(由 Mux 呈现)中的双向水平规则:展示你的项目!

CSS中的双向水平线

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

HTML 中的 dir 属性CSS中的 dir 属性可以用来设置文本方向和水平流向。有些语言是从左到右 (LTR) 书写的,而有些语言是从右到左 (RTL) 书写的。因此,能够控制文本方向对于创建 Web 文档和界面至关重要。

构建一个同时支持从左到右 (LTR) 和从右到左 (RTL) 布局的界面是一项挑战。Flexbox 和 Grid 布局固然能让事情变得简单,但它们并不能满足我们所有的样式需求。

我们编写的许多 CSS 规则中都包含指定物理方向或边距的规则。例如,在编写 CSS 来布局水平元素时,通常只在一侧设置边距,并将0同一侧的相邻元素(第一个或最后一个)的边距也设置为 1。

.element {
    margin-right: 1rem;
}

.element:last-child {
    margin-right: 0;
}

Enter fullscreen mode Exit fullscreen mode

或者

.element:not(:last-child) {
    margin-right: 1rem;
}
Enter fullscreen mode Exit fullscreen mode

在上面的例子中,我们给除最后一个元素之外的每个元素的右侧都添加了边距。代码是这样写的。但实际上,我们想表达的是在元素之后,沿着文档(或父元素)的水平方向添加边距。

一种常见的样式设置方法blockquote是在引文的一侧添加边框;我们认为这一侧位于引文之前。

这是布尔玛<blockquote>造型:

.content blockquote {
    background-color: #f5f5f5;
    border-left: 5px solid #dbdbdb;
    padding: 1.25em 1.5em;
}
Enter fullscreen mode Exit fullscreen mode

我们还有很多其他的样式选择,其中我们在 CSS 中指定了侧/方向(左/右),但我们实际的意思是之前/之后。

因此,在构建同时支持从左到右 (LTR) 和从右到左 (RTL) 布局的界面时,一种方法是编写如下 CSS 规则:

.class {}

html[dir="rtl"] .class {}
Enter fullscreen mode Exit fullscreen mode

或者,我们甚至可以为从左到右 (LTR) 和从右到左 (RTL) 的布局加载不同的样式表。然而,这两种方法都需要我们编写更多 CSS 代码,或者配置工具来生成相应的翻转样式。此外,还有一些工具可以自动将 LTR 样式转换为 RTL 样式。

如果能使用更低层次的抽象岂不是更好?如果我们能告诉浏览器我们定位的是元素的前后侧,而不是物理方向的左右,岂不是更好?很多时候,这才是我们真正想要的。这让我想起了这条推文:

CSS 具有所谓的逻辑属性。现在我们可以告诉浏览器我们实际想要表达的意思。例如,我们可以用-left`&` 和 ` &` 代替`& `:-right-inline-start-inline-end

.element:not(:last-child) {
    margin-inline-end: 1rem;
}
Enter fullscreen mode Exit fullscreen mode

类似地,我们可以用-top和代替-bottom-block-start-block-end

这意味着我们可以编写一套规则,同时适用于从左到右 (LTR) 和从右到左 (RTL) 的布局。以下是使用该margin-inline-end属性的示例:

使用border-inline-startandpadding-inline-start属性:

Firefox 也支持,因此您可以使用、 等来border-*-*-radius瞄准不同的角落。border-start-start-radiusborder-end-start-radius

所有演示:

如需更深入的解释,您可以参考 Rachel Andrew 的文章《理解逻辑属性和值》。这篇文章不仅涉及 RTL 界面或水平双向 CSS 规则,还涵盖了逻辑维度。

浏览器支持

我可以使用它吗?

文章来源:https://dev.to/hus_hmd/bi Direction-horizo​​ntal-rules-in-css-56f4