css: dir="rtl" VS 风格="direction:rtl"

Posted

技术标签:

【中文标题】css: dir="rtl" VS 风格="direction:rtl"【英文标题】:css: dir="rtl" VS style="direction:rtl" 【发布时间】:2014-04-26 00:40:54 【问题描述】:

当方向为内联时我知道如何设置样式

<div dir="rtl">foo</div>

div[dir="rtl"]

 ....;

但是如何设置样式

<div style="direction:rtl">foo</div> ?

两者的行为都符合预期(文本的右“对齐”),但我需要对内部的某些元素(浮动、文本对齐...)进行更精细的调整,并且在第二种情况下我无法正确设置我的规则。

我无法编辑 html。我必须使用 style="direction:rtl"。

【问题讨论】:

【参考方案1】:

在表单和插入的文本上使用 dir="auto" 以自动检测运行时提供的内容的方向

<div dir="auto">Hello, world!</div>
<br/>
<div dir="auto">لا إله إلا الله محمد رسول الله</div>
<br/>
<input type="text" dir="auto" value="Hello, world!" > 
<br/><br/>
<input type="text" dir="auto" value="لا إله إلا الله محمد رسول الله" >

JSFIDDLE 演示 https://jsfiddle.net/80k0drsf/

【讨论】:

我没有投反对票,但我想是因为我说我无权访问 html 有时你想要不同的方向,不管内容的语言,所以你不希望浏览器决定。【参考方案2】:

由于您无法修改 HTML,因此一个非常 hacky 的选择器将是:

div[style*="direction:rtl"] 
    ...

JSFiddle demo.

请注意,我使用的是style*=,而不仅仅是style=,因为这也会匹配在元素的style 属性中声明的不只是direction:rtl 的元素。

为了增加选择器的强度,您还可以使用[style*="direction: rtl"] 来处理style 属性,这些属性用空格分隔值和属性:

[style*="direction:rtl"], [style*="direction: rtl"]  ... 

在这种情况下,您也可以只匹配包含“rtl”的style 属性,因为我很确定这种字符组合不会在任何其他属性中使用(忽略背景图像文件名等外部资源):

[style*="rtl"]  ... 

Updated JSFiddle demo.

【讨论】:

或者如果那个 div 是例如第五个 div,你可以使用div:nth-child(5) ... 1+ 你也可以使用div[style~="direction:rtl"],它可以在这样的情况下工作:jsfiddle.net/5tS8u ..“表示一个属性值是一个空格分隔的列表”..developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors跨度> @JoshCrozier *= 是一个更好的选择器,因为选择器不能用空格分隔(例如,它可能以 ; 结尾(这会破坏您的 JSFiddle 演示:jsfiddle.net/5tS8u/1) )。 +1 但是,如果它看起来像 direction: rtl 怎么办? :) @JamesDonnelly 是的,你是对的 - 当你的答案仍然是 [style=".."] 时,我添加了该评论【参考方案3】:

只需将类“rtl”添加到html标签

<html dir="rtl" class="rtl">
 <head>
   <style>
      html[class*="rtl"] body 
         background-color:blue;
      
      html[class*="rtl"] div
         background-color:green;
      
   </style>
 </haed>

 <body>

 <div>
 </div>

 </body>
</html>

【讨论】:

感谢您的建议,但它不适合,因为我无权访问 html

以上是关于css: dir="rtl" VS 风格="direction:rtl"的主要内容,如果未能解决你的问题,请参考以下文章

如何为某种语言使用dir属性?

html css中的“[dir]”是啥意思[重复]

在 TextView 中使用区域设置 (ltr/rtl) 作为重力

E2202 Required package 'rtl' not found"

Nativescript-vue 将光标设置在 TextInput RTL 的末尾

如何从右到左显示 RadListView