CSS 伪 :dir(); :host-context() 和基于方向性的样式

CSS pseudo :dir(); :host-context() and directionality based styling

在这个问题中,我正在寻找以下问题的最简洁的解决方案,同时敦促浏览器的编码人员赶上规范,尤其是 :dir() 一个!!

问题 这是我目前最熟悉的解决方案:

我想根据 方向性 设置下图的样式,翻转它,例如,在 RTL 模式下。图像位于阴影 DOM 中。截至目前,我正在通过以下样式实现这一目标。

::shadowRoot
    <style>
        .directed-image:dir(rtl) { transform: rotateY(180deg); }    -- Firefox only as of now
        :host-context([dir=rtl]) { transform: rotateY(180deg); }    -- Chromium only as of now
    </style>

    <img class="directed-image" src="..." />

问题尚未解决:

解决方案 ?:

我最希望的是 :dir() 将获得广泛的跨浏览器支持 - 它将解决 Safari 的问题以及提供真正的方向性上下文感知样式([dir=ltr] 的缺点在上面的 WebKit 错误 link 中有所涉及)。

但考虑到

-- 有了这一切:是否有任何其他解决方案(希望首先解决 Safari 问题)。

JS based solutions are interesting but much less preferred.

不确定这是否是您要查找的内容,但您可以使用 RTLCSS。这是一个 CSS 框架,可让您轻松地在 RTL 和 LTR 样式表之间切换并创建它们,而无需做太多重复工作。

它还支持一些大型 CSS 框架,如果您使用它们,例如 Bootstrap 和 Semantic-UI

2020 年 1 月回答

如您所说:body 标签上的 dir 属性(在大多数情况下)将是语言更改的唯一指示。由于 CSS 没有级联(还;如您所说),现在 唯一的选择 是让 Elements 观察该属性变化。所以我担心你唯一的选择是 MutationObserver(在你拥有的元素中)

https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

// Options for the observer (which mutations to observe)
const config = { attributes: true, childList: false, subtree: false };