HTML 的 dir 属性优先级高于 CSS direction;浏览器优先读取元素自身的 dir 值,再回退到继承或样式声明,且 dir 属性会覆盖 direction 样式。
dir 属性和 direction 样式谁优先级更高?
HTML 的
属性优先级高于 CSS
。浏览器会先读取元素自身的
值(如
),再 fallback 到父级继承或样式表声明。
常见错误现象:
包裹一个
,但输入框内光标仍从左开始——因为
没显式设
,它不继承父容器的 CSS
,只继承 HTML
(若父级也没设,则用默认
)。
对表单控件、
等原生元素,直接加
最可靠
CSS
更适合控制块级容器内文本流、表格列序、溢出滚动条位置等
若同时写了
和
,前者生效;反之亦然
direction 不生效?先查 computed styles 的 origin
看似没起作用,大概率是被祖先元素的
或
继承覆盖了。CSS 的
是可继承属性,且继承链优先于局部声明。
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
打开开发者工具 → 选中目标元素 → 查看
面板里的
行,重点看右侧
是
还是
逐层往上点父节点,确认哪个节点最先设了
或
需要强制隔离时,给目标元素加
(比
更干净)
RTL 布局中 margin-left/margin-right 还能用吗?
不能依赖
和
控制 RTL 下的间距。它们始终按物理方向生效:在
容器里,
仍是往屏幕右边推 10px,而视觉上“右边”已变成内容起始侧。
真正随文本方向翻转的是逻辑方位属性:
用
替代
(即“行内起始边”,LTR 下 = 左,RTL 下 = 右)
用
替代
Flex/Grid 中的
的
指的是 inline-start,不是物理左
IE 不支持逻辑方位属性,需用 JS 检测
后动态切 class
input 光标和选区异常?别只调 direction
原生
在 focus 时,会根据其当前内容语言自动调整内部文本方向。空值或纯英文内容下,即使父容器是
,光标也可能从左开始、删除键行为反直觉。
根本解法不是压样式,而是明确语义:
对阿拉伯语输入场景,必须写
,而非仅靠父容器 CSS
避免对中文/英文内容强制套
—— 这会破坏双向文本算法,导致括号错位、数字顺序颠倒
混排内容(如阿拉伯文中嵌英文 URL)需配合
,否则
单独使用可能失效
最易被忽略的一点:direction 控制的是文本流起点和字符排列顺序,不是“镜像翻转”。强行给整站加
而不处理内容语义和逻辑方位,只会让布局和交互全面失准。
dirdirectiondirdiv { direction: rtl; }dirdirectiondirltrdir="rtl"directiondir="ltr"direction: rtldirectiondirdirectiondirectionComputeddirectionorigininheritedspecifieddir="rtl"direction: rtldir="ltr"direction: ltr !importantmargin-leftmargin-rightdirection: rtlmargin-right: 10pxmargin-inline-startmargin-leftpadding-inline-endpadding-rightjustify-content: flex-startstartdocument.dirdirection: rtldir="rtl"unicode-bidi: isolatedirdirection: rtl