前面的话

  水平居中是经常遇到的问题。看似方法较多,条条大路通罗马。但系统梳理下,其实都围绕着几个思路展开。本文将介绍关于水平居中的5种思路

text-align

【思路一】:在父元素中设置text-align:center实现行内元素水平居中

  将子元素的display设置为inline-block,使子元素变成行内元素

  [注意]若要兼容IE7-浏览器,可使用display:inline;zoom:1;来达到inline-block的效果

<style>
.parent{text-align: center;}
.child{display: inline-block;}
</style>
<div class="parent" style="background-color: gray;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>

   这种方法的不足之处在于,子元素的text-align继承了父元素的center,文字也居中显示,所以需要在子元素中设置text-align:left

margin

【思路二】:在本身元素设置margin: 0 auto实现块级元素水平居中

【1】将子元素的display为table,使子元素成为块级元素,同时table还具有包裹性,宽度由内容撑开

  [注意]若要兼容IE7-浏览器,可把child的结构换成<table class="child">DEMO</table>

<style>
.child{
display: table;
margin: 0 auto;
}
</style>
<div class="parent" style="background-color: gray;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>

  该方案的优点在于,只设置父级元素即可实现居中效果

【2】若子元素定宽,则可以使用绝对定位的盒模型属性,实现居中效果;若不设置宽度时,子元素被拉伸

<style>
.parent{
position: relative;
}
.child{
position: absolute;
left: 0;
right: 0;
margin: 0 auto;
width: 50px;
}
</style>
<div class="parent" style="background-color: gray;height: 20px;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>

absolute

【思路三】: 通过绝对定位的偏移属性实现水平居中

【1】配合translate()位移函数

  translate函数的百分比是相对于自身宽度的,所以left:50%配合translateX(-50%)可实现居中效果

  [注意]IE9-浏览器不支持

<style>
.parent{
position: relative;
}
.child{
position: absolute;
left: 50%;
transform:translateX(-50%);
}
</style>
<div class="parent" style="background-color: gray;height: 20px;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>

【2】配合relative

  relative数值型的偏移属性是相对于自身的,但百分比却是相对于包含块的。因为子元素已经被设置为absolute,所以若使用relative,则需要增加一层<div>结构,使其宽度与子元素宽度相同

  [注意]该方法全兼容,但是增加了html结构

<style>
.parent{
position: relative;
}
.childWrap{
position: absolute;
left: 50%;
}
.child{
position: relative;
left: -50%;
}
</style>
<div class="parent" style="background-color: gray;height: 20px;">
<div class="childWrap">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>
</div>

【3】配合负margin

  margin的百分比是相对于包含块的,所以需要增加一层<div>结构。由于宽度width的默认值是auto,当设置负margin时,width也会随着变大。所以此时需要定宽处理

  [注意]虽然全兼容,但需要增加页面结构及定宽处理,所以限制了应用场景

<style>
.parent{
position: relative;
}
.childWrap{
position: absolute;
left: 50%;
}
.child{
width:50px;
margin-left:-50%;
}
</style>
<div class="parent" style="background-color: gray;height: 20px;">
<div class="childWrap">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>
</div>

flex

【思路四】: 使用弹性盒模型flex实现水平居中

  [注意]IE9-浏览器不支持

【1】在伸缩容器上设置主轴对齐方式justify-content:center

<style>
.parent{
display: flex;
justify-content: center;
}
</style>
<div class="parent" style="background-color: gray;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>

【2】在伸缩项目上设置margin: 0 auto

<style>
.parent{display: flex;}
.child{margin: 0 auto;}
</style>
<div class="parent" style="background-color: gray;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>

grid

【思路五】: 使用栅格布局grid实现水平居中

  [注意]IE10-浏览器不支持

【1】在网格容器上设置justify-items或justify-content

<style>
.parent{
display:grid;
justify-items:center;
/*justify-content:center;*/
}
</style>
<div class="parent" style="background-color: gray;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>

【2】在网格项目中设置justify-self或者margin: 0 auto

<style>
.parent{
display:grid;
}
.child{
justify-self:center;
/*margin: 0 auto;*/
}
</style>
<div class="parent" style="background-color: gray;">
<div class="child" style="background-color: lightblue;">DEMO</div>
</div>

