探索发现:CSS实现中文两端对齐
2021-03-27 19:27
今天在搜索“CSS
实现中文两端对齐”的解决方法时,偶然发现了这个hack
:
我遇到问题是:看不到效果,无论是英文还是中文,在IE和chrome下都不起作用。还好在
StackOverflow
上找到了解决方法 :)样式:
div.justify { text-align: justify; width:200px; font-size:15px; color:red; border:1px solid blue; height:18px; } div.justify > span { display: inline-block /* Opera */; padding-left: 99%; }
HTML:
hello, text justify.hello, text justify.中 文 两 端 对 齐中 文 两 端 对 齐
不明所以,在旭哥的文章看到的关于text-align:justify
的解释是这样的
要理解原理,我们首先要搞清楚文本的两端对齐声明
text-align:justify
起作用的本质。首先,大家要知道,text-align:justify
是专门为英文设计的,谁叫CSS是老外发明的呢,用来实现英文语句的两端对齐。注意这里的,是语句的对齐。大家应该都知道,英文语句是一个单词一个单词组合而成的,每个单词之前使用空格分隔。
text-align:justify
之所以可以让英文段落两端对齐,那是因为每个英文单词之前那个透明看不见的空格被拉伸了。注意,是空格被拉伸了,对,只有空格。因此,当我们写下一段洋洋洒洒中文内容的时候,text-align:justify
是没有任何作用的,跟没设置没任何区别。为什么呢?很简单,因为中文是一个一个汉字,汉字之间是没有空格的,自然也就不能拉伸,自然也就不能两端对齐。怎么办呢?难道中文就不行了吗?
当然不是!既然正常的中文文字之间没有空格,我们自己加一点不就好了。例如下面代码:
感觉还是无法理解这个hack的原理。求教!
然后又去w3school上查阅了关于text-align:justify
的解释:
justify
:实现两端对齐文本效果,它会带来自己的一些问题。值
justify
可以使文本的两端都对齐。在两端对齐文本中,文本行的左右两端都放在父元素的内边界上。然后,调整单词和字母间的间隔,使各行的长度恰好相等。您也许已经注意到了,两端对齐文本在打印领域很常见。不过在 CSS 中,还需要多做些考虑。要由用户代理(而不是 CSS)来确定两端对齐文本如何拉伸,以填满父元素左右边界之间的空间。例如,有些浏览器可能只在单词之间增加额外的空间,而另外一些浏览器可能会平均分布字母间的额外空间(不过
CSS
规范特别指出,如果letter-spacing
属性指定为一个长度值,“用户代理不能进一步增加或减少字符间的空间”)。还有一些用户代理可能会减少某些行的空间,使文本挤得更紧密。所有这些做法都会影响元素的外观,甚至改变其高度,这取决于用户代理的对齐选择影响了多少文本行。
CSS
也没有指定应当如何处理连字符(注1)。大多数两端对齐文本都使用连字符将长单词分开放在两行上,从而缩小单词之间的间隔,改善文本行的外观。不过,由于CSS
没有定义连字符行为,用户代理不太可能自动加连字符。因此,在CSS
中,两端对齐文本看上去没有打印出来好看,特别是元素可能太窄,以至于每行只能放下几个单词。当然,使用窄设计元素是可以的,不过要当心相应的缺点。注1:
CSS
中没有说明如何处理连字符,因为不同的语言有不同的连字符规则。规范没有尝试去调和这样一些很可能不完备的规则,而是干脆不提这个问题。
还是没有找到合理解释。只能暂时先记录在这里了。
附:用伪元素修改:
.field-title{
width: 65px;
height:40px;
text-align:justify;
&:after{//文字两端对齐
content: ‘‘;
display: inline-block;
padding-left: 99%;
}
}