关于display样式、overflow样式、文档流、浮动、定位

一、显示与隐藏
  1 通过display样式 - none隐藏
    语法 - display:none;
    特点 - 隐藏以后,元素原有的位置会被占用,
  2 通过visibility - hidden隐藏  
                   - visible显示(默认值)
    语法 - visibility:hidden;
    特点 - 隐藏以后,元素原有的位置还会保留。
    
二、display样式
  1 none 设置隐藏
  2 block 将元素变为块元素的显示效果。与HTML元素本身并无联系。
  3 inline 将元素变为内联元素的显示效果。与HTML元素本身并无联系。
  4 inline-block 将元素变为行内块元素的效果显示。
    * 行内块元素:
        - 元素本身以块元素的效果显示(宽和高设置有效)
        - 元素之间以行内元素的排列方式显示(水平排列,不会独占一行)
    * 补充:行内元素有一个特点,在编写HTML代码时,如果元素之间有空格(包括换行符),
        如: <span>你好</span> <span>你好</span> <span>你好</span>
        或:  <span>你好</span>
              <span>你好</span>
              <span>你好</span> 
        这样写,在浏览器页面中显示时,元素之间也会出现一个“间隙”。
        若: <span>你好</span><span>你好</span><span>你好</span>
        这样写,就可以消除间隙,但是代码的可读性不好。
关于display样式、overflow样式、文档流、浮动、定位

三、overflow样式(设置子元素溢出时父元素如何处理)
  1 visible 默认值,内容可能会溢出。
    * 内容溢出定义:
        当定义一个元素,并且在此元素定义文本内容,当文本内容过多时,可能显示会超出当前元素的区域。
        但是在IE6中父元素会被撑开,不会溢出。
  2 hidden 溢出的内容会被修剪,并且修剪掉的内容是不可见的
  3 scroll 浏览器会显示竖直、水平滚动条来显示内容
  4 auto 有两种可能的效果
       - 当内容溢出时,会自动添加竖直滚动条(相当于scroll)
       - 当内容不会溢出时,不会添加滚动条。(相当于默认样式)


四、文档流
  1 定义 - 垂直方向从上到下的顺序排列,水平方向从左到右的顺序排列
  2 注意 - 默认情况下,排列的顺序是不能改变的.
  3 脱离文档流的三种方式: 浮动、绝对定位、固定定位
关于display样式、overflow样式、文档流、浮动、定位

五、浮动
  1 特点 - 当前元素脱离文档流,并且在页面中不再占有位置。
    注意 - 元素设置浮动以后,元素将会最大程度漂浮到元素的最上边,直到遇到父元素的边框或其他的浮动元素。
         - 如果父元素的宽度不足以装下所有的浮动子元素,子元素将会换行。
         - 块元素 本来不设置浮动时,会占父元素的100%,设置浮动以后宽度不再占父元素的100%,而是被子元素撑开。
  - 内联元素  设置浮动以后会变成块元素。
  2 可选值 
      - left
      - right
  3 浮动应用的特殊场景
      - 对于父子元素,当设置子元素浮动时,不会超出父元素的范围。
      - 对于相邻兄弟元素,存在两种情况
          - 如果两个元素都设置了浮动,两个元素将变为水平排列。
          - 如果前一个元素不设置浮动,后一个元素设置了浮动,
            那么后一个元素不会超出(最多是齐着)或覆盖前一个元素。
      - 文本内容不会被浮动的元素覆盖,会环绕在浮动元素的周围。
        应用:文字环绕图像效果。


六、高度塌陷问题
    原因:文档流中,默认情况下,没有设置宽度和高度时,
          默认的宽度是父元素的整个宽度。
          默认的高度是0或者子元素的高度的总和。
    特点:对于父子元素,如果父元素没有设置高度,子元素设置了高度,并且浮动。
    现象:父元素的高度显示为0.  —— 高度塌陷问题


七、高度塌陷解决方案:
   * BFC块级格式化环境
      -  BFC是元素的隐含属性。默认情况下,BFC是关闭的
      -  如何开启BFC
          * 将当前元素设置为浮动
          * 将当前元素的 overflow 设置为 非visible 的值(一般为hidden)
          * 在所有子元素的最后,新增一个子元素,并且设置子元素的 clear 属性值为 both
   * 高度塌陷解决方案
      1 为父级元素设置高度height为所有子元素的高度之和。
        存在问题:需要根据子元素高度人为计算父级元素的height值。


      2 为父级元素和子级元素同时设置浮动,父级元素没有设置宽度和高度。可以使父元素包裹子元素。
        结果显示:父级的宽度和高度分别是子元素的宽度和高度之和。


      3 将当前元素的 overflow 设置为 非visible 的值(一般为hidden)


      4 在所有子元素的最后,新增一个子元素,并且设置 clear 属性值为 both
        注意:清除浮动可以清除其他元素对本元素的影响。
        问题:新增的元素会造成代码冗余。


      5 设置父元素的 :after伪类display为inline-block,然后清除浮动。
        问题:IE6、7不支持    :after伪类。


   * 总结 最好的方式是 -     overflow:hidden
          - 在IE6中不能开启BFC,但是他有另外一个隐藏属性:
          - 开启方式(副作用比较小的): zoom: 1; (只兼容IE6)


八、定位
   * 元素开启定位以后,如果不设置偏移量,元素不会发生任何变化。


   * 元素开启定位以后,可以通过z-index来设置元素的层级。
     将z-index设为整数值,值越大,层级越高。


   1 static - 默认值,表示元素不开启定位
   2 relative - 相对定位
   3 absolute - 绝对定位 
   4 fixed - 固定定位
   
九、绝对定位 absolute
    1 当父级元素没有设置定位,子级元素设置了定位时,子级元素会根据页面进行偏移。
    2 当父级元素和子级元素都设置了定位时,子级元素会相对于父级元素设置定位。
    3 行内标签开启绝对定位以后,会变成块级元素(高和宽有效),同时也会脱离文档流。
    4 开启绝对定位以后,元素会提升一个层级。
    5 当元素设置绝对定位时,宽度和高度默认由内容决定。
    偏移量的设置:
     left和top - 设置距离左边和上边的值。
     righthe bottom - 设置距离右边和下边的值。

关于display样式、overflow样式、文档流、浮动、定位
十、固定定位
    1  特点:当元素开启固定定位以后,会脱离文档流。
       固定定位是绝对定位的一种特殊形式,始终依据浏览器窗口来定义自己的显示位置。
    2  效果:不管浏览器滚动条如何滚动,也不管浏览器窗口的大小如何变化,该元素都会始终显示
       在浏览器窗口的固定位置。
    3  当行内元素开启固定定位以后,也会改变元素的性质,即变成块元素,同时脱离文档流。
关于display样式、overflow样式、文档流、浮动、定位

十一、相对定位
    1 特点:开启以后元素相对于元素自身原来的位置发生偏移。
            元素不会脱离文档流,并且元素会提升一个层级(覆盖没定位的元素)。
            元素开启相对定位以后,不会改变元素的性质。
   也就是说块元素设置相对定位还是块元素,内联元素设置相对定位以后还是内联元素。