为什么垂直居中比水平居中难?

1、为什么垂直居中比水平居中难?

CSS默认文档流是从左至右、自上而下的,块元素天然撑满父元素或设置相应的宽度,水平居中通过marign:0 auto即可快速实现;但是垂直方向默认根据内容流延申,没有天然的属性,所以需要通过布局干预实现。

2、垂直居中分类:单行文本、多行文本、文本+图标、块元素

2.1、单行文本的垂直居中
复制代码
.parent{
  height:50px;
  line-height:50px;
}

踩坑点:
1、文字加了padding/margin会导致垂直偏移,需抵消;
2、字体大小与line-height的比例:如font-size:16px,line-height:24px时,文字实际居中的间隙是上下各 4px,需根据设计稿调整。

2.2、多行文本的垂直居中

按照优先顺序依次可使用:flex、table-cell(兼容低版本ie浏览器)、定位+trabslate(脱离文档流的场景)

复制代码
.parent-flex{
  display:flex;
  align-items: center;
}
.parent-tablecell{
    display: table-cell;
    vertical-align: middle;
}
.parent-position{
    position: relative;
 }
 .parent-position__inner{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}
2.3、文本+图标的垂直居中

图标设置vertical-align: middle;display:inline-block;实现

2.4、块元素的垂直居中

flex、grid、table-cell、定位+translate、定位+margin

复制代码
.parent-margin{
    width:200px;
    height:200px;
    position: relative;
}
.parent-margin__inner{
/*子元素需要固定宽高*/
    width:100px;
    height:100px;
    position: absolute;
    margin: auto;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
}
2.4.1、场景区分-父元素宽高明确

以上方案都可用踩坑点:
1、如果使用定位+margin,子元素宽高也需要固定,否则会占满整个父元素;

2.4.2、场景区分-父元素宽高不明确

可用:felx、grid、table-cell。踩坑点:

1、使用table-cell会改变元素的文档流,的元素无法和兄弟元素通过float/inline-block实现横向布局,可在外层套一个元素实现。
2、flex和grid的布局维度:flex适合单行/单列的布局,grid适合多行多列的布局。

复制代码
/*示例代码*/
.parent-grid{
    display: grid;
    place-items: center;
}
相关推荐
RFCEO6 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素
肖。354878709414 小时前
html选择页最简模板源码,用于集合很多网页!游戏大全数字导航页面,数字选择页制作灵感,已经压缩到最小,现代,讲解。
android·java·javascript·css·html
共享家95271 天前
搭建 AI 聊天机器人:”我的人生我做主“
前端·javascript·css·python·pycharm·html·状态模式
搬砖的阿wei1 天前
CSS常用选择器总结
前端·css
RFCEO1 天前
前端编程 课程十二、:CSS 基础应用 Flex 布局
前端·css·flex 布局·css3原生自带的布局模块·flexible box·弹性盒布局·垂直居中困难
ziblog2 天前
HTML5 Canvas梦幻背景动画特效
前端·css
weixin_456907412 天前
2026+:html+css 生态的成型之年与平台化跃迁
前端·css·html
2301_780669863 天前
HTML-CSS-常见标签和样式(标题的排版、标题的样式、选择器、正文的排版、正文的样式、整体布局、盒子模型)
前端·css·html·javaweb
weixin_456907413 天前
CSS DSF.soolCXZ LsoolbDSF:html 中 doos() 的 Copy-goos-Prite 实现实验笔记
css·笔记·html