CSS布局:元素垂直居中

CSS布局之元素垂直居中

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

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

一、使用line-height

1.原理

? 有行高的元素,内容会默认显示在行高的垂直中心处,通过设置行高等于父元素的高度,可以达到内容在父元素中垂直居中的效果

2.实现步骤

(1)父元素有一个确定的高度
(2)在父元素或在子元素中设置line-height等于父元素的高度

3.适用场景

(1)具有行高属性的单行元素
Tip:若元素有多行,line-height用同样的原理也可实现,不过需要根据行数计算且容易出错(若父元素宽度变化影响行数,那么就要重新计算布局),这里不推荐使用line-height设置多行居中。

4.完整代码展示

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>单行元素垂直居中</title>
    <style>
        #box {
            height: 120px;
            line-height: 120px;
            /*设置成和父元素同高,对子元素父元素设置都有效*/
            border: 2px solid #222222;
        }
    </style>
</head>
<body>
    <div id="box">
        <span>单行元素垂直居中</span>
    </div>
</body>
</html>

二、利用 table-cell 布局

1.原理

将子元素转为表格中单元格的形式,使用表格属性vertical-align实现居中

2.实现步骤

(1)父元素转换为表格类型display:table;
(2)子元素转换为表格单元格类型display:table-cell;
(3)子元素使用单元格居中属性vertical-align:middle;

3.适用场景

(1)未知高度单行元素垂直居中
(2)未知高度多行元素垂直居中
(3)未知高度的块级元素

4.完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>多行元素垂直居中</title>
    <style>
        #box {
            display: table;/*转换为表格元素*/
            height: 140px;
            border: 2px solid #222222;
        }
        span {
            display: table-cell;/*转换为为table-cell单元格元素*/
            vertical-align: middle;/*设置垂直居中对齐*/
        }
    </style>
</head>
<body>
    <div id="box">
        <span>多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中多行元素垂直居中 </span>
   </div>
</body>
</html>

三、利用相对定位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会失效。

2.步骤

(1)先将父元素设置为相对定位relative
(2)将子元素设置为绝对定位absolute(子绝父相)
(3)向下移动子元素,移动距离为父容器高度的一半(50%)
(4)通过向上移动子元素的一半宽度(具体px值)以达到垂直居中。(通过margin实现)

3.适用场景

(1)已知高度的块级元素垂直居中

4.完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>已知高度的块级元素垂直居中</title>
    <style>
        #box {
            position: relative;
            height: 200px;
            border: 2px solid #222222;
        }
        .child {
            height: 100px;
            width: 100px;
            background: red;
            position: absolute;
            top: 50%;
            /*设置块级元素上边框距离顶部50%,使元素上边框这条线垂直居中于父元素*/
            margin-top: -50px;
            /*设置元素上边框向上移动元素高度的一半,使元素整体垂直居中*/
        }
    </style>
</head>
<body>
    <div id="box">
        <div class="child"></div>
    </div>
</body>
</html>

四、使用弹性盒子flex布局

方法一:align-items属性

1.原理

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

2.实现步骤

(1)父元素开启弹性盒子display:flex;
(2)父元素设置align-items:center;(侧轴方向居中对齐)

3.适用场景

(1)未知高度的元素垂直居中
(2)已知高度的元素垂直居中
(3)浮动元素的垂直居中

4.完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>未知高度元素垂直居中</title>
    <style>
        #box {
            display: flex;/*开启弹性盒子*/
            align-items: center;/*设置侧轴方向居中*/
            border: 1px solid #222222;
            height: 100px;
        }
        .child{
            float: left;/*浮动的元素同样可以居中*/
        }
    </style>
</head>
<body>
    <div id="box">
        <div class="child">未知高度的元素垂直居中</div>
    </div>
</body>
</html>

方法二:justify-content属性

1.原理

利用布局神器弹性盒子的justify-content属性进行主轴方向布局。弹性盒子默认主轴是左右方向,侧轴是上下方向。所以要先用flex-direction把主轴方向改为上下方向。再设置主轴居中。即可达到使子元素垂直居中的效果。

2.实现步骤

(1)父元素开启弹性盒子display:flex;
(2)父元素将主轴设置为上下方向flex-direction: column;
(3)父元素设置justify-content: center;(主轴方向居中对齐)

3.适用场景

(1)未知高度的元素垂直居中
(2)已知高度的元素垂直居中
(3)浮动元素的垂直居中
(4)多行元素的垂直居中

