【css面试题】 实现一个盒子的水平竖直居中对齐效果

这篇具有很好参考价值的文章主要介绍了【css面试题】 实现一个盒子的水平竖直居中对齐效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

面试题里有时还会强调 子盒子宽高是否已知,要注意一下

尝试一:给父盒子设置padding 或者子盒子设置margin

<style>
    .father{
        width: 300px;
        height: 200px;
       
        overflow: hidden; /* 放坑爹现象,不信你删了试试 */
        background-color: #db7b7b;
    }

    .son{
        width: 100px;
        height: 100px;
         
        margin: auto;

        background-color: #d8db7b;
    }
</style>
<body>
    <div class="father">
        <div class="son">aa</div>
    </div>
</body>

【css面试题】 实现一个盒子的水平竖直居中对齐效果,面试 - css,css,前端
失败,只能水平居中,垂直不可以!!!!!!!
原因
http://t.csdn.cn/AOMJ1
http://t.csdn.cn/cFsg6

margin:auto为什么不垂直居中

margin:auto是具有强烈计算意味的关键字,用来计算元素对应方向上应该获得的剩余空间大小。

行内元素margin:auto; 不能水平居中在一行的中央位置(行内元素不独占一行)。

块级元素设置宽度后仍占据一行空间,因此margin:auto;会将这一行的剩余空间平均分配给左右外边距。

margin:auto 能使块级元素水平居中,但是不能垂直居中,因为垂直方向上默认没有剩余的空间。

注:行内元素margin:auto既不能水平居中也不能垂直居中,因为行内元素水平垂直方向上默认都没有剩余的空间。

