这里主要参考的是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. C++ 部分函数

    string库 1.size()与length() 字符串长,结果相同 string s; s.length(); //s.length()-1是最后一个字符的下标,而不是'\0' for(i=0;i ...

  2. A Unified Deep Model of Learning from both Data and Queries for Cardinality Estimation 论文解读(SIGMOD 2021)

    A Unified Deep Model of Learning from both Data and Queries for Cardinality Estimation 论文解读(SIGMOD 2 ...

  3. COS 音视频实践 | 数据工作流助你播放多清晰度视频

    前言 你是否遇到过这样的场景: 兴致勃勃地观看心爱的视频,正当到了激动人心的高潮部分,却突然因为网速过差被迫陷入"转圈圈"的人生以及社会的大思考中. 又或者是身为网速畅通无阻的vi ...

  4. IDEA 快捷键和字体设置

    IDEA的使用 一.IDEA 目录 IDEA的使用 一.IDEA 设置字体 文本字体设置 窗口字体设置 二.IDEA建立项目 三.IDEA快捷键 设置字体 点击File->Settings 文本 ...

  5. 动手学TCP——CS144实验感想

    在Stanford CS144的课程实验Lab0~Lab4中,我们动手实现了一个自己的TCP协议,并且能够真的与互联网通信!此外,感谢Stanford开源本实验并提供了大量的优质测试用例,使得我们仅仅 ...

  6. css边框普通属性

    border :(边框): 其实现在的border是三个属性合成的, border-width:边框大小: border-style:边框的样式: border-color:边框的颜色: 合成以后的用 ...

  7. laravel7 微信小程序获取openid

    l 通过微信公众号获取appid和appsecret l 在小程序页面中编写代码获取code l 在后端编写方法,换取openid l 添加一个按钮,给按钮一个开放能力 open-type=" ...

  8. ajax 无刷新页面登录

    1:页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  9. mysql保存emoji表情,utf8mb4保存不了表情的问题

    报错信息 : Incorrect string value: '\xF0\x9F\x99\x85\xE2\x80...' for column 'content' at row 1 mysql数据库的 ...

  10. 用python生成你想要的任意大小文件

    在测试的日常工作中,我们经常会需要测试上传文件的边界值.今天分享一段30行的简单代码,可以生成任意大小的文件,方便测试. file_size=input("请输入想要生成文件的大小:(单位M ...