前端css学习笔记7:各种居中布局&空白问题

本文为个人学习总结,如有谬误欢迎指正。前端知识众多,后续将继续记录其他知识点!

目录

前言

一、居中

1.行内元素、行内块元素

2.如何让子元素,在父亲中水平居中:

3.如何让子元素,在父亲中垂直居中:

4.使用定位+margin

5.flex布局

6.子元素高度未知,实现其在父元素的居中

7.父元素高度未知,实现其子元素在父元素的居中

二、空白

1.元素之间空白问题

2.行内块元素的空白问题


前言

在网页布局与样式设计中,元素的精准定位和空白空间的合理处理是构建美观、整洁界面的核心环节。无论是让按钮、卡片等元素在容器中完美居中,还是消除元素间不必要的空白、避免布局错乱,都直接影响着用户的视觉体验和页面的专业性。本文将围绕 "居中" 和 "空白" 两大关键主题展开,希望这份笔记能为同样正在学习CSS的同学提供参考,也欢迎大家结合原课程视频深入学习,共同进步。

网课链接: https://www.bilibili.com/video/BV1p84y1P7Z5/?share_source=copy_web\&vd_source=faad59aa4025692c65fca19bc4320e39


一、居中

下面情况(1-5)的前提是父元素有高度

1,2,3------常规布局(都在文档流,不使用定位)

1.行内元素、行内块元素

可以被父元素当做文本处理

  • 即:可以像处理文本对齐一样,去处理:行内、行内块在父元素中的对齐。
  • 例如:text-align、line-height、text-indent等。
  • (在其父元素中设置text-align)水平居中:text-align:center

2.如何让子元素,在父亲中水平居中

  • 若子元素为块元素,给父元素 加上:margin:0 auto;。(上下为0,左右自动)
  • 若子元素为行内元素、行内块元素,给父元素加上:text-align:center。

3.如何让子元素,在父亲中垂直居中

  • 若子元素为块元素,给子元素加上:margin-top,值为:(父元素content-子元素盒子总高)/2
  • 若子元素为行内元素、行内块元素:让父元素 的height=line-height,每个子元素都加上:vertical-align:middle;补充:若想绝对垂直居中,父元素font-size设置为0。

4.使用定位+margin

  • 给父元素开启相对定位(position:relative),子元素开启绝对定位(position:absolute)

  • 子元素设置上下左右的值为0(top: 0;bottom: 0; left: 0; right: 0;),设置定位必有这几个值

  • 再给子元素设置margin:auto

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .outer{ width: 400px; height: 300px; background-color: grey; position: relative; } .box{ width: 100px; height: 100px; } .box1{ background-color: skyblue; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; } </style> </head> <body>
    1
    </body> </html>

5.flex布局

  • 法1:父元素开启flex(display:flex),使用justify-content和align-items属性都是center

    .parent {
    display: flex;
    justify-content: center; /* 水平居中 */

    复制代码
    align-items: center;     /* 垂直居中 */
    
    width: 100%; 
    height: 300px; 
    border: 1px solid #ccc; 

    }
    .child {
    width: 200px;
    }

  • 法2:父元素flex(display:flex),子元素直接margin:auto(不再给父元素使用justify-content和align-items属性)

6.子元素高度未知,实现其在父元素的居中

复制代码
.parent { 
  position: relative; 
  width: 100%; 
  height: 300px; 
  border: 1px solid #ccc; 
}
.child { 
  position: absolute; 
  top: 50%; 
  left: 50%; 
  transform: translate(-50%, -50%); /* 通过负偏移修正 */

}

7.父元素高度未知,实现其子元素在父元素的居中

当父元素高度未知时,其高度通常由自身内容(包括子元素)动态撑开,此时可通过以下方式实现子元素的居中(水平 + 垂直):

● 方法 1:使用 flex 布局(推荐)

