首页 > 其他分享 >CSS基础 水平垂直居中

CSS基础 水平垂直居中

时间:2024-08-30 09:22:16浏览次数:13  
标签:居中 flex 50% 元素 height 垂直 margin CSS

几种实现水平垂直居中方式

  • 利用定位+margin:auto
  • 利用定位+margin:负值
  • 利用定位+transform
  • table布局
  • flex布局
  • grid布局

利用定位+margin:auto

先上代码:

<style>
    .father{
        width:500px;
        height:300px;
        border:1px solid #0a3b98;
        position: relative;
    }
    .son{
        width:100px;
        height:40px;
        background: #f0a238;
        position: absolute;
        top:0;
        left:0;
        right:0;
        bottom:0;
        margin:auto;
    }
</style>
<div class="father">
    <div class="son"></div>
</div>

父级设置为相对定位,子级绝对定位 ,并且四个定位属性的值都设置了0,那么这时候如果子级没有设置宽高,则会被拉开到和父级一样宽高

这里子元素设置了宽高,所以宽高会按照我们的设置来显示,但是实际上子级的虚拟占位已经撑满了整个父级,这时候再给它一个margin:auto它就可以上下左右都居中了

利用定位+margin:负值

绝大多数情况下,设置父元素为相对定位, 子元素移动自身50%实现水平垂直居中

<style>
    .father {
        position: relative;
        width: 200px;
        height: 200px;
        background: skyblue;
    }
    .son {
        position: absolute;
        top: 50%;
        left: 50%;
        margin-left:-50px;
        margin-top:-50px;
        width: 100px;
        height: 100px;
        background: red;
    }
</style>
<div class="father">
    <div class="son"></div>
</div>

整个实现思路如下图所示:

● 初始位置为方块1的位置
● 当设置left、top为50%的时候,内部子元素为方块2的位置
● 设置margin为负数时,使内部子元素到方块3的位置,即中间位置

这种方案不要求父元素的高度,也就是即使父元素的高度变化了,仍然可以保持在父元素的垂直居中位置,水平方向上是一样的操作

但是该方案需要知道子元素自身的宽高,但是我们可以通过下面transform属性进行移动

利用定位+transform

实现代码如下:

<style>
    .father {
        position: relative;
        width: 200px;
        height: 200px;
        background: skyblue;
    }
    .son {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%,-50%);
        width: 100px;
        height: 100px;
        background: red;
    }
</style>
<div class="father">
    <div class="son"></div>
</div>

translate(-50%, -50%)将会将元素位移自己宽度和高度的-50%

这种方法其实和最上面被否定掉的margin负值用法一样,可以说是margin负值的替代方案,并不需要知道自身元素的宽高

table布局

设置父元素为display:table-cell,子元素设置 display: inline-block。利用vertical和text-align可以让所有的行内块级元素水平垂直居中

<style>
    .father {
        display: table-cell;
        width: 200px;
        height: 200px;
        background: skyblue;
        vertical-align: middle;
        text-align: center;
    }
    .son {
        display: inline-block;
        width: 100px;
        height: 100px;
        background: red;
    }
</style>
<div class="father">
    <div class="son"></div>
</div>

flex弹性布局

还是看看实现的整体代码:

<style>
    .father {
        display: flex;
        justify-content: center;
        align-items: center;
        width: 200px;
        height: 200px;
        background: skyblue;
    }
    .son {
        width: 100px;
        height: 100px;
        background: red;
    }
</style>
<div class="father">
    <div class="son"></div>
</div>

css3中了flex布局,可以非常简单实现垂直水平居中

这里可以简单看看flex布局的关键属性作用:

● display: flex时,表示该容器内部的元素将按照flex进行布局
● align-items: center表示这些元素将相对于本容器水平居中
● justify-content: center也是同样的道理垂直居中

grid网格布局

<style>
    .father {
            display: grid;
            align-items:center;
            justify-content: center;
            width: 200px;
            height: 200px;
            background: skyblue;

        }
        .son {
            width: 10px;
            height: 10px;
            border: 1px solid red
        }
