CSS布局:水平居中

摘要:
CSS布局的元素是水平居中的。本文将介绍在不同条件下实现水平定心的几种方法和简单原则。但是,不建议这样做,因为元素类型转换可能会破坏布局*/}这是需要居中的内容II。使用margin1的原理。使用margin属性的自动值,将左、右外边距设置为自动居中。2.实现步骤必须具有子元素的宽度。设置子元素的边距:0自动以实现水平居中。3.适用场景具有子元素的宽度。4.完整的代码具有一定的宽度。使用边距居中˂!
CSS布局之元素水平居中

本文将依次介绍在不同条件下实现水平居中的多种方法及简单原理

Tip:下文中说的适用场景只是举了几个简单的例子方便读者理解。实际应用场景太复杂,生搬硬套容易出错。最重要的是掌握各种方法能够实现居中的原理。只要掌握了原理,那么不管问题怎么变都可以根据自己的理解选择合适的方法。

一、使用 text-align: center

1.原理

文本居中对齐text-align: center,可以适用于文本及图片的对齐

2.实现步骤

(1)直接在父元素中设置text-align: center;

3.适用场景

(1)适用于块级元素内部的行内元素水平居中
(2)适用于块级元素内图片的水平居中
(3)此方法对inline、inline-block、inline-table和inline-flex元素水平居中都有效

4.完整代码

(1)子元素为行内元素,直接使用text-align: center;进行水平居中

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>这是需要水平居中的文字</title>
    <style>
        .box {
             300px;
            height: 100px;
            text-align: center;
            /*设置子元素内的行内元素水平居中*/
            border: 1px solid #222222;
        }
    </style>
</head>
<body>
    <div class="box">
        <p>这是需要水平居中的文字</p>
    </div>
</body>
</html>

CSS布局:水平居中第1张