解一:子绝父相+margin:auto+四周是0(子有宽高

<style>
    .father{
      
        position: relative;  /* !!!! */
        width: 300px;
        height: 200px;
       
        overflow: hidden; /* 放坑爹现象,不信你删了试试 */
        background-color: #db7b7b;
    }

    .son{
        position: absolute;  /* !!!! */
        width: 100px;
        height: 100px;
        
         /* !!!! */
         top:0;
         left:0;
         bottom:0;
         right:0;

        margin: auto;

        background-color: #d8db7b;
    }
</style>
<body>
    <div class="father">
        <div class="son">aa</div>
    </div>

【css面试题】 实现一个盒子的水平竖直居中对齐效果,面试 - css,css,前端
但这种情况不适用于 子盒子 不定宽高 的情况,例如子盒子会盛满整个父盒子
【css面试题】 实现一个盒子的水平竖直居中对齐效果,面试 - css,css,前端

尝试二:子绝父相+margin-top/left:50%+transform

子盒子 宽高已知

<style>
    .father{
      
        position: relative;  /* !!!! */
        width: 300px;
        height: 200px;
       
        overflow: hidden; /* 放坑爹现象,不信你删了试试 */
        background-color: #db7b7b;
    }

    .son{
        position: absolute;  /* !!!! */
        width: 100px;
        height: 100px;
        
         /* !!!! */
        margin-top: 50%;
        margin-left: 50%;
        transform: translate(-50%,-50%);

        background-color: #d8db7b;
    }
</style>
<body>
    <div class="father">
        <div class="son">aa</div>
    </div>
</body>

如果你以为这个方法可以通用,那你就错了,因为

marginpadding无论left还是right还是top还是bottom都是相对于父元素width的,若如果没有,找其父辈元素的宽度,均没设宽度时,相对于屏幕的宽度。
【css面试题】 实现一个盒子的水平竖直居中对齐效果,面试 - css,css,前端
http://t.csdn.cn/Pwcy6
http://t.csdn.cn/YSubI

所以说,尝试一,给父盒子加padding,根本不行,父盒子的padding参考body的大小,所以就把父盒子撑大了
【css面试题】 实现一个盒子的水平竖直居中对齐效果,面试 - css,css,前端【css面试题】 实现一个盒子的水平竖直居中对齐效果,面试 - css,css,前端
所以不要试padding了!!!

解二:子绝父相+margin-left/top:父盒子一半+transform(子定宽高

<style>
    .father{
        position: relative; 
        width: 300px;
        height: 200px;
        overflow: hidden; /* 放坑爹现象,不信你删了试试 */
        background-color: #db7b7b;
    }

    .son{
        position: absolute; 
        width: 100px;
        height: 100px;
        
         /* !!!! */
        margin-top: 100px; 
        margin-left: 150px;
        transform: translate(-50%,-50%);

        background-color: #d8db7b;
    }
</style>
<body>
    <div class="father">
        <div class="son">aa</div>
    </div>
</body>

解三:子绝父相+top/left:50%+transform(子不定宽高

子盒子可以 不定宽高

<style>
    .father{
      
        position: relative;  /* !!!! */
        width: 300px;
        height: 200px;
       
        overflow: hidden; /* 放坑爹现象,不信你删了试试 */
        background-color: #db7b7b;
    }

    .son{
        position: absolute;  /* !!!! */
        width: 100px;
        height: 100px;
        
        
        top: 50%;
        left: 50%;
        transform: translate(-50%,-50%);

        background-color: #d8db7b;
    }
</style>

解四:子绝父相+top/left:50%+magin-top/left: 负 子一半(子宽高已知

也就是把transform: translate(-50%,-50%); 替换成margin-top: -50px;margin-left: -25px;所以,子盒子宽高已知

<style>
    .father{
      
        position: relative;  
        width: 300px;
        height: 200px;
       
        overflow: hidden; /* 放坑爹现象,不信你删了试试 */
        background-color: #db7b7b;
    }

    .son{
        position: absolute;
        width: 50px;  /* !!!! */
        height: 100px;
        
        
        top: 50%;
        left: 50%;
        /* transform: translate(-50%,-50%); */
        margin-top: -50px;
        margin-left: -25px;

        background-color: #d8db7b;
    }
</style>

flex

父盒子flex布局,并设置justify-content: center; align-items: center;

<style>
    .father{
        display: flex;
        justify-content: center;  
        align-items: center;

        width: 300px;
        height: 200px;


        background-color: #db7b7b;
    }

    .son{
        background-color: #d8db7b;
    }
</style>

table - cell

将父盒子设置display: table-cell; 并设置text-align: center; vertical-align: middle; 子盒子设置display: inline-block;

http://t.csdn.cn/cmr2B

<style>
    .father{
        display: table-cell;
        text-align: center;
        vertical-align: middle;

        width: 300px;
        height: 200px;


        background-color: #db7b7b;
    }

    .son{
        display: inline-block;
        background-color: #d8db7b;
    }
</style>

grid

父盒子设置为网格元素display: grid; 并设置 place-items: center;

<style>
    .father{
        display: grid;
        place-items: center;

        width: 300px;
        height: 200px;


        background-color: #db7b7b;
    }

    .son{

        background-color: #d8db7b;
    }
</style>

总结:

1.试方法要多个栗子,不能只试正方形,这样就发现不了margin依据父的宽度

2.子盒子不定宽高,只能设置top/left:50%,不能设置margin-left:50%,是因为top/left:50%不像margin都参照父的width

【css面试题】 实现一个盒子的水平竖直居中对齐效果,面试 - css,css,前端文章来源地址https://www.toymoban.com/news/detail-699359.html

到了这里,关于【css面试题】 实现一个盒子的水平竖直居中对齐效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • css实现水平居中

    代码示例 display:flex;  这些要添加在父级的,是父级的属性  //父级添加display:flex;  //父级添加justify-content:center; 效果图:  外边距可以让块级盒子水平居中,但是必须满足两个条件: ①盒子必须指定了宽度 ②盒子左右的外边距都设置为auto  .header{       width:960px;       m

    2024年02月14日
    浏览(29)
  • CSS实现: 水平居中 的几种方法

    实现方法: 1、添加 margin 值 auto 2、定位 position(子绝父相) + 偏移值 left + margin-left 回退 [ 需要计算,有点 麻烦 ] 3、定位 position(子绝父相) + 偏移值 left + CSS-2d transform 4、文字居中 text-align:center; + 行内块元素 5、弹性盒子布局 [ 推荐 ] 示例 代码实现: 原始效果图: 接下来,

    2024年02月03日
    浏览(41)
  • html 怎么设置文本对齐,文本间距,盒子居中显示

    1.在一个盒子中我们怎么让文本水平,垂直居中显示 可以看到此时文本默认是在盒子的左上角显示的,可以 添加行高 (line-height 值 与盒子高度一样就行 ),和 文本对齐方式设置为水平居中 ,代码如下:    2.怎么让盒子中的元素居中显示  这里我们可以看到,盒子中的元

    2024年02月08日
    浏览(35)
  • CSS实现元素水平垂直居中的各种方法

    关于 CSS 如何将元素进行水平垂直居中的几种常用方法 前言         在设计网页页面的过程中,总会有将元素或者文字进行水平或者垂直居中的要求,各种CSS样式调整,搞的头都大了。这里将会介绍 CSS 中几种常用到的水平垂直居中的方法,希望能够对你有所帮助。 接下

    2024年02月08日
    浏览(34)
  • css垂直水平居中的几种实现方式

    一、固定宽高: 1、定位 + margin-top + margin-left 设置父元素的position为相对定位,子元素绝对定位,并在 top 和 left 方向上移动父元素50%的距离。 但这个时候,是子元素的上边框和左边框距离父元素150px,整体向右下角偏了一些,所以还需要再用 margin 调整至中心位置,数值分别

    2024年01月18日
    浏览(31)
  • css 实现 html 元素内文字水平垂直居中的N种方法

            上一篇博文写了div 中元素居中的N种常用方法,那么单个html元素:div(块级元素代表),span(行内元素代表)中的文字如何水平垂直都居中呢?实现方法如下:         本文例子使用的 html body结构下的模型如下:         例子居中效果都如下图: 注:当把div

    2024年02月13日
    浏览(37)
  • CSS文字居中对齐学习

    CSS使用text-align属性设置文字对齐方式;text-align:center,这样就设置了文字居中对齐; 做一个html文档,网页元素包括:h1, 一个div,一个div,一个p(段落),一个链接(a),一个表格; 定义了CSS样式类box,其中指定了背景色为pink,文字对齐为居中对齐;定义了h1元素的文字对

    2024年02月09日
    浏览(38)
  • CSS3中盒子居中

    (1)利用定位(子绝父相)、margin-left、和margin-top实现 (2) 利用定位(子绝父相)、transfrom属性实现 (3) 利用flex布局实现盒子居中

    2024年02月22日
    浏览(31)
  • CSS水平垂直居中

    1.利用定位 + margin:auto 2.flex布局 3.grid布局 一、利用position+margin:auto  二、利用flex 三、gird布局

    2024年02月14日
    浏览(34)
  • CSS盒子居中的6种方法!

    常见的一种方式就是使用 flex 布局设置居中。 利用弹性布局( flex ),实现水平居中,其中 justify-content 用于设置弹性盒子元素在主轴(横轴)方向上的对齐方式 给容器设置: display: flex ; 写在父元素上这就是定义了一个伸缩容器 justify-content 主轴对齐方式,默认是横轴 align-i

    2024年03月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包