:dir()不是自动镜像开关,仅提供方向条件;它只匹配显式dir="rtl"或强RTL字符推断的方向,不响应lang属性或CSS direction,SSR未注入dir则样式不生效,应优先使用逻辑属性而非依赖它。
:dir() 不是自动镜像开关,它只提供方向条件;真正起作用的是你是否用对了属性和上下文。写了 :dir(rtl) 但样式没生效,大概率是 HTML 根节点没设 dir="rtl",或者浏览器根本没计算出 RTL 方向。
浏览器只在元素自身或祖先显式声明 dir="rtl"(如 <html dir="rtl">)时才触发匹配。lang="ar"、内容含阿拉伯字母、甚至 CSS 的 direction: rtl 都不会让 :dir(rtl) 生效。Safari ≤15.3 还不支持自动推断方向,只认硬编码的 dir 属性。SSR 页面若服务端没注入 dir,客户端 JS 后续补上也晚了——CSS 解析已完成,规则压根没进匹配队列。
优先用逻辑属性,物理属性仅作兜底:
margin-inline-start / margin-inline-end 天然响应方向,无需 :dir() —— 它们自己就能翻转:dir(rtl):例如 .icon:dir(rtl) { transform: scaleX(-1); }
.sidebar:dir(ltr) { left: 0; } .sidebar:dir(rtl) { right: 0; }
text-align: right 在 :dir(rtl) 里是冗余的,因为 text-align: start 已天然适配多个方向控制机制叠在一起,优先级和继承关系极易失控:
[dir="rtl"] .btn 和 .btn:dir(rtl):前者只认硬编码属性,后者认计算方向,两者匹配范围不同,调试时分不清谁覆盖了谁padding-left、margin-right,全局加 <html dir="rtl"> 会导致错位;更稳妥的是只给内容区加 dir="rtl",UI 组件保持 LTR 基线v17.4 才完全支持 :dir(),旧版需回退到 [dir="rtl"],且不能依赖自动推断最常被忽略的点是:逻辑属性(如 margin-inline-start)本身不依赖 :dir() 就能工作,而 :dir() 真正不可替代的场景其实很窄——主要是 transform、float、inset 这类没有逻辑等价物的属性。别把它当成“RTL 开关”,它只是个方向探测器。
tlwdr7650路由器没有wps按钮(tlwdr7650路由器没有wps按钮怎么办)
tlwdr7632扩展器电脑怎么设置(tlwdr7632扩展器电脑设置方法)
tlwda6332re安装教程(tlwda6332re如何安装)
tlwdr7632扩展器手机怎么设置(tlwdr7632扩展器手机设置方法)
tlxdr3010怎么设置网速快(tlxdr3010网速快设置方法)
tlwdr5620易展版怎么克隆(tlwdr5620易展版克隆方法)