CSS中实现水平/垂直居中

CSS中实现水平/垂直居中

在CSS中实现水平居中相对简单,但是却没有一个明确的属性表示这是实现垂直居中的,这就导致垂直居中的实现相对初学者来说难上许多。但是在实际的开发中垂直居中的需求常常出现,例如一行中有左右两部分,左边是图片,右边是文字,这时需要左右两部分按照垂直居中对齐(新闻列表的样式)等等。


注:

<style>
html,
body{height: 100%;
}.wap{height: 100%;
}
</style>

以上代码只是为了让wap可以占据整平的高度,让居中效果看的更加清晰,对于居中的实现并没有关系。

为什么wap占据整屏幕需要html,body{ height: 100%} 然后在设置.wap{height: 100%}呢?而宽度要占据整屏幕.wap{ width: 100% },如果是block元素不设置也可以占满。

因为height和width的百分比值计算方式不一样,如果父元素的height: auto子元素的height百分比值是不起作用的,但是相反,width的百分比值在width: auto的父元素下却可以正确计算。
而添加的元素都是在html和body的子元素,但是默认html和body的height是auto,并没有明确设置高度,那么子元素设置高度值为百分比自然是不起作用了。


水平居中对齐

方法一:使用 margin: 0 auto

该方法水平居中一个宽度固定的元素,使用了margin: 0 auto; 的方法,该方法并不能居中一个宽度没有明确设置的元素(依靠自身子元素撑起宽度),方法如下:

