CSS设置内容两端对齐

2023-01-05  本文已影响0人  CodeMT

史前方法

使用 

<p class="box1">密&emsp;&emsp;码</p>
<p class="box1">用&emsp;户&emsp;名</p>
<p class="box1">身&emsp;份&emsp;证&emsp;号</p>

效果是这样:

然后再慢慢加&emsp或者&nbsp来调整。原始、粗暴、效率低。

现代方式

使用text-align:justify

<ul>
  <li>密码</li>
  <li>用户名</li>
  <li>身份证号</li>
</ul>
ul li{ 
  width: 120px; 
  text-align: justify;
}

满怀期待,结果却是:

不是两端对齐么,怎么会无效???原来是这样的:

问:那么当只有一行显示的时候,怎么让它能左右两端对齐呢?
方法一:在内容中添加一个用于占位的标签,让内容处于第一行,就能达到效果:

<ul>
  <li>密码<p class="zw"></p></li>
  <li>用户名<p class="zw"></p></li>
  <li>身份证号<p class="zw"></p></li>
</ul>
ul li{
  width: 120px;
  text-align: justify;
} 
.zw{ 
  display: inline-block;
  width: 100%;
}

这时结果为:

为什么内容效果实现了,但是下面会多出空白来呢?
设置zw元素height:0都不起作用。。。
我估计产生间隙的原因是display: inline-block; 导致的。那么怎么解决呢?

这时就只有设置 li 的高度,比如给 li 添加 height: 40px; line-height: 40px;

结果如下:

这样就解决了空白的问题。

注意:如果只设置height,不设置line-height的话,当height设置的值有点小,比如20,还是看不出来空白,但是设置有点大,比如40的时候,空白又会出现,但是这空白并不是占位符的空白,而是内容没有垂直居中,剩下的div的空白

所以设置高度时最好line-height都带上。

方法二:使用:after伪元素(ie7及以下不支持伪类)

<ul>
  <li>密码</li>
  <li>用户名</li>
  <li>身份证号</li>
</ul>
ul li{
  width: 120px;
  height: 40px;
  line-height: 40px;
  text-align: justify;
} 
ul li:after{
  content: '';
  display: inline-block;
  width: 100%;
}

效果:

方法三:使用 text-align-last:justify 属性

<ul>
  <li>密码</li>
  <li>用户名</li>
  <li>身份证号</li>
</ul>
ul li{
  width: 120px;
  text-align: justify;
  text-align-last:justify
}

效果:

所以,才有了兼容多种浏览器的终极兼容方法

<ul>
  <li>密 码</li>
  <li>用 户 名</li>
  <li>身 份 证 号</li>
</ul>
ul li:after{
  content: ''; 
  display: inline-block;
  width: 100%;
}
上一篇下一篇

猜你喜欢

热点阅读