美文网首页
css全总结之布局

css全总结之布局

作者: Alkaidx | 来源:发表于2016-12-06 17:01 被阅读441次
    1. 首先咱们最简单的就是 居中
      这是一个很重要的基础,在很多时候会用到。
    • 块级水平居中可以使用margin:0 auto
    • text-align: center的作用是什么,作用在什么元素上?能让什么元素水平居中
      • 作用:水平居中;
      • 作用在块级元素上;
      • 能够使inline元素和inline-block元素水平居中。

    上面两个是相对用的比较多,还可以用flex布局,定位等等

    1. 定位 position
    属性
    inherit 规定应该从父元素继承 position 属性的值
    static 默认值,没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)
    relative 生成相对定位的元素,相对于元素本身正常位置进行定位,因此,left:20px会向元素的 left 位置添加20px
    absolute 生成绝对定位的元素,相对于static定位以外的第一个祖先元素(offset parent)进行定位,元素的位置通过 left, top, right以及 bottom属性进行规定
    fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过 left, top,right以及 bottom属性进行规定
    sticky CSS3新属性,表现类似position:relative和position:fixed的合体,在目标区域在屏幕中可见时,它为就像position:relative; 而当页面滚动超出目标区域时,它的表现就像position:fixed,它会固定在目标位置

    普通流与相对定位

    • CSS有三种基本的定位机制:普通流,相对定位和绝对定位

    • 普通流是默认定位方式,在普通流中元素框的位置由元素在html中的位置决定,元素position属性为static或继承来的static时就会按照普通流定位,这也是我们最常见的方式

    • 相对定位比较简单,对应position属性的relative值,如果对一个元素进行相对定位,它将出现在他所在的位置上,然后可以通过设置垂直或水平位置,让这个元素相对于它自己移动,在使用相对定位时,无论元素是否移动,元素在文档流中占据原来空间,只是表现出来的位置会改变

    • 绝对定位与固定定位

    • 相对定位可以看作特殊的普通流定位,元素位置是相对于它在普通流中位置发生变化,而绝对定位使元素的位置与文档流无关,也不占据文档流空间,普通流中的元素布局就像绝对定位元素不存在一样

    • 绝对定位的元素的位置是相对于距离最近的非static祖先元素位置决定的。如果元素没有已定位的祖先元素,那么他的位置就相对于初始包含块儿(body或html神马的)元素。

    • 因为绝对定位与文档流无关,所以绝对定位的元素可以覆盖页面上的其他元素,可以通过z-index属性控制叠放顺序,z-index越高,元素位置越靠上。

    • 最后要说的就是fixed属性了,应用fixed也叫固定定位,固定定位是绝对定位的一种,固定定位的元素也不包含在普通文档流中,差异是固定元素的包含块儿是视口(viewport)

      总结:

      • absolute偏移的参考点是具有position属性(除了static属性)的最近的祖先元素。
      • relative偏移的参考点是元素本身的初始位置。(不脱离文档流)
      • fixed偏移的参考点是浏览器窗口。

    浮动 float(脱离文档流)

    浮动元素的特征

    • 浮动元素将脱离文档流,不会再占据空间;

    • 无论是块元素还是内联元素,没有宽度时默认内容撑开宽度;

    • 内联元素支持宽高;

    • 设置宽高和float后,相当于悬浮的inline-block。

    浮动元素对其他元素的影响

    • 对其他浮动元素的影响:后浮动的元素永不会超过先浮动元素;

    • 对普通元素的影响,普通元素会占据浮动元素原来所在的文档位置;

    • 对文字而言,除了自身的文字外,其他元素中的文字一律环绕浮动元素周围;

    BFC清理浮动

    • BFC的全称是 Block Format Content,有三个特性

    • BFC会阻止垂直外边距(margin-top、margin-bottom)折叠

      • 按照BFC的定义,只有同属于一个BFC时,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如边框,非空内容,padding等)就会发生margin重叠。 因此要解决margin重叠问题,只要让它们不在同一个BFC就行了,但是对于两个相邻元素来说,意义不大,没有必要给它们加个外壳,但是对于嵌套元素来说就很有必要了,只要把父元素设为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠
    • BFC不会重叠浮动元素

    • BFC可以包含浮动

    我们可以利用BFC的第三条特性来“清浮动”,这里其实说清浮动已经不再合适,应该说包含浮动。也就是说只要父容器形成BFC就可以,简单看看如何形成BFC

    • float为 left|right
    • overflow为 hidden|auto|scroll
    • display为 table-cell|table-caption|inline-block
    • position为 absolute|fixed
      我们可以对父容器添加这些属性来形成BFC达到“清浮动”效果

    通用的清除浮动法案

    • 总而言之清除浮动两种方式:
      • 利用 clear属性,清除浮动
      • 使父容器形成BFC
    plan1:
    .clearfix:after{ /*在class属性名是clearfix的元素的子元素的最后再添加一个子元素*/
           content: ''; /*内容是空*/
           display: block; /*设置为块级元素*/ 
           clear: both; /*这个元素左右两边不允许有浮动元素*/
    }
    .clearfix{ /*设置class属性是clearfix的元素*/ 
           *zoom: 1; /*设置缩放比例为1。这是IE专有属性。火狐和老版本的webkit核心的浏览器都不支持这个属性。*/}
    
    plan2:
    .clearfix{
        *zoom:1;
    }
    .clearfix:after{
        content:".";
        display:block;
        height:0;
        visibility:hidden;
        clear:left;
    }
    
    plan3
    .clearfix{
        *zoom:1;
    }
    .clearfix:after{
        content:"";
        display:table;
        clear:both;
    }
    

    负margin

    负边距即margin属性的值设为负值,在CSS布局中是一个很有用的技巧。值为正的场景很常见,大家都很熟悉其表现

    • 当margin-top、margin-left为负值的时候,会把元素上移、左移,同时文档流中的位置也发生相应变化,这点与position:relative的元素设置top、left后元素还占据原来位置不同
    • 当margin-bottom、margin-right设为负值的时候,元素本身没有位置变化,后面的元素会上移、左移

    position:relative和负margin都可以使元素位置发生偏移?二者有什么区别
    区别:

    1. 负margin会使元素在文档流中的位置发生偏移,它会放弃偏移之前占据的空间,紧挨其后的元素会填充这部分空间;

    2. 相对定位后元素位置发生偏移,它仍会坚守原来占据的空间,不会让文档流的其他元素流入。

    z-index 有什么作用

    z-index用于设置元素的堆叠顺序,z-index的值越高,则其堆叠顺序越前,则是显示在较低z-index的值的前面。

    1. z-index仅对定位元素有效(position:relative||absolute||fixed)
    2. z-index只可比较同级元素

    布局

    感觉自己还是没能理解透,没法自己写,只能复制这篇先放着
    http://www.jianshu.com/p/be7a452bf707

    还有flex布局

    还有bootstrap

    还有。。。

    相关文章

      网友评论

          本文标题:css全总结之布局

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