<style>.inner{width: 100px; height: 20px;background: #ccc;margin: 0 auto;}
</style>
<div class="wap"><p class="inner"></p>
</div>

方法二:使用绝对定位加上margin-left负值

同样适用于宽度固定的元素,如果宽度不固定就不能得知margin-left的值究竟是多少,也就无法居中。方法如下

<style>.wap2{position: relative;height: 20px;}.inner2{position: absolute;left: 50%;margin-left: -50px;  /* 注意这里,整个元素的左边界在父元素的50%处,然后向左缩进自身的一半,这样自身的中心就在父元素的50%处了。 */width: 100px; height: 20px;background: #ccc;}
</style>
<div class="wap2"></div>

方法三:绝对定位

一样只是适用于宽度固定的元素,如果被居中元素没有明确设置宽度,那么该元素就会占满position: relative; 的父元素(占满也可以说是居中了),注意margin: auto; 没有该属性即使宽度固定也不会成功居中。

<style>.wap3{position: relative;background: #333;
}.inner3{position: absolute;left: 0;right: 0;width: 20px;margin: auto;/* 以上为重要代码,要加上margin: auto; 这个不可或缺 */   height: 20px;background: #ccc;
}</style>
<div class="wap3"><div class="inner3"></div>
</div>

方法四:居中行内元素

该方法不仅仅适用于宽度固定的元素,也可以用作自身宽度不固定的元素,其实就是水平居中了一个行内元素,像居中文本一样,所以即使宽度不固定也没关系。

<style>
.wap3{text-align: center;
}.inner3{display: inline-block; /*如果html元素是block,因为text-align只能作用域行内/行内块元素*/height: 30px;background: #ccc;
}
<style>
<div class="wap3"><div class="inner3">我是水平居中的</div>
</div>

垂直居中对齐

方法一:使用绝对定位加上负的margin值

原理同水平居中的方法二,让自身定位到高度的一半处,然后再像反方向移动自身高度的一半,所以需要居中的元素的高度要是已知的。
注:父元素高度可以未知,top 的百分比值可以计算出来自己的位置和子元素宽度百分比值一样。

<style>
html,
body{height: 100%;
}
.wap{position: relative;height: 100%;background: #333;}
.inner{position: absolute;top: 50%;margin-top: -10px;width: 20px;height: 20px;background: #ccc;
}
</style><div class="wap"><div inner></div>
</div>

方法二:使用单元格垂直居中内容的特性

让元素模拟表格的单元格行为,单元格会自动垂直居中子元素无论子元素的display属性值是什么。
注: display: table-cell; 需要和 vertical-align: middle; 同用

<style>
html,
body{height: 100%;
}.wap3{display: table-cell;vertical-align: middle;/*以上两句是关键*/width: 100px;height: 100%;background: #333;
}.inner3{background: #ccc;
}</style>
<div class="wap3"><div class="inner3">我是垂直居中的</div>
</div>

方法三:使用绝对定位四个方位值为0,加上margin: auto 就会居中的特性

同水平居中的方法三

<style>
html,
body{height: 100%;
}.wap3{height: 100%;background: #333;
}.inner3{position: absloute;top: 0;bottom: 0;margin: auto;width: 20px;height: 20px;background: #ccc;
}
</style><div class="wap3"><div class="inner3">我是垂直居中的</div></div>

方法四:基于行内元素的对齐方式

该方法较为复杂,但是灵活度却是最好,该方法对于wap和inner的高度没有要求。

该方法用到的机制简单来说就是行内元素的对齐,正常情况下行内元素是按照基线对齐的,而vertical-align改变了行内元素的对齐方式为中线对齐,但是中线在正常情况下并不是元素的中心,虽然差别很小,所以使用了 font-size: 0;
wap的行内子元素并且设置vertical-align: middel;都要和::after伪元素居中对齐。同时该伪元素的高度又和wap的高度相同,那么改为元素高度的中心就是wap高度的中心,和伪元素居中对齐就在wap的中心了。
原理较为复杂详见张鑫旭老师的博文。

<style>
html,
body{height: 100%;
}
.wap3{font-size: 0;background: #ccc;height: 100%;
}
.wap3::after{content: "";height: 100%;font-size: 0;vertical-align: middle;display: inline-block;
}
.inner3{font-size: 12px;display: inline-block;vertical-align: middle;
}
</style>
<div class="wap3"><div class="inner3">我要垂直居中</div>
</div>

方法五:使用flex布局

使用flex布局,这种方式实现起来比较简单。想要深入学习flex布局转阮一峰老师这篇博文

<style>
html,
body{height: 100%;
}.wap4{display: flex;align-items: center;height: 100%;}.inner4{}
</style>
<div class="wap4"><div class="inner4">我是垂直居中的</div>
</div>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SWF 文件不能访问本地资源 只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源。...

错误信息&#xff1a;SecurityError: Error #2148: SWF 文件 D:/demo/test/index.swf 不能访问本地资源 D:/demo/test/bin-debug/textLayout_4.0.0.10485.swf。只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源。 at flash.net::URLStream/load() at fla…

高并发系统之大忌-慢查询

最近又遇到了一次慢查把db&#xff08;mariadb10)几乎打挂的案例&#xff0c;作为一个核心支付系统的技术负责人&#xff0c;真是每日如履薄冰。因为之前支付系统经常出问题&#xff0c;现在各个BG对支付系统都盯得很紧。这次要不是我及时让DB给暴力清理数据&#xff0c;没准又…

CSS媒体查询

格式&#xff08;style&#xff1a;{}&#xff09;元素设置&#xff1a; body{background-color:#0033FF;}/*媒体查询:当页面宽度最大为960px时*/media screen and (max-width: 960px){/*body背景颜色为*/body{background-color:#FF6699}}media screen and (max-width: 768px){…

(单元测试)JavaBeans的技巧

如果您正在编写Java代码&#xff0c;那么您至少要编写一些遵循JavaBean约定的类&#xff0c;即&#xff0c;具有带有公共getter和setter方法的私有属性的类&#xff0c;包含无参数的构造函数&#xff0c;可序列化&#xff0c;并且遵守Equals和HashCode合同。 最重要的是&#x…

js中的正则表达式

正则表达式等名称并不能让人一下就能明白是什么意思&#xff0c;我认为称之为 规则表达式 更为合理&#xff0c;就是描述一个字符串规则的表达式。 语法 正则表达式的语法有两种&#xff0c;下面第一种语法稍显 怪异&#xff0c;但确实是合法的并且相对方便&#xff0c;推荐。…

Hadoop namenode启动瓶颈分析

转载&#xff1a;http://blog.csdn.net/AE86_FC/archive/2010/08/26/5842020.aspx NameNode启动过程详细剖析 NameNode中几个关键的数据结构 FSImage Namenode会将HDFS的文件和目录元数据存储在一个叫fsimage的二进制文件中&#xff0c;每次保存fsimage之后到下次保存之间的所有…

Java 9 –终极功能列表

这篇文章将针对即将到来的Java 9版本进行更新&#xff0c;新增功能 &#xff08; 最新更新&#xff1a;2014年 9月9日 &#xff09; OpenJDK开发正在加快速度&#xff1a;2014年3月Java 8发布之后&#xff0c;我们预计将进入2年的发布周期。 据报道&#xff0c;Java 9将于2016…

2018.3.30 边框应用与导航栏设置

<!DOCTYPE html><html> <head> <meta charset"utf-8" /> <title></title> <style type"text/css"> /*制作三角形*/ #one{ width: 0px; …

centos 更改用户登录宿主机时间

chage -l username (查看用户登录时间&#xff1a;username为查看的用户) chage -M 90 username &#xff08;将用户登录主机的时间更改为90天&#xff09; 转载于:https://www.cnblogs.com/MUQINGFENG123/p/11075912.html

js中的作用域和作用域链

作用域就是变量与函数的可访问范围。在js中只有 全局作用域 和 函数作用域 &#xff0c;并没有块级作用域。 全局作用域 在所有函数外定义的变量、声明的函数就是全局作用域&#xff0c;在全部环境下都可以访问。 var a 111;function fn(){console.log(a); }fn(); // 打印了…

CryEngine3 引擎非商业用途将免费

CryEngine3引擎非商业用途将免费:8月发布 http://t.cn/hdEr45】Crytek日前宣布将在今年8月免费推出CryEngine3引擎的开发包&#xff0c;登录Crytek官网注册&#xff0c;签署保密协议保证不将CryEngine3用作商业用途&#xff0c;就可获得CryEngine3软件授权。Crytek官网上的一份…

vue打包后不使用服务器直接访问方法

根据官网打包执行npm run build 后dist文件夹打开的index.html 是空白 需要开启http服务器才能访问&#xff0c;以下是解决办法 1、找到config文件夹下的index文件 修改成 2、找到build文件夹下的until文件 修改成 然后执行npm run build重新打包下就ok了 更多专业前端知…

IntelliJ中的键盘快捷键

我上周参加了Hadi Hariri在JavaOne上的演讲。 他介绍了很多我不知道的IntelliJ键盘快捷键。 非常有用的谈话。 我在下面列出了一些最有用的。 Cmd-1&#xff1a;将焦点移到“项目”窗口 在此输入任何类名&#xff08;包括使用Camel Case&#xff0c;例如HW来查找HelloWorld&a…

OpenStack虚机网卡的创建过程

原文&#xff1a;https://www.sdnlab.com/20286.htmlOpenStack最基本和常用的操作就是启动虚机。虚机启动的过程中涉及很多内容&#xff0c;其中非常重要的一个环节就是创建并绑定虚机的虚拟网卡。虚机的创建和管理是Nova的任务&#xff0c;虚机网络的创建和管理是Neutron的任务…

js中的原型与原型链

js的学习有三座大山&#xff0c; 原型/原型链 、 作用域/闭包 、 异步/单线程&#xff0c;这三个知识点虽然基础但是入门时理解起来比较困难&#xff0c;本文先整理总结原型和原型链这一知识点。 1. 原型链怎么来的&#xff1f;对象的原型和function的prototype属性有什么关系…

线性表--算法设计题2.29

已知A&#xff0c;B和C为三个递增有序的线性表&#xff0c;现要求对A表作如下操作&#xff1a;删去那些既在B表中出现又在C表中出现的元素。试对顺序表编写实现上述操作的算法.&#xff08;注意&#xff1a;题中没有特别指明同一表中的元素值各不相同&#xff09;。C code: #in…

HTML5 audio 如何实现播放多个MP3音频

<audio>标签是HTML5中的新标签&#xff0c;定义声音用于嵌入音频内容&#xff0c;比如音乐或其他音频流。用的比较多音频格式是.mp3。 <audio>标签常用属性如下表 属性值描述autoplayautoplay添加该属性后&#xff0c;音频会自动播放controlscontrols设置后&…

Java代码中的典型错误

该页面包含在与我一起工作的人的Java代码中看到的最典型的错误。 静态分析&#xff08;出于明显的原因&#xff0c;我们使用查询无法捕获所有错误&#xff0c;这就是为什么我决定在此处列出所有错误的原因。 如果您要在此处添加其他内容&#xff0c;请告诉我&#xff0c;我们将…

windwos下ntp服务器配置 arm平台ntp客户端获取同步时间

项目需要使用同步时间&#xff0c;在arm-linux开发板上&#xff0c;移植了ntp客户端&#xff0c;查看了一些资料&#xff0c;最终发现使用windows自带的ntp服务器比较方便&#xff0c;而且很靠谱&#xff0c;使用配置了一番&#xff0c;已经能够正常使用 详细步骤&#xff1a; …

css 控制图片最大宽度

CSS 限制图片最大宽度 (本文来自本站原创&#xff0c;转载请务必注明出处&#xff01;)我们在制作一个网页的时候&#xff0c;经常要对一个区域里可能出现的图片的宽度进行限制&#xff0c;不然它可能会把页面撑得很烂很烂。如果你采用固定宽度&#xff0c;长度来设置的话&…