clear清除和float同时设置的问题

clear清除和float同时设置的问题

<!DOCTYPE html>
<html>
<head>
        <!-- 此处编写样式 -->
        <style>
            *{margin:0;padding:0;}
            .container{
                border:1px dashed #1f1f1f;
                padding:15px;
                width:820px;
                /*width:2000px;*/  /*问题2中的条件*/
                margin:0 auto;
            }
            .clearfix:after{
                content:".";
                height:0px;
                visibility:hidden;
                display:block;
                clear:both;
            }
            .clearfix{
                *zoom:1;
            }/*方法1*/
            .container .pic{
                border:1px solid #1f1f1f;
                margin:15px;
                float:left;
            }
            /*.container .3{
                border:1px solid #1f1f1f;
                margin:15px;
                float:left;
                clear:right;
            }*/  /*问题2中的条件*/
            /*.clear{
                clear:both;
            }*/ /*方法二*/
            p{padding:0 0 0 10px;}
        </style>
</head>
<body>   
        <!-- 此处写代码 -->
    <div class="container clearfix">
        <div class="pic">
            <img src="http://img1.sycdn.imooc.com/climg//590fe9770001e63102400135.jpg">
            <p>欢迎来到慕课网学习新知识!</p>
        </div>
        <div class="pic">
            <img src="http://img1.sycdn.imooc.com/climg//590fe9770001e63102400135.jpg">
            <p>欢迎来到慕课网学习新知识!</p>
        </div>
        <div class="pic"><!--改成class="3"  问题2中的条件-->
            <img src="http://img1.sycdn.imooc.com/climg//590fe9770001e63102400135.jpg">
            <p>欢迎来到慕课网学习新知识!</p>
        </div>
        <div class="pic">
            <img src="http://img1.sycdn.imooc.com/climg//590fe9770001e63102400135.jpg">
            <p>欢迎来到慕课网学习新知识!</p>
        </div>
        <div class="pic">
            <img src="http://img1.sycdn.imooc.com/climg//590fe9770001e63102400135.jpg">
            <p>欢迎来到慕课网学习新知识!</p>
        </div>
        <div class="pic">
            <img src="http://img1.sycdn.imooc.com/climg//590fe9770001e63102400135.jpg">
            <p>欢迎来到慕课网学习新知识!</p>
        </div>
        <!--<div class="clear"></div>--><!--方法2-->
    </div>
</body>
</html>

请老师看看我代码中两种方法可不可行。

问题一:设置float后,到第几个小模块转行是由父元素的width控制的吗?有方法取消这种限制吗?

问题二:针对问题一,我想法是给第三个小模块设置clear:right;于是改成width:2000px,可是发现有问题,第三个小模块不再有浮动属性了。而且我去掉解决父元素塌陷的方法1后发现父元素不是塌陷的,第三个小模块在父元素中,没有像2-10里老师演示的那样,排在下一行。照理说第三个小模块也是浮动元素不该在父元素里面啊?这是为什么呢?

http://img1.sycdn.imooc.com//climg/5f37fb8e087f29b316000870.jpghttp://img1.sycdn.imooc.com//climg/5f37faa10853425f16000904.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好, clear:right确实是不允许右侧存在浮动元素,但是这个浮动元素是针对右浮动元素的。第三个模块右边的浮动元素都是左浮动,所以clear:right;没有效果。

祝学习愉快~

好帮手慕慕子 2020-08-16 11:22:14

同学你好,对于你的问题解答如下:

  1. 方法一和方法二整体逻辑和思路是正确的,但是因为大盒子的宽度超出子元素占据的宽度,导致小盒子距离大盒子间距实现有误差。建议调整大盒子的宽度等于小盒子实际占据的宽度之和816 = (240 +2+30)×3

    http://img1.sycdn.imooc.com//climg/5f38a1c50944e5b806970267.jpg

  2. 是的,由父元素宽度控制,没有哦,因为当前练习题要设置整体水平居中显示,所有必须给大盒子设置宽度,结合margin属性实现居中。

  3. 因为只给第三个元素设置了类名为3,并没有设置pic(这个类名才是同意设置小木块浮动的)

    http://img1.sycdn.imooc.com//climg/5f38a2d60918c35104680289.jpg

    另,由于类名不可以数字开头,所以类名设置3,不符合语法规范,此时第三个小木块并没有浮动,所以默认在父元素内容,撑开父元素的高度。

    调整类名符合规范后,因为第三个小盒子设置的是clear:right;但是第四个小盒子设置的float属性值为left,所以还是会在一排显示,无法实现效果。

    参考第一条回答,要实现整体居中显示,要给大盒子设置固定的宽度,所以直接通过大盒子宽度控制就可以了。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 qq_慕用6596887 #1
    我把第四个小模块设置成class=test1 clear:left后能够实现换行了。 但是有个不解,为啥在第三个模块设置clear:right不行呢。设置了clear:right后,第三个模块右边不就不允许存在浮动元素了吗?
    2020-08-16 12:25:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师