CSS实现水平居中的5种思路的更多相关文章

  1. CSS实现水平居中的4种思路

    × 目录 [1]text-align [2]margin [3]absolute [4]flex 前面的话 水平居中是经常遇到的问题.看似方法较多,条条大路通罗马.但系统梳理下,其实都围绕着几个思路展 ...

  2. 有趣的css—隐藏元素的7种思路

    css隐藏元素的7种思路 前言 display.visibility.opacity三个属性隐藏元素之间的异同点一直是前端面试面试的常考题. 属性 值 是否在页面上显示 注册点击事件是否有效 是否存在 ...

  3. CSS实现垂直居中的4种思路

    × 目录 [1]line-height [2]vertical-align [3]absolute [4]flex 前面的话 相对于水平居中,人们对于垂直居中略显为难,大部分原因是vertical-a ...

  4. CSS实现垂直居中的5种思路

    前面的话 相对于水平居中,人们对于垂直居中略显为难,大部分原因是vertical-align不能正确使用.实际上,实现垂直居中也是围绕几个思路展开的.本文将介绍关于垂直居中的5种思路 line-hei ...

  5. 关于css垂直水平居中的几种方式

    css中元素的垂直水平居中是比较常见及较常使用的,在这里向大家介绍一下几种方式. 1.水平居中 margin: 0 auto; 效果图: 而文字的垂直水平居中也比较简单,加上line-height: ...

  6. CSS实现水平垂直同时居中的5种思路

    × 目录 [1]水平对齐+行高 [2]水平+垂直对齐 [3]margin+垂直对齐[4]absolute[5]flex 前面的话 水平居中和垂直居中已经单独介绍过,本文将介绍水平垂直同时居中的5种思路 ...

  7. css实现垂直水平居中的5种方法

    css实现垂直水平居中的5种方法 给父元素设置table-cell,text-align,vertical-align #big{ width: 200px; height: 200px; borde ...

  8. CSS实现水平垂直同时居中的6种思路

    前面的话 水平居中和垂直居中已经单独介绍过,本文将介绍水平垂直同时居中的6种思路 水平对齐+行高 [思路一]text-align + line-height实现单行文本水平垂直居中 <style ...

  9. css 两列自适应布局的4种思路

    前面的话 前面已经介绍过css 两列布局中单列定宽单列自适应布局的6种思路的两列布局,而两列自适应布局是指一列由内容撑开,另一列撑满剩余宽度的布局方式.本文将从float.table.flex和gri ...

随机推荐

  1. VUE2第五天学习---自定义指令

    阅读目录 1.理解VUE中的自定义指令 回到顶部 1.理解VUE中的自定义指令 默认核心指令有 (v-model 和 v-show), 但是有时候我们需要用到自定义指令,在vue中,代码复用主要形式和 ...

  2. Objective-C 事件响应链

    苹果app使用响应者对象(responder object)来接收和处理事件.响应者对象是NSResponder及其子类的实例,如NSView.NSViewController和NSApplicati ...

  3. 使用proxy来简单的实现一个观察者

    var obv = (function() { var cache = new Map(); var observe = function (proxy, fn) { if (!cache.has(p ...

  4. 高阶函数 - aop面向切面编程

    Function.prototype.before = function(beforefn) { var __self = this; return function() { beforefn.app ...

  5. ASP.NET Core 中 HttpContext 详解与使用 | Microsoft.AspNetCore.Http 详解 (转载)

    “传导体” HttpContext 要理解 HttpContext 是干嘛的,首先,看图 图一 内网访问程序 图二 反向代理访问程序 ASP.NET Core 程序中,Kestrel 是一个基于 li ...

  6. BootStrap学习(5)_多媒体对象&列表组

    一.多媒体对象 这些抽象的对象样式用于创建各种类型的组件(比如:博客评论),我们可以在组件中使用图文混排,图像可以左对齐或者右对齐.媒体对象可以用更少的代码来实现媒体对象与文字的混排. .media: ...

  7. CF [2016-2017 ACM-ICPC CHINA-Final][GYM 101194 H] Great Cells

    很久以前做的一道思博题了,今天来补一补. 大致题意:在一个\(n*m\)的矩阵内填整数,数字在\([1,k]\)范围内.矩阵中某格的数为great number当且仅当与它同行同列的数字都严格比它小. ...

  8. 通用漏洞评估方法CVSS3.0简表

    CVSS3.0计算分值共有三种维度: 1. 基础度量. 分为 可利用性 及 影响度 两个子项,是漏洞评估的静态分值. 2. 时间度量. 基础维度之上结合受时间影响的三个动态分值,进而评估该漏洞的动态分 ...

  9. 新人入坑Redis必会的吐血总结

    新人入坑Redis必会的吐血总结 一.什么是Redis Redis是一个使用C语言开发的开源的高性能的key-value存储系统,我们可以把它近似理解为Java Map.简单来讲,Redis是一种NO ...

  10. Docker容器学习梳理 - Dockerfile构建镜像

    在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...