【垂直居中高级篇】你不知道的垂直居中方式
时间:2022-04-22
本文章向大家介绍【垂直居中高级篇】你不知道的垂直居中方式,主要内容包括一、基于绝对定位的垂直居中、二、视口垂直居中 + translate、三、FlexBox、四、总结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
在Css中对元素进行水平居中是很简单的,如果他是一个行内元素,对它的父元素应用text-align:center;如果是一个块级元素,就对自身应用margin:auto。然而如果要对一个元素进行垂直居中,想想就头皮发麻。本文主要探索以Css3为基础进行元素的垂直居中,对当下流行的几种技巧不做讨论,原因如下:
- 表格布局法:需要用到一些冗余的HTML元素
- 行内块法:这个方法Hack味道过浓。
一、基于绝对定位的垂直居中
- 以下两种技巧都需要使用绝对定位
- calc实现
- 内容部分必须固定宽和高
- translate实现
- 内容部分可以自适应宽和高
- 某些浏览器会导致元素模糊,可用transform-style:preserve-3d来修复,因为元素可能被放置在半个像素上
- 示例代码:
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.wrap{
position: relative;
width: 400px;
height: 150px;
border: 1px solid red;
}
.wrap .cont{
position: absolute;
top: calc(50% - 30px);
left: calc(50% - 50px);
width: 100px;
height: 60px;
background: gray;
}
.wrap02{
position: relative;
width: 400px;
height: 150px;
border: 1px solid red;
}
.wrap02 .cont{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
background: gray;
}
</style>
</head>
<body>
<div class="wrap">
<div class="cont">这个内容部分需要定宽和定高</div>
</div>
<div class="wrap02">
<div class="cont">这个内容部分可以实现自适应</div>
</div>
</body>
二、视口垂直居中 + translate
- 1vh表示视口高度的1%, 1vw表示视口的宽度的1%
- 当宽度 小于 < 高度时,1vmin = 1vm, 否则 1vmin = 1vh
- 当宽度 大于 > 高度时, 1vmax = 1vm,否则 1vmax = 1vh;
- 内容部分必须要固定宽和高
- 示例代码:
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.wrap{
width: 18em;
background: lightgreen;
padding: 1em 1.5em;
margin: 50vh auto 0;
transform: translateY(-50%);
}
</style>
</head>
<body>
<div class="wrap">
这个只能做到视口居中
</div>
</body>
三、FlexBox
- 在flexbox时,用margin:auto可以实现水平和垂直居中,可以用 margin:0 auto设置水平居中;margin: auto 0设置垂直居中
- 被居中元素的宽度和高度可以自适应
- 也可以通过flex的align-items和justify-content来实现水平垂直居中
- 示例代码:
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.wrap01{
display: flex;
min-height: 10vh;
border: 1px solid gray;
width: 30vw;
}
.wrap01 .main{
margin: auto;
padding: 5px;
background: lightblue;
}
.wrap02{
margin-top: 10px;
width: 28em;
height: 10em;
display: flex;
align-items: center;
justify-content: center;
background: lightblue;
}
</style>
</head>
<body>
<div class="wrap01">
<div class="main">
flex + margin:auto实现垂直居中
</div>
</div>
<div class="wrap02">
flex的align-items(垂直对齐)和justify-content(水平对齐)<br/>实现垂直水平居中
</div>
</body>
四、总结
经过上述介绍,我们发现各垂直居中的方式应用场景是有所不同的。
- absolute + translate 和 flexbox可以实现内容部分宽高自应用;
- absolute + calc 和 视口垂直居中,内容部分是需要固定宽高的;
- 不同场景选择没的垂直居中方式很重要。
- 在Python中实现你自己的推荐系统
- 在Java中如何实现“Pless presss any key to continue.”
- 震惊小伙伴的Python单行代码
- 如何打造一款可靠的WAF(Web应用防火墙)
- 为啥我的Python这么慢 (一)
- 矩阵的基本知识构造重复矩阵的方法——repmat(xxx,xxx,xxx)构造器的构造方法单位数组的构造方法指定公差的等差数列指定项数的等差数列指定项数的lg等差数列sub2ind()从矩阵索引==》
- 简单的Writer和ReaderWriter的主要方法Writer工作原理Reader的主要方法readLine():String
- 为啥我的Python这么慢 - 项查找 (二)
- 初识字节流+实现缓冲字节流OutputStream的主要方法构造方法读关流实现BufferedInputStream实现BufferedOutputStream为什么read()返回的是Int型而不是
- Properties+重温Map+本地计数器Map方法Properties的方法用Properties的好处
- SequenceInputStreamSequenceInputStream构造方法读关流刷新
- 怎么实现关闭窗口
- java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
- 不可不知的一点Python陷阱
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- numpy 计算路线距离
- 自然语言处理中的预训练模型(下)
- MySQL性能优化的最佳20+条经验
- 《剑指 offer》刷题记录之:回溯法
- 《剑指 offer》刷题记录之:动态规划与贪婪算法
- MySQL使用distinct去掉查询结果重复的记录
- R语言基于协方差的结构方程拟合的卡方检验
- 复制表
- R语言中小样本违反异方差性的线性回归
- 《剑指 offer》刷题记录之:位运算
- tf.train.batch 的偶尔乱序问题
- R语言中的生存分析Survival analysis晚期肺癌患者4例
- R语言异方差回归模型建模:用误差方差解释异方差
- R语言使用二元回归将序数数据建模为多元GLM
- PHP中的SESSION机制应用