4.完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>多行元素垂直居中</title>
    <style>
        #box {
            height: 140px;
            /*需设置高度,不设置的话默认高度为内容撑起的高度,看不出居中效果*/
            display: flex;/*开启弹性盒子布局*/
            flex-direction: column;/*设置主轴纵向排列*/
            justify-content: center;/*在主轴方向上居中*/
            border: 2px solid #222222;
        }
    </style>
</head>
<body>
    <div id="box">
        <span>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Sit quidem laudantium quasi, fugit sapiente,
            culpa at voluptatum neque nemo nobis cupiditate assumenda esse aut              </span>
    </div>
</body>
</html>

Tip:本文所说的原理及内容是我个人的理解,如果有错误欢迎指出。

原文地址:https://www.cnblogs.com/zhupengcheng/p/11407999.html

时间: 2024-08-29 03:11:01

CSS布局:元素垂直居中的相关文章

css设置元素垂直居中的几个方法

最近有人问我怎么设置元素垂直居中?我....(这么基础的东西都不会?我有点说不出话来),  不过还是耐心的教了他几个方法,好吧教完他们,顺便把这些方法整理一下 第一种:通过设置成为表格元素的方式来实现垂直居中 (适应于父级有固定高度的元素) 第一步,写html代码,如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>元素垂直居中</title&

css -- 布局元素

默认情况下拥有布局的元素:HTML ,table,tr,td,img,hr,input,select,textarea,button,iframe,embed,object,applet,marquee 设置以下css属性会自动让元素拥有布局:float,display:inline-block,width,height,zoom 拥有布局的元素不会收缩 布局元素对浮动自动清理 相对定位的元素没有布局 拥有布局元素之间的外边距不会叠加 在没有布局的块级链接上,单击区域只覆盖文本 在滚动时,列表项

CSS 使元素垂直居中

重点内容:负外边距,绝对垂直居中,box 拓展点:设置inline-block,使元素居中 1.实现文字居中对齐 水平居中:text-align:center 垂直居中:设置line-height和height一样 2.实现元素居中对齐 使用元素定位,并移动元素  方法1:负外边距法(兼容IE) 原理:使用绝对定位,定位元素left和top值都为50%:然后使用margin移动负的元素半宽高 条件:需要知道当前元素的宽高. 代码: #content1{ position: relative; w

用 CSS 实现元素垂直居中

作者:知乎用户链接:https://www.zhihu.com/question/20543196/answer/275464838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 说明 .center表示要被居中的元素,.wrap 表示要居中的元素的父元素(包含.center元素的元素). 为了便于理解和叙述同一: 对于文本内容居中的情况,.wrap就是指包含文字的元素(例如<i>文字</i> ,i标签就是.wrap ). 文本内容会在外部创建一个行

CSS布局元素

一.display(元素显示模式) display属性用来设置元素的显示方式.如果display设置为none,float及position属性定义将生效. 语法:display: block | none | inline | inline-block 1)block:块对象值的是元素显示为一个方块,默认显示状态下将占据整行,其它元素只能另起一行显示.(块元素) 2)inline:行间对象与block刚好相反,它允许其它元素在同一行显示.(内联元素) 3)inline-block:指定对象为内

css控制元素垂直居中的几种方法

一.单行文本垂直居中 HTML: <div id="parent"> <div id="child">Content here</div> </div> CSS: #child { line-height: 200px; } 二.垂直居中一张图片 HTML <div id="parent"> <img src="image.png" alt="&quo

css布局--水平垂直居中

1. 使用text-align 和 vertical-align 和 inline-block实现水平垂直居中 html <div class="parent"> <div class="child">使用vertical-align,text-align,inline-block实现水平垂直居中</div> </div> css .parent{ vertical-align: middle; text-align:

[CSS] 子元素垂直居中的两种方式

1. 多个子元素水平并排,IE10以下失效 1 display: flex; 2 align-items: center; 3 justify-content: center; 2.多个子元素竖直排列,这种方式会导致margin失效,IE8以下失效 1 display: table-cell; 2 vertical-align: middle;

css确定元素水平居中和垂直居中

---恢复内容开始--- 首先,我们在了解如何通过css了解元素水平和垂直居中之前,先要了解下html都有哪些元素,这些元素与偶有哪些分类,因为不同类别的元素的水平垂直居中方法是完全不同的,究其根本当然是因为不同类别元素的性质不同.所以我们先来了解下html的元素类别. 一.HTML元素分类 1)内联(inline)元素: <a>--锚点 <abbr>--缩写 <acronym>--首字母缩写(HTML5不支持,请使用<abbr>代替) <b>-