两个嵌套的Div,内部Div的margin-top失效

本文探讨了在CSS布局中,当一个div嵌套在另一个div中且外层div的padding值为0时,内层div的margin-top值会转移到外层div的现象。并提供了三种解决此问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对内部的div设置margin-top时,内部对于外部的div并没有产生一个margin值,而是外部的div相对于上面的div产生了一个margin值。

实例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            margin: 0;
            padding: 0;
            background: blue;
        }
        #a {
            width: 200px;
            height: 200px;
            background: #e2e2e2;
        }
        #b {
            height: 100px;
            width: 100px;
            margin-top: 50px;
            background: black;
            color: red;
        }
    </style>
</head>
<body>
    <div id="a">
        <div id="b"></div>
    </div>
</body>
</html>

效果图如下:
这里写图片描述

从以上效果图中可以看出,我们对 div#b 设置的 margin-top 属性没有生效,而外层 div#a 却多了个 margin-top 的效果。

这是因为嵌套div中margin-top出现转移,在部分浏览器中(目前在 IE8, chrome60.0, firefox57.0.2 这几个版本的浏览器上测试,是这样的效果,其他版本目前没有测试),两个嵌套的div,如果外层父元素div的padding值为0,那么内层div的margin-top值会转移到父元素也就是外层div身上。

解决方案:
方案1.给父元素div1设置一个padding-top值

        #a {
            width: 200px;
            height: 200px;
            background: #e2e2e2;
            padding-top: 1px;
        }

正常的效果图如下:
这里写图片描述

方案2.
给父元素div1设置一个overflow:hidden;在不加overflow:hidden;的时候,margin-top:这个属性是认不到边的,也就是失效。除了 hidden 属性外,其他以下几个属性也是可以的:

overflow: hidden | auto | overlay | scroll

        #a {
            width: 200px;
            height: 200px;
            background: #e2e2e2;
            overflow: hidden;
        }

方案3.
让父元素生成一个块级格式化范围(BFC
一个BFC是一个HTML盒子并且至少满足下列条件中的任何一个:

float的值不为none
position的值不为static或者relative
display的值为 table-cell, table-caption, inline-block, flex, 或者 inline-flex中的其中一个
overflow的值不为visible

display中还有一些其他的属性值也是可以的,比如 table|inline-table|inline-flex 等等

``` <div style="width: 100%"> <el-form style="background: #fff;width: 100%" :model="receiptAddr" ref="queryParams" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form-item label="寄件人" style="margin-left: 50px;margin-top: 20px;width: 100% "> <el-select v-model="sendAddr.sender_address" @change="sendaddrChange" placeholder="请选择寄件人" style="flex:1;width: 100%"> <el-option :label="'请选择寄件人'" :value="0"></el-option> <el-option v-for="(item, index) in getShopAddr.addr" :key="index" :label="item" :value="index"></el-option> </el-select> </el-form-item> <div></div> <el-form-item label="姓名" prop="name" size="mini" style="margin-left: 50px;margin-top: 20px;width: 100%"> <el-input v-model="sendAddr.sender_name" placeholder="姓名" clearable style="flex:1" disabled /> </el-form-item> <br> <el-form-item label="联系方式" prop="name" size="mini" style="margin-left: 50px;margin-top: 20px"> <el-input v-model="sendAddr.sender_mobile" placeholder="联系方式" clearable style="flex:1" disabled /> </el-form-item> <br> <el-form-item label="省市区" prop="name" size="mini" style="margin-left: 50px;margin-top: 20px"> <el-input v-model="sendAddr.sender_pca" placeholder="省市区" clearable style="flex:1" disabled /> </el-form-item> <br> <el-form-item label="详细地址" prop="name" size="mini" style="margin-left: 50px;margin-top: 20px"> <el-input v-model="sendAddr.sender_address" placeholder="详细地址" clearable style="flex:1" disabled /> </el-form-item> <div></div> </el-form> </div>```给宽度100%没有作用
03-15
<template> <div> <div class="card" style="padding: 15px"> 您好,{{ user?.name }}!欢迎使用本系统 </div> <!-- 宠物卡片区 --> <div style="margin-bottom: 20px; font-size: 20px; font-weight: bold; color: #817a70">如果你喜欢我,就领养我吧~</div> <div> <el-row> <el-col :span="5" v-for="item in animalData"> <div class="card" style="background-color: #f8f4e8; text-align: center"> <img :src="item.img" alt="" style="width: 80px; height: 80px; border-radius: 50%"> <div style="font-weight: bold; color: #817a70; margin-top: 5px">{{ item.name }}({{ item.type }})</div> <div style="color: #575353; font-size: 13px; margin-top: 5px">性别:{{ item.sex }}, 年龄:{{ item.age }}, <span style="color: #7d3d0c">{{ item.status }}</span></div> <div style="margin-top: 15px; color: #4b4949; text-align: left">认识一下我:{{ item.descr }}</div> <div> <el-button type="success" size="mini" style="margin-top: 20px">领养</el-button> </div> </div> </el-col> </el-row> </div> </div> </template> <script> export default { name: 'Home', data() { return { user: JSON.parse(localStorage.getItem('xm-user') || '{}'), notices: [], animalData:[], } }, created() { this.$request.get('/notice/selectAll').then(res => { this.notices = res.data || [] }) this.loadAimal() }, methods: { loadAnimal() { this.$request.get('/animal/selectAll').then(res =>{ if(res.code ==='200'){ this.animalData = res.data }else{ this.$message.error(res.msg) } }) } } } </script> <style scoped> .el-col-5{ width: 20%; max-width: 20%; padding: 10px 10px; } </style>为什么显示不出来宠物卡片
最新发布
03-19
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值