css水平垂直居中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了css水平垂直居中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5539字,纯文字阅读大概需要8分钟。
内容图文
margin法(水平居中)
需要满足三个条件:
- 元素定宽
- 元素为块级元素或行内元素设置
display:block
- 元素的
margin-left
和margin-right
都必须设置为auto
<! DOCTYPE html > < html > < head > < meta charset ="utf-8" > < meta http-equiv ="X-UA-Compatible" content ="IE=edge" > < title ></ title > < style > .box { width : 100px ; height : 100px ; background : orange ; margin : 0 auto ; } </ style > </ head > < body > < div class ="box" ></ div > </ body > </ html >
定位法(水平垂直居中)
首先绝对定位,设置top:50%; left:50%; 然后再利用负margin把它向左、向上移动(移动距离相当于它自身宽高的一半)
<! DOCTYPE html > < html > < head > < meta charset ="utf-8" > < meta http-equiv ="X-UA-Compatible" content ="IE=edge" > < title ></ title > < style > .box { width : 100px ; height : 100px ; background : orange ; position : absolute ; left : 50% ; top : 50% ; margin-left : -50px ; /* 宽度的一半 */ margin-top : -50px ; /* 高度的一半 */ } </ style > </ head > < body > < div class ="box" ></ div > </ body > </ html >
利用calc()函数简化上面的代码:
<! DOCTYPE html > < html > < head > < meta charset ="utf-8" > < meta http-equiv ="X-UA-Compatible" content ="IE=edge" > < title ></ title > < style > .box { width : 100px ; height : 100px ; background : orange ; position : absolute ; left : calc(50% - 50px) ; top : calc(50% - 50px) ; } </ style > </ head > < body > < div class ="box" ></ div > </ body > </ html >
这个方法的最大的局限性在于它要求元素的宽高是固定的,在通常情况下,对那些需要居中的元素来说,其尺寸往往是由其内容来决定的。如果能找到一个属性的百分比是以元素自身的宽高作为解析基准,那我们的难题就迎刃而解!遗憾的是,对于绝大多数css属性(包括margin)来说,百分比都是以父元素的尺寸为基准进行解析的。
而translate()变形函数中使用百分比值时,是以这个元素自身的宽度和高度为基准进行换算和移动的,这正是我们所需要的,接下来,只要换用基于百分比的css变形来对元素进行偏移,就不需要在偏移量中把元素的尺寸写死了。这样我们就可以彻底解决对固定尺寸的依赖。
<! DOCTYPE html > < html > < head > < meta charset ="utf-8" > < meta http-equiv ="X-UA-Compatible" content ="IE=edge" > < title ></ title > < style > .box { padding : 20px ; background : orange ; position : absolute ; left : 50% ; top : 50% ; transform : translate(-50%, -50%) ; } </ style > </ head > < body > < div class ="box" >this is a test.</div></body></html>
文字水平垂直居中
对于单行文字来说,直接使用text-align: center
即可实现水平居中。使用line-height实现垂直居中。
多行文字可以看作一个块级元素参考margin法和定位法。
绝对水平垂直居中
利用绝对定位与margin:auto; box宽度与高度要固定,常用在弹出层的定位中。
<! DOCTYPE html > < html > < head > < meta charset ="utf-8" > < meta http-equiv ="X-UA-Compatible" content ="IE=edge" > < title ></ title > < style > .box { width : 100px ; height : 100px ; background : orange ; position : absolute ; left : 0 ; right : 0 ; top : 0 ; bottom : 0 ; margin : auto ; } </ style > </ head > < body > < div class ="box" ></ div > </ body > </ html >
writing-mode与垂直居中
我们知道块状元素的水平居中可用margin:0 auto来实现,即margin-left:auto;margin-right:auto;
writing-mode是改变文档流的显示方向的,所以水平居中也可以变为垂直居中。writing-mode结合margin-top:auto,margin-bottom:auto就可以实现。
但水平居中会失效。
<! DOCTYPE html > < html > < head > < meta charset ="utf-8" > < meta http-equiv ="X-UA-Compatible" content ="IE=edge" > < title ></ title > < style > .father { width : 500px ; height : 500px ; background : orange ; writing-mode : vertical-lr ; } .son { width : 100px ; height : 100px ; background : red ; margin : auto ; } </ style > </ head > < body > < div class ="father" > < div class ="son" ></ div > </ div > </ body > </ html >
基于视口单位(水平垂直居中)
vw
是相对于视窗的宽度。与你预期刚好相反,1vw
相当于视窗宽度的1%
,而不是100%
与vw
相似的是,1vh
相当于视窗高度的1%
如果视窗的宽度小于高度,1vmin
等于1vw
,反之,如果视窗宽度大于高度,1vmin
等于1vh
如果视窗的宽度大于高度,1vmax
等于1vw
,反之,如果视窗宽度小于高度,1vmax
等于1vh
<! DOCTYPE html > < html > < head > < meta charset ="utf-8" > < meta http-equiv ="X-UA-Compatible" content ="IE=edge" > < title ></ title > < style > .box { width : 100px ; height : 100px ; background : orange ; margin : 50vh auto 0 ; transform : translateY(-50%) ; } </ style > </ head > < body > < div class ="box" ></ div > </ body > </ html >
注意:这种方法最大的局限是只能适用于元素在视窗中垂直居中,如果是在局部的某个地方就无能为力了。
Flexbox的解决方案
如果不考虑浏览器的兼容性,Flexbox无疑是最好的解决方案,因为它的出现就是为了解决这样的问题。
完成这项工作只需要两个样式,在需要水平垂直居中的父元素上设置display:flex(在这个例子中的body元素)
和在水平垂直居中的元素上设置margin:auto(在这个例子中的类名为box的元素)
当我们使用Flexbox时,margin:auto;不仅在水平方向上将元素居中,垂直方向上也是如此。
<! DOCTYPE html > < html > < head > < meta charset ="utf-8" > < meta http-equiv ="X-UA-Compatible" content ="IE=edge" > < title ></ title > < style > body { display : flex ; margin : 0 ; min-height : 100vh ; } .box { width : 100px ; height : 100px ; background : orange ; margin : auto ; } </ style > </ head > < body > < div class ="box" ></ div > </ body > </ html >
Flexbox的另一个好处是,它可以将匿名容器(即没有被标签包裹的文本节点)垂直居中。
代码如下:我们先给box指定一个固定的尺寸,然后借助flexbox的align-items和justify-content属性,这样让它内部的文本也实现居中。
<! DOCTYPE html > < html > < head > < meta charset ="utf-8" > < meta http-equiv ="X-UA-Compatible" content ="IE=edge" > < title > </ title > < style > .box { width : 400px ; height : 400px ; background : orange ; display : flex ; align-items : center ; justify-content : center ; } </ style > </ head > < body > < div class ="box" >this is a test.</div></body></html>
参考:https://xdlrt.github.io/2016/12/15/2016-12-15/
原文:http://www.cnblogs.com/loveyunk/p/6377554.html
内容总结
以上是互联网集市为您收集整理的css水平垂直居中全部内容,希望文章能够帮你解决css水平垂直居中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。