这里主要参考的是CHRIS COYIER写的一篇的文章(点击查看),主要讲了关于css水平、垂直居中的一些方法,每个方法后面都有一个demo,可以在线查看效果。

1 水平

水平居中有行内元素和块元素,行内元素有文字、图片、链接等;块元素主要是div、p等block元素。

1.1 行内元素

对于行内元素可以使用如下实现水平居中(在线查看demo):

.blocklist1_1 {
text-align: center;
}

这种方法对于inline,inline-block,inline-table等都有效。

1.2 块元素

对于一个块元素,可以设置其margin-left和margin-right自动,就像这样(在线查看demo):

.blocklist1_2 .div1 {
margin: 0px auto;
}

无论块元素的宽度是否已知,都可以实现水平居中。

1.3 多个块元素

如果有多个块元素需要水平居中时,有两种办法可以实现。一种是借助inline-block,另一种是借助flex。对于第一种方法可以使用如下方式(在线查看demo),设置块元素display:inline-block,其父元素水平居中:

..blocklist1_3 .div1 {
text-align: center;
}
.blocklist1_3 .div1 div {
display: inline-block;
}

用flex的话需要给块的父元素添加如下样式(在线查看demo):

.blocklist1_3 .div2 {
display: flex;
justify-content: center;
}

2 垂直

垂直居中也分有行内元素和块元素,不过相比水平居中,垂直居中这里需要讨论的情况有点多,下面我们一一分析。

2.1 行内元素

2.1.1 单行

对于单行的行内元素,我们只需要设置其padding-top和padding-bottom值相等即可(在线查看demo):

.blocklist2_1_1 .div1 {
padding-top: 20px;
padding-bottom: 20px;
}

如果我们不能设置padding的话,而行内元素的高度(height=50px)已知时,可以设置line-height=height,实现元素的垂直居中(在线查看demo):

.blocklist2_1_1 .div2 {
line-height: 50px;
height: 50px;
}

2.1.2 多行

对于多行元素我们有四种方式可以实现垂直居中:

  • a.可以像上面那样通过设置padding-top和padding-bottom的值相等来实现垂直居中(demo-1):

.blocklist2_1_2 .div1 {
padding: 20px 0px;
}
  • b.可以借助vertical-align属性来实现垂直居中(demo-2):

.blocklist2_1_2 .div2 {
display: table;
}
.blocklist2_1_2 .div2>div {
display: table-cell;
vertical-align: middle;
}
  • c.可以借助flex技术来实现垂直居中,只需添加如下样式(demo-3):

.blocklist2_1_2 .div3 {
display: flex;
justify-content: center;
flex-direction: column;
height: 400px;
}
  • d.将一个全高度的伪元素放置在容器内,然后设置文本垂直对齐(demo-4):

.blocklist2_1_2 .div4 {
position:relative;
}
.blocklist2_1_2 .div4::before {
content: ' ';
display: inline-block;
height: 100%;
width: 1%;
vertical-align: middle;
}
.blocklist2_1_2 .div4>div {
display: inline-block;
vertical-align: middle;
}

2.2 块元素

2.2.1 块元素高度已知

在网页布局中有的时候我们知道元素的高度,有的时候我们不知道。对于已知高度的块元素可以这样设置来实现垂直居中(demo):

.blocklist2_2_1 .div {
position: relative;
}
.blocklist2_2_1 .div div {
position: absoulte;
top: 50%;
height: 100px;
margin-top: -70px; //这里70px是height*1/2 + padding
padding: 20px;
}

2.2.2 块元素高度未知

有时候我们是不知道块元素的高度的,这时候可以使用transform来实现(demo):

.blocklist2_2_2 .div {
position: relative;
}
.blocklist2_2_2 .div div {
transform: translateY(-50%);
top: 50%;
position: absoulte;
}

2.2.3 利用flex实现

除了以上两种办法,还可以使用flex实现(demo):

.blocklist2_2_3 .div {
display: flex;
flex-direction: column;
justify-content: center;
}

3 水平垂直

有的时候我们不仅希望水平居中还希望垂直居中,可以结合以上提到的例子进行组合实现,主要分为以下三个方面:

3.1 元素高度、宽度已知

当元素高度和宽度已知时,可以将元素绝对定位,偏移中心50%,然后使用负的margin值实现,如下(demo):

.blocklist3_1 .div {
position: relative;
}
.blocklist3_1 .div div {
position: absoulte;
top: 50%;
left: 50%;
margin: -120px 0px 0px -220px; //height一半,width一半,另外加上padding值
height: 200px;
width: 400px;
padding: 20px;
}

3.2 元素高度、宽度未知

如果元素的高度和宽度未知呢,我们可以使用变换属性,在两个方向赋予50%的负值,如下(demo):

