当前位置: 首页 > article >正文

【CSS 知识总结】第七篇 - CSS 布局-居中布局-水平居中布局

一,前言

上一篇,主要对 CSS 布局进行了概括性介绍,主要涉及以下几个点:

  • CSS 布局简介、布局的发展历史;
  • CSS 布局技巧、常见布局效果,面试题;

本篇,开始介绍 CSS 布局-居中布局-水平居中布局;


二,水平居中布局简介

水平居中布局:指子元素在父元素中,水平方向是居中显示的;

实现水平居中效果的 5 种方案:

  • inline-block + text-align 属性配合使用;
  • table + margin 属性配合使用;
  • absolute + margin 属性配合使用;
  • absolute + transform 属性配合使用;
  • flex + justify-content 属性配合使用;

三,水平居中布局的实现

1,文本/行内元素/行内块级元素

原理

  • text-align 的翻译是:“文字对齐”,包含:左对齐、右对齐、居中对齐;

  • text-align 能够控制行内内容(如:文字、行内元素、行内块级元素),在其块级父元素中的对齐方式;

示例

<style>
.parent{
  text-align:center;
}
</style>

<div class="parent">
  <div class="child">水平居中</div>
</div>

利用text-align属性,通过为块级容器设置text-align:center;,控制行内内容实现水平居中对齐效果;

优点

实现简单、可读性好、兼容性好;

缺点

  • text-align文本对齐属性具有继承性,导致失效;

为父容器设置的文本对齐属性,将会被子元素所继承;

当子元素宽度 > 父元素宽度时,水平居中效果会出现问题;

2,单个块级元素

原理

  • 当子容器定宽时,设置margin:0 auto浏览器会自动计算并均分水平方向上的剩余空间,从而达到水平居中效果;

备注:如果上下 margin 也设置为 auto,计算值将会为 0 导致失效;

示例

<style>
.child{
  width:100px;
  margin: 0 auto;
}
</style>

<div class="parent">
  <div class="child">水平居中</div>
</div>

子容器定宽,并设置 margin:0 auto;,浏览器将自动计算并均分水平方向上的剩余空间,实现水平居中效果;

优点

实现简单、可读性好、兼容性好;

缺点

  • 子容器必须定宽,且不能被设置为 auto;
  • 当子元素宽度 > 父元素宽度时,水平居中效果会出现问题;

3,多个块级元素

多个块级元素如何整体在父元素内水平居中?

原理

  • 借助text-align属性特性:只能控制文本对齐(文字、行内元素、行内块级元素);
  • 通过display:inline-block将块级元素转为行内块,并设置text-align:center,达到子元素整体水平居中效果;

示例

<style>
.parent{
  text-align: center;
}
.child{
  display: inline-block;
}
</style>

<div class="parent">
  <div class="child">水平居中</div>
</div>

优点

实现简单、可读性好、兼容性好;

缺点

  • 行内块元素和行内元素,会受到换行符的影响而产生默认间距;

由于将块级子元素转化成为行内块,两个行内块之间就会产生默认间距;

此时,可以通过为父元素设置font-size: 0去除这个默认间距;

但是,font-size: 0还会产生一个新的问题:子元素中的文字会因字体大小为 0 导致不显示;

所以,还需要再为子元素设置一个字体大小,才能完美解决问题;

4,任意个元素

原理

利用 flex 弹性布局,设置主轴方向上的对齐方式为居中对齐;

示例

<style>
.parent{
  display: flex;           /* 使用 flex 布局*/
  justify-content: center; /* 设置主轴方向上的对齐方式 */
}
</style>

<div class="parent">
  <div class="child">水平居中</div>
</div>
  • 通过设置display: flex;,使用 flex 布局,默认水平方向排列;
  • 通过设置justify-content属性,能够实现多个子元素整体在父元素内部的水平居中效果;

优点

  • 实现简单、功能强大;
  • 无需考虑子元素的数量;

缺点

flex 是 css3 新增的响应式布局方案,主要面向移动端,

所以 PC 端使用存在兼容问题,移动端需要 android 4.0+;

5,使用绝对定位实现

原理

  • 使用绝对定位:父元素设置相对定位,子元素设置绝对定位;
  • 通过toprightbottomleft,设置子元素相对父元素尺寸的值;
  • 再通过margintransform,设置相对子元素自身尺寸的值,进行反向移动,完成水平居中效果;

备注:实现反向移动的两种方法:margintransform

示例

<style>
.parent{
  position:relative;/* 相对定位 */
}
.child{
  position:absolute;/* 绝对定位 */
  left:50%;
  transform:translateX(-50%);
  /* margin-left:-父元素宽度/2  */
}
</style>

<div class="parent">
  <div class="child">水平居中</div>
</div>
  • 为父元素添加相对参照物,为子元素设置绝对定位;
  • 设置 left 方位 50%(此时并非正中间),再进行反向移动,使其在几何上正好处于正中间位置,实现水平居中效果;

反向移动的两种方法:

  • 1,设置margin负值实现反向移动;
  • 2,使用CSS3变换属性transform进行水平位移,移动距离为宽度的一半;

备注:此种水平居中方案,也是在实际项目中使用最多的一种;

优点

使用margin-left实现反向移动,兼容性好(块级、行内元素都可以实现);

缺点

  • 由于使用了绝对定位,会导致脱离文档流;
  • 使用margin-left负值实现反向移动时,需要知道宽度值;
  • 使用 CSS3 变换属性transform实现反向移动,存在兼容性要求(IE 9+);

四,结尾

本篇,主要介绍了 5 种水平居中效果的实现方案、原理及优缺点,主要涉及以下几个点:

  • 文本、行内元素、行内块级元素的水平居中;
  • 单个块级元素的水平居中;
  • 多个块级元素的水平居中;
  • 任意数量元素的水平居中;
  • 使用绝对定位+反向移动;

下一篇,介绍 CSS 布局-居中布局-垂直居中布局;


维护记录

  • 20211202
    • 修改部分语句,使表达更加准确;

http://www.kler.cn/a/17535.html

相关文章:

  • python实战(八)——情感识别(多分类)
  • 科技云报到:数字化转型,从不确定性到确定性的关键路径
  • 深度学习服务器租赁AutoDL
  • 障碍检测与避障控制 ROS2机器人
  • 【Python特征工程系列】利用SHAP进行特征重要性分析-XGB模型为例(案例+源码)
  • AI大模型:重塑软件开发流程的优势、挑战及应对策略
  • 测试之路,2023年软件测试市场领域有哪些变化?突破走得更远...
  • 2023年全国最新安全员精选真题及答案65
  • 【MOMO】高水平期刊目录(持续更新)
  • 基于微服务架构的水果销售系统的设计与实现
  • springboot文件上传
  • arxiv2022 | MolT5:Translation between Molecules and Natural Language
  • encrypted勒索病毒攻击nas服务器,服务器中了勒索病毒解密数据恢复
  • Redis事务
  • zk之数据的发布与订阅
  • RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)RBF神经网络训练部分
  • 有趣的回文检测
  • 如何用ChatGPT做团队绩效管理?根据员工的个人优势、不足、目标来生成更具体的绩效反馈
  • 2023/5/7周报
  • 猫狗训练集训练报错:Failed to find data adapter that can handle input
  • C++ Primer第五版_第十五章习题答案(21~30)
  • Spring Boot 整合 Swagger 教程详解
  • ChatGPT写文章效果-ChatGPT写文章原创
  • leetcode 530. 二叉搜索树的最小绝对差
  • 《互联网安全产品漏洞管理规定》
  • 【Linux Network】网络编程套接字