CSS文字排版, 单行靠右, 多行靠左

2,360 阅读5分钟

概览

之前和大家分享的都是js相关的东西, 而网页前端开发, 我们都知道, 是html css js这三大件, 而这三大件也是联系紧密的, 你中有我我中有你, 只是随着业务的增加, 行业的发展, js在其中的位置也越来越重要, 因为前端要处理的逻辑的部分也越来越多了, 业内对我们前端开发的js功力的要求也是越来越高

但无论js逻辑部分是复杂还是简单, 是多还是少, 我们都不可避免地需要调整我们的页面布局, 此时就要涉及到我们的css方面的知识了, 同时个人这么几年的开发经验, 私以为有时候调起样式来比写js代码还要麻烦

这不, 前段时间遇到一个需求, 一个选举投票的小程序, 在个人页面, 姓名 身份证号等选项的位置, 左侧是项目的名称, 右侧是那个项目的内容以及一个向右的小箭头, 这个在很多手机端的页面或者是APP经常能看到, 通常情况就是当内容是单行的时候, 靠右, 而有多行的时候则希望内容能够靠左, 也就是换行的时候是从左往右的

方法一: flex布局

第一种方式就是利用目前最常用的也是功能非常强大的布局方式: flex布局, 关于flex布局的有关内容, 有需要的朋友可以查看我的这篇文章聊一聊flex布局, 这里就不过多赘述了, 直接上代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .box{
      display: flex;
      justify-content: flex-end;
    }
  </style>
</head>
<body>
  <div class="box">
    <div class="item">测试文字</div>
  </div>
</body>
</html>

这里我们将div.boxdisplay属性设置为flex, 也就是给div.box设置了一个flex上下文, 它作用于div.box的所有直接子类, div.item受到这个flex上下文的影响, 原本默认的块级元素属性发生了变化, 不再占满父元素的宽, 转而变成了内容的宽, 也就是说此时div.item的宽是它的内容测试文字四个字的宽, 再加上父级元素设置的主轴对齐方式flex-end也就是右对齐, 那么最终的结果就是元素居右对齐:

image.png

这里为了方便查看效果, 因此选择了手机端渲染的页面, 不然不好观察多行的情形, 下面是多行的情形:

image.png

上面提到, div.item的宽度由它的内容决定, 当内容过多, 使得div.item的宽撑满父元素, 此时父元素没有多余空间, 主轴对齐方式也就不起作用了, 以及我们的元素默认的文字 对齐方式左对齐, 也就是text-align: left;, 此时内容换行自然也就是从左到右了, 因此也就完成了我们的需求

方法二: 行内元素

首先我们先看看代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .box{
      text-align: right;
    }
    .item{
      display: inline-block;
      text-align: left;
    }
  </style>
</head>
<body>
  <div class="box">
    <div class="item">测试文字</div>
  </div>
</body>
</html>

这里我们需要了解一下text-align的功能, 它是用来定义行内内容(例如文字)如何相对它的块父元素的对齐方式的, 它并不控制块元素自己的对齐, 只控制它的行内内容的对齐方式

从上面的文字中可以得出几个结论:

  1. text-align只能设置在块级元素中
  2. text-align只对块级元素的行内内容有用

了解了text-align的使用方式之后我们来看看上面的html代码, div.box默认是块级元素, 设置了text-align之后将会对它里面的行内内容起作用, 然后我们将div.itemdisplay属性设置为inline-block, 那么此时div.item既有块级元素的特点又有行内元素的特点:

行内元素的特点使得它的宽不会撑满父元素, 会变成内容的宽, 同时还会受到父级元素的text-align影响, 也就是它会在父元素中右对齐

当内容将它撑满了, 占满整个父元素之后, 没有多余的空间了, 父元素的text-align属性失效, 而此时我们的div.item还具有块级元素的特点, 这使得它的text-align属性能生效, 能左右自己的行内内容, 也就是它里面的文字的对齐方式, 因此内容撑满并换行之后是从左到右的, 这也就完成了我们的需求

总结

我个人最终采用的是第一种方式, 也就是flex布局的方式, 因为flex布局更灵活, 通俗点说就是它能根据外部容器的变化而调整自身, 而且提供了多种对齐方式给我们, 清晰易用, text-align由于具有继承的特点, 因此我们需要在变更对齐方式的时候重新设置一下新的对齐方式, 去覆盖父类的相同的属性, 这样写起来就会有些繁琐, 而且还需要设置inline=block属性, 如果外部元素改变了它的display属性, 那么这个方式就可能失效了, 而flex布局它会使得所有直接子类的display属性都变成block, 因此就不会这方面的顾虑了, 可以放心使用

这就是这篇文章的全部内容了, 有任何问题欢迎在评论区探讨, 最后, 如果你觉得这篇文章写得还不错, 别忘了给我点个赞, 如果你觉得对你有帮助, 可以点个收藏, 以备不时之需

参考文献:

  1. text-align