.blocklist3_2 .div {
position: relative;
}
.blocklist3_2 .div div {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

3.3 利用flexbox实现

用flex实现时需要使用两个中心属性(demo):

.blocklist3_3 .div {
display: flex;
justify-content: center;
align-items: center;
}

居中的css:完全指南(翻译)的更多相关文章

  1. #Google HTML&CSS规范指南

    Google HTML&CSS规范指南 翻译自原文 目录 Google HTML&CSS规范指南 1. 背景 2. 通用 2.1 通用样式规则 2.1.1 协议 2.2 通用格式规则 ...

  2. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  3. 《CSS 设计指南》学习笔记 一

    本篇文章是对这几天看完 Charles Wyke-Smit 的 <CSS 设计指南> 后的一些学习笔记与心得,笔者好像是大一的时候开始接触网页设计,由于并不是计算机专业的,所以所有都是自己 ...

  4. css权威指南读书笔记

    今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[cla ...

  5. CSS入门指南-4:页面布局

    这是<CSS设计指南>的读书笔记,用于加深学习效果. display 属性 display是 CSS 中最重要的用于控制布局的属性.每个元素都有一个默认的 display 值.对于大多数元 ...

  6. CSS垂直居中指南

    大概整理下css中的垂直居中问题 主要分两大类 1 知道块元素尺寸,一般就是指知道元素高度. 方法一:最简单的,类比水平居中. 思路:子元素设置为absolute;  top bottom都设置为0 ...

  7. CSS权威指南 - 层叠

    CSS权威指南 第三章结构与层叠 - 层叠 按权重及来源排序 1. Reader important declarations 2. Author important declarations 3. ...

  8. scons用户指南翻译(附gcc/g++参数详解)

    scons用户指南 翻译 http://blog.csdn.net/andyelvis/article/category/948141 官网文档 http://www.scons.org/docume ...

  9. CSS权威指南学习笔记系列(1)CSS和文档

    题外话:HTML是一种结构化语言,而CSS是它的补充:这是一种样式语言.CSS是前端三板斧之一,因此学习CSS很重要.而我还是菜鸟,所以需要加强学习CSS.这个是我学习CSS权威指南的笔记,如有不对, ...

随机推荐

  1. 在pycharm中批量插入表数据、分页原理、cookie和session介绍、django操作cookie

    昨日内容回顾 ajax发送json格式数据 ''' 1. urlencoded 2. form-data 3. json ''' 1. ajax $.ajax({ data: JSON.stringi ...

  2. Xmake 和 C/C++ 包管理

    Xmake 是一个基于 Lua 的轻量级跨平台构建工具,关于 Xmake 与构建系统的介绍,我们已经在之前的文章中做了详细的介绍:C/C++ 构建系统,我用 xmake. 如果大家已经对 Xmake ...

  3. HCNP Routing&Switching之组播技术-组播分发

    前文我们了解了组播技术中的igmp-snooping相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15860484.html:今天我们来聊一聊组播技术 ...

  4. hadoop-SSH免密登录配置

    一:配置基础环境 一.修改主机名 修改 master 机器主机名 [root@server ~]# hostnamectl set-hostname master-wzg [root@server ~ ...

  5. docker 部署mysql tomcat时 在root@localhost~下——-——docker exec -it 容器名 /bin/bash 报错

    在docker部署mysql时 报错 找不到 容器不自动启动  , docker start 容器名  也没有效果 多次尝试发现 原因是创建容器时在 下面创建的 更改为下创建 问题解决

  6. nginx反向代理出现了代理的端口号

    nginx反向代理显示了代理的端口号 nginx反向代理配置文件 upstream mall { server 1.1.1.1:10261 weight=1; } server { listen 80 ...

  7. 使用Cobalt Strike来钓鱼(MS Office Macro)

    Cobalt Strike操作 点击Cobalt Strike主界面中attacks->packages->ms office macro 弹出界面选择Listener,单机确定 对话框中 ...

  8. web安全常用端口

    21 FTP 22 SSH 23 Telent 25 SMTP 53 DNS 80 HTTP 135 139 443 HTTPS 445 SMB 1433 SQLSERVER 1521 ORCAL 3 ...

  9. RestTemplate踩坑 之 ContentType 自动添加字符集

    写在前边 最近在写 OAuth2 对接的代码,由于授权服务器(竹云BambooCloud IAM)部署在甲方内网,所以想着自己 Mock 一下授权方的返回体,验证一下我的代码.我这才踩到了坑-- 故事 ...

  10. 羽夏笔记——Hook攻防基础

    写在前面   本笔记是由本人独自整理出来的,图片来源于网络.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你 ...