css实现两端文字对齐的方法
参考来源于css世界这本书,下面详细解析一下文字对齐的方法:
html
<div class="demo"> <strong>居左对齐</strong> <p>这是一段临时想出来的文案,其中可能参杂了几个英文单词,例如CSS,例如JS等。</p> <strong>两端对齐</strong> <p class="justify">这是一段临时想出来的文案,其中可能参杂了几个英文单词,例如CSS,例如JS等。</p> </div>
css:
.demo {
max-width: 300px;
font-size: 14px;
}
p {
padding: 10px 20px;
background-color: #f0f3f9;
}
.justify {
text-align: justify;
text-justify: inter-ideograph;
}效果:

可以看到效果两个对比,下面一个已经两端对齐了,这个就是多行文字两端对齐方式.
还有如果是单行文字的呢,图片+文字形式,在容器中怎么两端对齐:
<ul class="justify-list"> <li> <img src="1.jpg"> <p>图标描述 1</p> </li> <li> <img src="1.jpg"> <p>图标描述 2</p> </li> </ul>
css
.demo {
max-width: 300px;
font-size: 14px;
}
p {
padding: 10px 20px;
background-color: #f0f3f9;
}
.justify {
text-align: justify;
text-justify: inter-ideograph;
}
.justify-list {
width: 400px;
background: #ccc;
/* padding: 20px; */
/*一行的情况使用text-align-last,兼容问题*/
/* text-align-last: justify;*/
text-align: justify;
/* ie设置了font-size: 0;两端不能对齐 */
/* font-size: 0; */
font-size: .1px;
font-size: -webkit-calc(0px + 0px);
}
.justify-list::after {
content: "";
display: inline-block;
width: 100%;
vertical-align: bottom;
}
.justify-list li {
display: inline-block;
text-align: center;
font-size: 14px;
}
.justify-list li img {
width: 100px;
}上面的样式是最后兼容谷歌跟ie的代码.
分析:
.justify-list{
text-align-last: justify;
}这种上面那种多行文字对齐方式已经不适用了,然后使用了最后一行对齐方式text-align-last: justify;可以是可以,但是有兼容问题,Safari 浏览器,包括 Safari 10,都不支持,以至于移动端和桌面端都不能使用,甚是遗憾。
于是,我们只能寻求更加极客一点的技术手段,比方说,借助伪元素自动补一行。例如:
.justify-list{
text-align: justify;
}
.justify-list:after {
content: "";
display: inline-table; /* 也可以是 inline-block */
width: 100%;
}这相当于强制创建一个“看不见”的元素,满足换行这个要求,实现第一行的两端对齐效果。从效果上看,确实两端对齐了,然而,列表下方似乎莫名多了一些高度.
效果:

上面的效果,其中也提供了修正手段,分为两点:一是容器设置 font-size:0,列表 font-size 再还原;二是辅助两端对齐的内联元素设置 vertical-align:top或 vertical-align:bottom。例如:
.justify-list{
text-align: justify;
font-size: 0;
}
.justify-list:after {
content: "";
display: inline-table;
width: 100%;
vertical-align: bottom;
}
.justify-list li {
display: inline-block;
font-size: 14px;
}理论很完美,现实很残酷。在 IE 浏览器下,如果 font-size 设为 0,其样式表现就好像空格根本不存在一样,无法两端对齐。是不是再次失望了?后来,我经过尝试发现,我们可以设置font-size:.1px,设置字号 0.1 像素,IE 浏览器又认为空格存在了,同时间隙什么的都没有了,美哉!然而,Chrome 浏览器桌面浏览器有一个最小 12px 的 font-size 限制,设置字号 0.1 像素等同于设置字号 12px,此时 Chrome 浏览器间隙问题又出现了!是不是彻底绝望了?于是,我不得已使用了下面这种比较极客的方法进行处理:
.justify-list{
text-align: justify;
font-size: .1px;
font-size: -webkit-calc(0px + 0px);
}这样就可以完美解决谷歌跟ie的对齐问题了.
最后效果:

本文作者: Jasmine
本文链接: https://www.jianbaizhan.com/article/690
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!