(2)如果子元素是一个块级元素,我们可以先将其由块级元素改变为行内块元素,再通过设置行内块元素居中以达到水平居中。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>这是需要水平居中的内容</title>
    <style>
       .box {
             300px;
            height: 100px;
            text-align: center;
            /*设置子元素内的行内元素水平居中*/
            border: 1px solid #222222;
        }
        .child {
            display: inline-block;
            /*将块级元素转为行内元素实现居中。但不建议,因为转换了元素类型,可能会破坏布局*/
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="child">这是需要居中的内容</div>
    </div>
</body>
</html>

CSS布局:水平居中第2张

二、使用 margin

1.原理

利用margin属性的auto值,设置左右左右外边距为自动实现居中(只能设置水平居中,对垂直居中无效)

2.实现步骤

(1)子元素必须要有宽度
(2)设置子元素的margin: 0 auto实现水平居中

3.适用场景

(1)有宽度的子元素

4.完整代码

(1)有确定宽度使用margin居中

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>margin居中</title>
    <style>
        .box {
             300px;
            height: 100px;
            border: 1px solid #222222;
        }
        .child {
             100px;/*设置子元素宽度*/
            margin: 0 auto;/*设置左右外边距自动实现水平居中*/
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="child">margin居中</div>
    </div>
</body>
</html>

CSS布局:水平居中第3张

(2)若不知道子元素宽度可用fit-content配合margin居中

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>fit-content居中</title>
    <style>
        .box {
             300px;
            height: 100px;
            border: 1px solid #222222;
        }
        .child {
             fit-content;
            /*类似于包裹内容,宽度为内容宽度*/
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="child">fit-content</div>
    </div>
</body>
</html>

CSS布局:水平居中第4张

(3)用display:table;将子元素设为table元素,宽度为内容宽,再使用margin居中

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>转为表格元素居中</title>
    <style>
        .box {
             300px;
            height: 100px;
            border: 1px solid #222222;
        }
        .child {
            display: table;
            /*将元素转换为table类型*/
            margin: 0 auto;
            /*设置上下外边距为0,左右外边距自动*/
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="child">转为表格元素居中</div>
    </div>
</body>
</html>

CSS布局:水平居中第5张

三、使用相对定位relative和绝对定位absolute

1.原理

使用定位将元素移动到所需要的位置上,将元素定位到水平居中的位置就实现了居中
Tip:注意元素定位是以元素的某个边或者某个角作为参考,而不是以元素的中心点为参考
例:单个使用,是以边框为参考,两个组合使用是以为参考点
(1)top:以元素上边框为参考,top:50px;就是元素上边框距离父元素上边框50px
(2)right:以元素右边框为参考,right:50px;就是元素右边框距离父元素右边框50px
(3)lefttop组合使用:以元素的左上角的点为参考,top:50px;left:50px;表示元素左上角的点距离父元素上边框50px,距离父元素左边框50px;
(4)rightbottom组合使用:以元素的右下角的点为参考,bottom:50px;right:50px;表示元素右下角的点距离父元素下边框50px,距离父元素右边框50px;
(5)其他各种组合同理,两个对立方向的属性不能同时组合使用。例如top和bottom同时使用以top为准,bottom会失效。left和right;同时使用的话会以left为准right会失效。
(6)所以定位50%是,子元素边框移动到50%的位置,还需要移动回来子元素一半的宽度,达到真正的居中

CSS布局:水平居中第6张

2.实现步骤

(1)先将父元素设置为相对定位relative
(2)将子元素设置为绝对定位absolute(子绝父相)
(3)向右移动子元素,移动距离为父容器宽度的一半(50%)
(4)通过向左移动子元素的一半宽度以达到水平居中。(通过transform或margin实现)

3.适用场景

(1)未知宽度的子元素(使用transform)
(2)已知宽度的子元素(使用margin)

4.完整代码

(1)使用transform属性:不定宽,不需要有确定的宽度也可实现居中

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>transform居中</title>
    <style>
        .box {
             300px;
            height: 100px;
            position: relative;
            border: 1px solid #222222;
        }
        .child {
            position: absolute;
            left: 50%;
            transform: translateX(-50%);
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="child">transform居中</div>
    </div>
</body>
</html>

CSS布局:水平居中第7张

(2)margin属性:子元素必须设置确定的宽度,且margin值不能用百分制会导致失效,要使用px

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>margin</title>
    <style>
        .box {
             300px;
            height: 200px;
            position: relative;
            border: 1px solid #222222;
        }
        .child {
             100px;
            height: 100px;
            position: absolute;
            left: 50%;
            margin-left: -50px;
            background: red;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="child"></div>
    </div>
</body>
</html>

CSS布局:水平居中第8张

四、使用弹性盒子flex布局(通用方法)

方法一: justify-content属性

1.原理

利用布局神器弹性盒子的justify-content属性进行主轴方向布局。弹性盒子默认主轴是左右方向,侧轴是上下方向,设置主轴左右方向居中。即可达到使子元素左右居中的效果。

2.实现步骤

(1)父元素开启弹性盒子display:flex;
(2)父元素设置 justify-content:center;(主方向居中对齐)

3.适用场景

(1)未知宽度的元素水平居中
(2)已知宽度的元素水平居中
(3)浮动元素的水平居中
(4)可适用于多个子元素同时水平居中

4.完整代码

(1)通过justify-content属性实现居中

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>justify-content</title>
    <style>
        .box {
             300px;
            height: 100px;
            border: 1px solid #222222;
            display: flex;/*开启弹性盒子*/
            justify-content: center;/*设置主轴方向居中,对子元素生效*/
        }
        .child {
             50px;
            height: 50px;
            background: red;
            border: 1px solid #222222;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="child"></div>
        <div class="child"></div>
    </div>
</body>
</html>

CSS布局:水平居中第9张

方法二: align-item属性

1.原理

利用布局神器弹性盒子的flex-direction:column更改主轴方向为上下方向。弹性盒子默认主轴是左右方向,侧轴是上下方向。更改后使用align-items属性设置子元素在侧轴方向居中,即可达到使子元素左右居中的效果。如果想对子元素单独设置,可在子元素上使用align-self属性,可以覆盖掉父元素的align-items属性。

2.实现步骤

(1)父元素开启弹性盒子display:flex;
(2)父元素使用flex-direction:column更改主轴方向为纵向
(3)父元素使用align-items属性设置子元素在侧轴方向居中

3.适用场景

(1)未知宽度的元素水平居中
(2)已知宽度的元素水平居中
(3)浮动元素的水平居中

4.完整代码

align-self属性:对子元素使用(解决有多个子元素,用flex布局实现其中单个子元素的居中的问题)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>align-items</title>
    <style>
        .box {
             300px;
            height: 100px;
            border: 1px solid #222222;
            display: flex;
            flex-direction:column;/*设置主轴为纵向排列,此时侧轴为横向排列*/
            align-items:center;/*设置子元素在侧轴方向上居中*/
        }
        .child {
             50px;
            height: 50px;
            background: red;
            border: 1px solid #222222;
            /*align-self:center;可以单独设置某个子元素的对齐方式*/
            /*设置本身元素在侧轴方向上居中*/
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="child"></div>
    </div>
</body>
</html>

CSS布局:水平居中第10张

方法三: margin属性

1.原理

在开启弹性盒子的时候也可以使用margin属性auto值来居中,此时不需要有具体宽度

2.实现步骤

(1)父元素开启弹性盒子display:flex;
(2)子元素使用margin:0 auto;属性设置自身水平居中

3.适用场景

(1)未知宽度的元素水平居中
(2)已知宽度的元素水平居中
(3)浮动元素的水平居中

4.完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>flex+margin</title>
    <style>
        .box {
             300px;
            height: 100px;
            border: 1px solid #222222;
            display: flex;/*开启弹性盒子*/
        }
        .child {
             50px;
            height: 50px;
            background: red;
            border: 1px solid #222222;
            margin:0 auto;/*子元素利用maigin的auto值设置居中*/
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="child"></div>
    </div>
</body>
</html>

CSS布局:水平居中第11张

免责声明:文章转载自《CSS布局:水平居中》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Tensor索引操作egg.js jwt 几步实现加解密下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue指令(3)v-html

理论知识 v-html可向元素中插入html片段,例如 '< h1>标题一< /h1>'等 该指令存在安全漏洞,因此在本地代码中可以使用,如果要调用第三方的代码中包含该指令,则存在安全隐患。 该指令的值可以同vue对象的data属性中变量绑定。 实践 <!DOCTYPE html> <html> <...

font-spider问题【已解决】

最近写一个项目,使用了引入的字体,然而字体太大,于是找解决方法,想要把字体压缩一下,然后找到了font-spider;font-spider使用方法这里就不多说了,网上一大把,主要是在node里面安装一个fontspider就可以了,然后通过命令行进行压缩,初期压缩是成功了的,但是查看压缩过的字体发现并不是原来的字体,并且网页上也没有生效,然后就由于忙着赶...

Flex编码过程

Flex编码过程 当我们开发一个Flex程序,我们重复其他类型网络程序的过程,例如HTML,JSP,ASP和CFML。创建一个有用的Flex程序是很容易的:打开我们最喜欢的文本编辑器,例如Flex Builder,输入XML标签,编译成为SWF文件,部署SWF文件,从网络浏览器中请求SWF文件的地址。与静态的页面或是由JSP,ASP或是CFML创建的HT...

JS基础知识1

基础点: es5 原型链、 2. 继承、 3. this指向、 4. new操作符、 5. 隐式转换、 6. 事件循环机制macro micro、 7. 基础类型、 8. 数据去重/交集/并集、 9. 判断是否为数组、 10. 变量声明提升、 11. 函数作用域、 12. 节流/防抖、 13.  apply/call、 14.  jsonp跨域、 15....

web前端学习笔记(CSS变化宽度布局)

一、“1-2-1”单列变宽布局:       对于变宽度的布局,首先要使内容的整体宽度随浏览器窗口宽度的变化而变化。因此中间的container容器中的左右两列的总宽度也会变化,这样就会产生不同的情况。这两列是按照一定的比例同时变化,还是一列固定,另一列变化。这两种都是很常用的布局方式。然而对于等比方式而言,相对比较简单,和我上一篇博客中1-2-1的布局方...

为网站添加多种语言

首先在项目文件夹下的config\initializers增加一个i18n.rb的文件、i18n是什么、就是英文单词国际化的意思、为了日常方便而简写成i18n、因为这单词一共有20个字母、包括i和n、 1 #encoding: utf-82 I18n.default_locale = :en3 4 LANGUAGES = [5 ['English'...