前言
文字两端对齐问题还挺常见的,比如说容器内有一段文字,如果不是两端对齐的话,看起来就不是很整齐。还有在一些提交表单界面,表单的标题一般也是两端展示的,比如在做表单的时候,我们一般会设置为文字两端对齐的样式,两个字,三个字,四个字都有可能,比如姓名,省市区, 详细地址等。
那么文字的两端对齐有什么方法,这些方法又有什么样的局限和兼容性呢?
今天,我们就来谈一谈文字两端对齐的问题。
justify 对齐
文字两端对齐最常用的 css 样式莫过于text-align:justify;了,并且这个样式的兼容性目前来说也还不错,我们把代码和效果贴一下:
 <style>    div{        margin: 100px auto;        border: 1px solid #333;        width: 200px;        height: 300px;    }
    p{        width: 100px;        background-color: rgb(242, 255, 185);        text-align: justify;    }</style>
<div>    <p>姓名</p>    <p>省市区</p>    <p>详细地址</p>    <p>name</p>    <p>you tel</p></div>
   复制代码
 
看起来text-align:justify;好像没有生效,这是因为这个属性所表示的两端对齐是不包括最后一行的,所以当只有一行的时候,看起来好像没有效果。
添加空元素
那既然知道了原因,我们就能想到对应的方法,没错,就是给 p 标签的内容后面再加一个元素。比如:
 <style>    div{        margin: 100px auto;        border: 1px solid #333;        width: 200px;        height: 300px;    }
    p{        width: 100px;        background-color: rgb(242, 255, 185);        text-align: justify;    }    i{        display: inline-block;        width: 100%;        或        padding-left: 100%;        或         margin-left: 100%;    }</style>
<div>    <p>姓名<i></i></p>    <p>省市区<i></i></p>    <p>详细地址<i></i></p>    <p>name<i></i></p>    <p>you tel<i></i></p></div>
   复制代码
 
可以看到,虽然文字两端对齐了,但是整体盒子却变高了,我们明明没有给 i 标签设置高度啊,为什么会这样呢?这是因为内容区域现在是两行,每行的行高是默认的文字的行高,虽然 i 标签没有高度,但是两行的内容,每一行都有一定的行高,两行行高就把盒子高度撑起来了。
所以,我们要给 p 标签直接设置高度即可。
伪元素大法
当然啦,你可能觉得在内容里面手动添加空标签实在是太麻烦,又不优雅,作为一名优雅的前端工程师,我们自然希望有更好的表现方法。
当当当当,这时候就要伪元素来救场了。
 <style>    div{        margin: 100px auto;        border: 1px solid #333;        width: 200px;        height: 300px;    }
    p{        width: 100px;        height: 20px;        line-height: 20px;        background-color: rgb(242, 255, 185);        text-align: justify;    }
    p::after{        content: '';        display: inline-block;        padding-left: 100%;        margin-left: 100%;    }</style>
<div>    <p>姓名</p>    <p>省市区</p>    <p>详细地址</p>    <p>name</p>    <p>you tel</p></div>
   复制代码
 
其实还有更简单的,那就是text-align-last: justify;,不过这个也是有一定的兼容性问题。
 <style>    div{        margin: 100px auto;        border: 1px solid #333;        width: 200px;        height: 300px;    }
    p{        width: 100px;        height: 20px;        line-height: 20px;        background-color: rgb(242, 255, 185);        text-align: justify;        text-align-last: justify;    }</style>
<div>    <p>姓名</p>    <p>省市区</p>    <p>详细地址</p>    <p>name</p>    <p>you tel</p></div>
   复制代码
 
如图所示:
兼容性方案
说到兼容性,我们还要考虑一个样式,那就是text-justify,我们来看下text-justify的属性值:
auto :允许浏览器用户代理确定使用的两端对齐法则
inter-word :通过增加字之间的空格对齐文本。该行为是对齐所有文本行最快的方法。它的两端对齐行为对段落的最后一行无效
newspaper : 通过增加或减少字或字母之间的空格对齐文本。是用于拉丁文字母表两端对齐的最精确格式
distribute :处理空格很像 newspaper
distribute-all-lines:两端对齐行的方式与 distribute 相同,也同样不包含两段对齐段落的最后一行。适用于表意字文档
inter-ideograph : 为表意字文本提供完全两端对齐。他增加或减少表意字和词间的空格
一般我们通过改变字与字之间的间距使得每行对齐,即:
 div{    text-align:justify;    text-justify:inter-word;}
   复制代码
 
那么如何把兼容做好呢?英文中间有空格,所以会这个空格会被放大以达到两端对齐的效果,但是中文每个字符之间并没有空格,以至于有的浏览器看起来像是没生效,所以字符之间是要加空格的,
下面我们来看一下各大主流即非主流浏览器的兼容方法:
 <style>    div{        margin: 100px auto;        border: 1px solid #333;        width: 200px;        height: 300px;    }
    p{        width: 100px;        height: 20px;        line-height: 20px;        background-color: rgb(242, 255, 185);        text-align: justify;        text-align-last: justify;    }    p:after{    content: '';    display: inline-block;    width: 100%;}</style>
<div>    <p>姓 名</p>    <p>省 市 区</p>    <p>详 细 地 址</p>    <p>name</p>    <p>you tel</p></div>
   复制代码
 
好了,完美撒花!!!
后记
你好哇,我是南极大冰块,一个技术与颜值成正比的前端工程师,崇尚一针见血的搞定前端问题,希望我的博客有帮助到了你。
关注我,前端路途一起走。嘿哈~😛
评论