flex 布局的核心优势是容器高度会随内容自适应,即使父元素高度未知,也能通过 flex 属性直接控制子元素的居中对齐。

  • 父元素设置为 flex 容器,通过justify-content(水平方向)和align-items(垂直方向)控制子元素居中。

  • 适用场景:所有子元素类型(块元素、行内元素等),兼容性较好(支持 IE10 + 及现代浏览器)。

    .parent {
    display: flex; /* 父元素开启flex布局 /
    justify-content: center; /
    子元素水平居中 /
    align-items: center; /
    子元素垂直居中 /
    width: 400px; /
    可固定宽度,高度由内容撑开 */
    border: 1px solid #ccc;
    }
    .child {
    width: 100px;
    height: 100px;
    background-color: skyblue;
    }

● 方法 2:使用 grid 布局

grid 布局与 flex 布局类似,容器高度会随内容自适应,通过网格属性可直接实现子元素居中,语法更简洁。

  • 父元素设置为 grid 容器,通过justify-items(水平)和align-items(垂直)控制子元素居中。

  • 适用场景:现代浏览器(支持 IE11+),适合复杂布局场景。

    .parent {
    display: grid; /* 父元素开启grid布局 /
    justify-items: center; /
    子元素水平居中 /
    align-items: center; /
    子元素垂直居中 */
    width: 400px;
    border: 1px solid #ccc;
    }
    .child {
    width: 100px;
    height: 100px;
    background-color: skyblue;
    }

● 方法 3:表格布局(兼容性优先)

通过模拟表格结构,利用表格单元格的对齐特性实现居中,兼容性极佳(支持低版本浏览器),但语义化较弱。

  • 父元素设置为table-cell,配合vertical-align: middle(垂直)和text-align: center(水平);

  • 需在外层嵌套display: table的容器,确保表格布局生效。

    /* 外层容器模拟表格 /
    .table-wrap {
    display: table;
    width: 400px;
    border: 1px solid #ccc;
    }
    .parent {
    display: table-cell; /
    父元素模拟表格单元格 /
    vertical-align: middle; /
    子元素垂直居中 /
    text-align: center; /
    子元素水平居中(适用于行内/行内块元素) /
    }
    .child {
    display: inline-block; /
    块元素需转为行内块,配合text-align */
    width: 100px;
    height: 100px;
    background-color: skyblue;
    }

  • 优先选择 flex 或 grid 布局,简洁高效且适配现代场景;

  • 表格布局适合对低版本浏览器兼容性要求极高的场景;

二、空白

1.元素之间空白问题

产生的原因:

行内元素、行内块元素,彼此之间的换行会被浏览器解析为个空白字符

解决方案:

1.方案一:去掉换行和空格(不推荐)。

2.方案二:给父元素 设置font-size:0, 再给需要显示文字的元素,单独设置字体大小(推荐)

2.行内块元素的空白问题

产生原因:

行内块元素与文本的基线对 齐,而文本的基线与文本最底端之间是有一定距离的。

解决方案:

1.方案一:(图文都有时)给行内块元素设置vertical-align,值不为baseline即可,设置为middel、bottom、top均可。

2.方案二:若父元素中只有一张图片,设置图片为display:block。(从行内块级元素改成块元素---独占一行,不存在与谁对齐)

3.方案三:(图文都有时)给父元素设置font-size:0。如果该行内块内部还有文本,则需单独设置font-size。

相关推荐
南囝coding2 分钟前
命令行神器 The Fuck,敲错命令的后悔药
前端·后端
coding随想3 分钟前
揭秘前端世界的“水下炸弹”:DOM事件流的三大阶段与实战秘籍!
前端
程序员小续3 分钟前
再也不写 Class:React Hooks 完整实战与最佳实践
前端·javascript·react.js
芝士加7 分钟前
一个有趣的搜索神器:pinyin-match
前端·javascript·开源
艾莉丝努力练剑13 分钟前
【C语言16天强化训练】从基础入门到进阶:Day 1
c语言·开发语言·数据结构·学习
得物技术14 分钟前
基于TinyMce富文本编辑器的客服自研知识库的技术探索和实践|得物技术
前端·aigc·openai
一只大黑洋16 分钟前
Clipboard.js 复制内容
前端·javascript·vue.js
前端灵派派16 分钟前
openlayer绘制图形
前端
moyu8417 分钟前
ES6 Set与Map完全指南:从入门到性能优化
前端