浮动布局的特殊案例 第一种,下边每个浮动元素的父级都设置了clear:both

本文探讨了浮动布局中,当父级设置clear:both时,浮动元素如何受上层margin影响导致布局异常。通过案例展示,说明了即使设置clear:both,过大的margin仍可能导致后续浮动元素位置改变,影响整体布局。

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

*{
    padding: 0;
    margin: 0;
}
a{
    text-decoration: none; 
}
li{
    list-style: none;
}
.clearfix::after{
    content: "";
    display: block;
    clear: both;
}


    <header>
        <!-- 黑色导航 -->
        <nav>
            <ul class="clearfix nav_top">
                <li><a href="#">豆瓣</a></li>
                <li><a href="#">读书</a></li>
                <li><a href="#">电影</a></li>
                <li><a href="#">音乐</a></li>
                <li><a href="#">同城</a></li>
                <li><a href="#">小组</a></li>
                <li><a href="#">阅读</a></li>
                <li><a href="#">FM</a></li>
                <li><a href="#">东西</a></li>
                <li><a href="#">市集</a></li>
                <li><a href="#">更多</a></li>
                <li><a href="#">豆邮</a></li>
                <li><a href="#">提醒</a></li>
                <li><a href="#">下载豆瓣客户端</a></li>
            </ul>
        </nav>
        <!-- 绿色导航 -->
        <nav class="nav_bottom clearfix">
            <ol class="clearfix"> 
                <li><img src="./indeximg/lg_main_a11_1.pn   g" alt=""></li>
                <li><a href="#">首页</a></li>
                <li><a href="#">我的豆瓣</a></li>
                <li><a href="#">浏览发现</a></li>
                <li><a href="#">移动应用</a></li>
                <li><a href="#">游戏</a></li>
                <li><a href="#">线上活动</a></li>
                <li><input type="text"placeholder="搜索你感兴趣的内容和人..."</li>
            </ol>
        </nav>
    </header>

******************************************************************************************
css变化之后:第一种情况
header{  
    background-color: orange;
}
.nav_top{
    background-color: gray;
    height: 40px;
    /* 注意这里设置了高度   把灰色nav高度固定 */
}  
ul>li{
    float: left;
    /* display: inline-block;  */
    margin: 15px;
    background-color: red; 
} 
ul>li:nth-child(n + 12){float: right;}
ol{ /* 这里让其居中*/
    width: 950px;
    margin: 0 auto;  
}
ol>li{
    /* display: inline-block; */ 
    float: left;
    list-style: none; 
    margin-left: 15px;
    background: yellow; 
}

上边的两个列表都进行了浮动布局,第一个nav设置了高度,当对第一个nav中的li进行margin设置时,如果过大超出了nav的高度后,会影响下边的nav中的 li 的布局,发生下边的这种情况,不能正常显示,(如下图黄色背景的字出现在红色背景字的垂直下方,)这是因为设置了高度,同时margin值太大,挤掉了下边nav的位置(也就是说,当浮动元素间出现了位置抢占的情况,后边的浮动会主动避让,即使是父级都添加了 clear:botn )
在这里插入图片描述


.nav_top{
    background-color: gray;
    height: 40px;
    /* 注意这里设置了高度 */
}  
ul>li{
    /* float: left; */
    display: inline-block; 
    margin: 15px;
    background-color: red; 
} 
ul>li:nth-child(n + 12){float: right;}
ol{ /* 这里让其居中*/
    width: 950px;
    margin: 0 auto;  
}
ol>li{
    /* display: inline-block; */ 
    float: left;
    list-style: none; 
    margin-left: 15px;
    background: yellow; 
}

在这里插入图片描述
上图,当浮动元素的上个正常文档流的元素添加margin,除非值太大,一般不会影响浮动元素的整体布局


.nav_top{
    background-color: gray;
    height: 40px;
    /* 注意这里设置了高度 */
}  
ul>li{
    float: left;
    /* display: inline-block;  */
    margin: 35px;
    background-color: red; 
} 
ul>li:nth-child(n + 12){float: right;}
ol{ /* 这里让其居中*/
    width: 950px;
    margin: 0 auto;  
}
ol>li{
    display: inline-block; 
    /* float: left; */
    list-style: none; 
    margin-left: 15px;
    background: yellow; 
}

在这里插入图片描述
上图,跟前一个案例一样,当浮动元素的上个正常文档流的元素添加margin,除非值太大,一般不会影响正常文档元素的整体布局


.nav_top{
    background-color: gray;
    height: 40px;
    /* 注意这里设置了高度 */
}  
ul>li{
    /* float: left; */
    display: inline-block; 
    margin: 28px;
    background-color: red; 
} 
ul>li:nth-child(n + 12){float: right;}
ol{ /* 这里让其居中*/
    width: 950px;
    margin: 0 auto;  
}
ol>li{
    display: inline-block; 
    /* float: left; */
    list-style: none; 
    margin-left: 15px;
    background: yellow; 
}

在这里插入图片描述
上图,当正常文档流之间的子元素不会因为margin值相互影响

当然在正常情况下,不会将自身W/H+margin 的值超出父元素的高度,因为这样会产生很多问题,最近在研究浮动盒子,就做了小小的案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值