美文网首页
CSS中的浮动与定位

CSS中的浮动与定位

作者: 饥人谷_DanaeJJ | 来源:发表于2017-09-19 20:42 被阅读0次

    1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响?
    (1)浮动元素会脱离正常的文档流,按照其外边距指定的位置相对于它的上一个块级元素(或父元素)显示
    (2)浮动元素后面的块级元素的内容会向此浮动元素的外边距靠齐,但是边框和背景却忽略浮动元素而向上一个任意非浮动元素靠齐
    (3)浮动元素后面的内联元素会向此浮动元素的外边距靠齐

    对父容器的影响:
    对于其父元素来说,元素浮动之后,它脱离当前正常的文档流,所以它也无法撑开其父元素,造成父元素的塌陷
    对其他浮动元素的影响:
    (1)同一个方向的浮动元素:当一个浮动元素在浮动过程中碰到同一个方向的浮动元素时,它会紧跟在它们后面
    (2)反方向的浮动元素:互不影响,位于同一条水平线上,当空间不够时会被挤下
    对普通元素的影响:
    (1)对于其父元素来说,元素浮动之后,它脱离当前正常的文档流,所以它也无法撑开其父元素,造成父元素的塌陷。
    (2)如果兄弟元素为内联元素,则元素会环绕浮动元素排列。
    对文字的影响:环绕浮动元素。

    2.清除浮动指什么? 如何清除浮动? 两种以上方法

    清除浮动指清除掉元素的float属性,消除浮动元素对其他元素的影响(如父元素高度坍塌)
    第一种:添加新的元素,应用clear:both
    HTML:
    <div class="outer">
    <div class="div1">1</div>
    <div class="div2">2</div>
    <div class="div3">3</div>
    <div class="clear"></div>
    </div>

    CSS:
    .clear{clear:both; height: 0; line-height: 0; font-size: 0}

    第二种:给父级元素定义overflow
    HTML:
    <div class="outer over-flow"> //这里添加了一个class
    <div class="div1">1</div>
    <div class="div2">2</div>
    <div class="div3">3</div>

    </div>
    CSS:
    .over-flow{
    overflow: auto; //也可以设置hidden
    zoom: 1; //zoom: 1; 处理兼容性问题
    }

    第三种:after 方法:(注意:作用于浮动元素的父亲)
    先说原理:

    这种方法清除浮动是现在网上最拉风的一种清除浮动,他是利用:after和:before来在元素内部插入两个元素块,从面达到清除浮动的效果。其实现原理类似于clear:both方法,只是区别在于:clear在html插入一个div.clear标签,而outer利用其伪类clear:after在元素内部增加一个类似于div.clear的效果。下面来看看其具体的使用方法:

    HTML:
    <div class="outer">
    <div class="div1">1</div>
    <div class="div2">2</div>
    <div class="div3">3</div>
    </div>
    CSS:
    .outer {zoom:1;}
    .outer :after {
    clear:both;
    content:'.';
    display:block;
    width: 0;
    height: 0;
    visibility:hidden;
    }

    其中clear:both;指清除所有浮动;content: '.'; display:block;对于FF/chrome/opera/IE8不能缺少,其中content()可以取值也可以为空。visibility:hidden;的作用是允许浏览器渲染它,但是不显示出来,这样才能实现清楚浮动。

    下一标签直接清浮动兄弟标签浮动时,在下一标签的属性中直接写入清除clear:both;这样就可以清除以上标签的浮动而不用加入空标签来清除浮动。

    *当一个内层元素是浮动的时候,如果没有关闭浮动时,其父元素也就不会再包含这个浮动的内层元素,因为此时浮动元素已经脱离了文档流。也就是为什么外层不能被撑开了!

    3.有几种定位方式,分别是如何实现定位的,参考点是什么,使用场景是什么?
    普通流:
    static:这是默认的定位方式。
    相对定位:
    relative:参考点是该元素本身,它是相对于它原来的位置发生变化。如果对一个元素进行相对定位,它将出现在他所在的位置上,然后可以通过设置垂直或水平位置,让这个元素相对于它自己移动,在使用相对定位时,无论元素是否移动,元素在文档流中占据原来空间,只是表现出来的位置会改变。
    绝对定位:
    absolute:它的位置是相对于距离最近的非static祖先元素位置决定的。如果元素没有已定位的祖先元素,那么他的位置就相对于初始包含块html来定位。
    fixed:固定定位是绝对定位的一种,固定定位的元素也不包含在普通文档流中,它的参考点是视口。

    4.z-index 有什么作用? 如何使用?
    z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。 当元素的position属性为absolute,relative或fixed。
    z-index越高,元素位置越靠上。

    5.position:relative和负margin都可以使元素位置发生偏移?二者有什么区别
    position:relative;只相对自己原本位置发生偏移,不影响其它普通流中元素的位置。负margin:除了让元素自身发生偏移还影响其它普通流中的元素。

    6.BFC 是什么?如何生成 BFC?BFC 有什么作用?举例说明
    BFC(Block Formatting Content)块格式化上下文。

    生成BFC:
    1.float为 left|right
    2.overflow为 hidden|auto|scroll
    3.display为 table-cell|table-caption|inline-block
    4.position为 absolute|fixed

    作用:

    • 可以包含浮动元素
    • 可以阻止外边距折叠
    • 可以防止元素被浮动元素覆盖

    7.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例
    (1)在什么场景下会出现外边距合并?如何合并?
    外边距合并:两个在普通文档流中相邻的元素外边距相遇的时候发生合并。这个相邻可以是父子关系相邻,兄弟关系相邻,或者一个元素内部没有东西,自身的上下边距相遇时都会发生外边距合并。
    合并的结果: 两个外边距都是正数,取两者之中的较大者;两个外边距都是负数,取两者之间绝对值较大者;当两个外边距一正一负时,取两者的和。
    (2)如何不让相邻元素外边距合并?
    若不想让相邻元素合并,设置浮动,display:inline-block或使其父元素均形成BFC可防止边距合并(如overflow:hidden)。

    举例:


    Paste_Image.png

    子元素box1的外边距与父元素box的外边距合并,box与ct的外边距合并,box1与ct的外边距合并。

    相关文章

      网友评论

          本文标题:CSS中的浮动与定位

          本文链接:https://www.haomeiwen.com/subject/yyhbqxtx.html