CSS 实现两端对齐的 3 种方法

发布于 2018-12-02 字数4629 浏览 749 评论 0

响应式网页设计出现以来,更多是使用百分比布自适应布局,特别是在移动端,两端对齐的方式显得越来越重要。那么如何使用 CSS 实现两端对齐,相信很多同学会文本对齐的 text-align:justify,这是今天要讲的其中一种方式,另外还有两种更精彩的实现方式。

使用 text-align:justify

text-align:justify 属性是全兼容的,使用它实现两端对齐,需要注意在模块之间添加 空格/换行符/制表符 才能起作用,同样实现文本对齐也是需要在字与字之间添加 空格/换行符/制表符 才能起作用。模块内的元素之间为   分隔,只支持 WebKit和 Gecko 内核浏览器。

<div class="demo">
  <a class="link" href="#none">10元</a>
  <a class="link" href="#none">20元</a>
  <a class="link" href="#none">30元</a>
  <a class="link" href="#none">50元</a>
</div>
<p>模块内的元素之间为换行符</p>
<div class="demo">
  <a class="link" href="#none">10元</a>
  <a class="link" href="#none">20元</a>
  <a class="link" href="#none">30元</a>
  <a class="link" href="#none">50元</a>
</div>
.demo{
  text-align:justify;
  text-align-last:justify;
  line-height:0;
  height:44px;
}

IE 中要实现块内单行两端对齐需要使用其私有属性 text-align-last:justify 配合,text-align-last 要生效,必须先定义 text-align 为 justify,设置 line-height:0 解决标准浏览器容器底部多余的空白。

模块使用 换行符/空格符 后,WebKit 浏览器中会引起最后一个模块有多余空白,使用 font-size:0 可清除该空格:

@media all and (-webkit-min-device-pixel-ratio:0){
  .demo{
     font-size:0;
  }
}

text-align-last:justify 目前只有IE支持,标准浏览器需要使用 .demo:after 伪类模拟类似效果,opera 浏览器需要添加 vertical-align:top 才能完全解决底部多余的空白。

demo:after{
  display:inline-block;
  overflow:hidden;
  width:100%;
  height:0;
  content:'';
  vertical-align:top;
}
.demo a{
  width:20%;
  display:inline-block;
  height:44px;
  line-height:44px;
  text-align:center;
  border:1px solid #428cc8;
  color:#666;
  font-size:16px;
  margin-bottom:5px;
  border-radius:3px;
  background-color:#fefefe;
  background-image:-webkit-gradient(linear,left top,
    left bottom,color-stop(0,#fefefe),color-stop(1,#eee));
  color:#666;
  text-decoration:none;
}

使用 box-pack:justify

box-pack 是 css3 的新属性,依赖于 display:box 旧版弹性布局,受 box-orient 影响,box-pack 决定了子标签水平对齐的方式,可选值有 start | end | center | justify。使用 box-pack:justify 来实现两端对齐非常简单,代码量也少。为了向前看齐,把 display:flex 新版弹性布局也一起写进去。 如果是做基于 WebKit 内核的 webapp 开发和 winphone IE10 及以上,display:box 定义布局为盒模型后,可使用盒模型下的 box-pack:justify 属性。

.demo{
  display:-webkit-box;
  display:-webkit-flex;
  display:-ms-flexbox;
  display:flex;
  -webkit-box-pack:justify;
  -webkit-justify-content:space-between;
  -ms-flex-pack:justify;
  justify-content:space-between;
}
.demo a{
  width:20%;
  display:block;
  height:44px;
  line-height:44px;
  text-align:center;
  border:1px solid #428cc8;
  color:#666;
  font-size:16px;
  margin-bottom:5px;
  border-radius:3px;
  background-color:#fefefe;
  background-image:-webkit-gradient(linear,left top,
    left bottom,color-stop(0,#fefefe),color-stop(1,#eee));
  color:#666;
  text-decoration:none;
}

使用 Column 多列布局

Column 也是是 css3 的属性,意思是多列布局,使用 Column 来实现两端对齐也十分简单,只需要设置模块的个数跟 Column 的列数一致即可,不过它的自动适应方式跟使用 box-pack 还有有点差别,并不是很标准,像列与列的间距暂无法定义为百分比。值得高兴的是目前支持所有高级浏览器,对 IE10 的支持也良好,而 IE9 及以下版本不支持,webapp 开发中,对于不需要兼容 winphone 7 手机 IE9 的需求来说,可以充分发挥 Column 的强大作用。

column-count 定义了对象的列数,例子中有4个模块,那么定义为4列,column-gap 定义了对象中列与列的间距,间距不能设置为百分比,显得不够灵活。

.demo{
  -webkit-column-count:4;
  -moz-column-count:4;
  column-count:4;
  -webkit-column-gap:20px;
  -moz-column-gap:20px;
  column-gap:20px; 
}
.demo a{
  display:block;
  height:44px;
  line-height:44px;
  text-align:center;
  border:1px solid #428cc8;
  color:#666;
  font-size:16px;
  margin-bottom:5px;
  border-radius:3px;
  background-color:#fefefe;
  background-image:-webkit-gradient(linear,left top,left bottom,
    color-stop(0,#fefefe),color-stop(1,#eee));
  color:#666;
  text-decoration:none;
}

以上 3 种实现方式各有优缺点,具体看实际项目使用,如果大家有更好的实现方式,欢迎留言讨论 🙂 。

如果你对这篇文章有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助。

扫码二维码加入Web技术交流群

您暂时不能评论!

管理员开启了需要登录才能够评论,你可以免费注册一个本站的账号。

还没有评论!

目前还没有任何评论,快来抢沙发吧!