</style>
<div class="father">
    <div class="son"></div>
</div>

这里看到,gird网格布局和flex弹性布局都简单粗暴

小结

上述方法中,不知道元素宽高大小仍能实现水平垂直居中的方法有:

● 利用定位+margin:auto
● 利用定位+transform
● flex布局
● grid布局

三、总结

根据元素标签的性质,可以分为:

● 内联元素居中布局
● 块级元素居中布局

内联元素居中布局

水平居中

● 行内元素可设置:text-align: center
● flex布局设置父元素:display: flex; justify-content: center

垂直居中

● 单行文本父元素确认高度:height === line-height
● 多行文本父元素确认高度:display: table-cell; vertical-align: middle

块级元素居中布局

水平居中

● 定宽: margin: 0 auto
● 绝对定位+left:50%+margin:负自身一半

垂直居中

● position: absolute设置left、top、margin-left、margin-top(定高)
● display: table-cell
● transform: translate(x, y)
● flex(不定高,不定宽)
● grid(不定高,不定宽),兼容性相对比较差

参考文献

标签:居中,flex,50%,元素,height,垂直,margin,CSS
From: https://blog.csdn.net/m0_73890048/article/details/141703697

相关文章

  • 关于垂直领域大模型的探索和尝试
    最近这一两周看到不少互联网公司都已经开始秋招提前批面试了。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC在变少,岗位要求还更高了。最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。总结链接如下:《......
  • css grid布局实现一个复杂表格
    产品设计了这样一个表格,如下图:当然表格内容格式是固定的,本来想用elementui的,但是思考了一下,用el-table好像嵌套的比较麻烦,还要合并单元格,所以采用了grid布局。废话不多说,直接上代码:<template><divclass="table"><!--表头1--><divclass="th">类型名称<......
  • CSS (border-radius应用) 笔记 08
      border-radius: n1 n2 n3n4 /a1 a2 a3 a4  【n1-a1,n2-a2,n3-a3,n4-a4 分别表示上右下左顺序边角的椭圆边角,其中n代表水平,a代表垂直】e.g有趣的小水滴动画(应用)<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname=&qu......
  • CSS(样式-定位) 笔记 06
    position:;定位1.static代表静态模式,常态模式2.fixed 代表固定模式特点:不随浏览器的滚动而滚动,释放掉自己原来的空间,参照物是整个浏览器3.absolute代表绝对模式特点:随浏览器的滚动而滚动,释放掉自己原来的空间,参照物是整个浏览器4.relative代表相对位置特点:随浏......
  • html+css编写三级菜单
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>Document</title&g......
  • html+css编写二级菜单
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>Document</title&g......
  • CSS3实现购物车动画效果
    概述小程序商城或者web端网站时,我们可以只通过CSS的animation和transform,而不需要借助额外的第三方库轻松实现简单的动画效果,丰富页面的表达效果效果如下图所示,点击按钮就会有个商品进入左下角的购物车内购物车动画示例地址代码示例元素开始只需要写按钮和购......
  • css设置文本上下居中
    要将`div`里面的内容上下居中显示,可以使用以下几种方法之一:###方法一:使用Flexbox这是最常用且最灵活的方法。```css.container{display:flex;align-items:center;justify-content:center;height:100vh;/*或者设置为容器的高度*/}```###方法二......
  • Web大学生网页作业成品——香奈儿香水介绍网页设计与实现(HTML+CSS)(1个页面)
    ......
  • 白骑士的CSS教学进阶篇之变形与过渡 3.1.3 动画
            CSS动画允许开发者在网页中创建复杂的动态效果,而不需要依赖JavaScript。通过使用‘@keyframes‘规则定义动画的关键帧,以及‘animation‘属性来控制动画的行为和效果,你可以实现从简单到复杂的各种动画效果。以下内容将详细讲解CSS动画的各个部分,包括‘......