CSS3教程4——页面布局

4、页面布局——浮动

4.1、标准文档流

标准文档流:块级元素自上而下的排列,内联(行内)元素自左向右地排列,以流动的形式。

块级元素:

h1-h6 p div

行内元素:不管如何设置宽和高都只会布局一个一个行内,而不是块的形状

span a img strong

行内元素可以被包含在块级元素中,反之不可。

4.2、display

改变元素的块级还是行内元素

display:
block 块元素
inline 行内元素
inline-block 块元素,但是可以内联,在一行
none 消失

这也是一种实现行内元素排列的方式,但是我们多数情况使用float

4.3、float

float可以选择左浮动或者右浮动,float会漂浮到标准流的上方,不会影响块级元素的正常标准流。但是标准流中其他块元素中的内联元素会自动检测float边界,并环绕在其周围。

同时设置为float的块,会逐个贴在一行

4.4、父级边框塌陷

由于子元素设置为浮动,导致父级边框塌陷

clear:
right 右侧不允许浮动
left 左侧不允许浮动
both 左右都不允许浮动

解决方案:

  1. 增加父级元素高度

    #father{
        border:1px #000 solid;
        height:800px;
    }
    
  2. 增加空的div标签清楚浮动

    <div class="clear"></div>
    
    .clear{
        clear:both;
        margin:0;
        padding:0;
    }
    
  3. overflow 给父类添加一个overflow

    #father{
        border:1px #000 solid;
        overflow: hidden;
    }
    
  4. 给父类添加一个伪类after(市面上最认可的)

    #father:after{
        content:'';
        display:block;
        clear;both;
    }
    

小结:

  1. 浮动元素后面加空div

    简单,但是代码多余

  2. 设置父元素的高度

    简单,不灵活

  3. overflow

    简单,下拉的一些场景避免使用

  4. 父类添加一个伪类:after

    写法稍微复杂,但是没有副作用,推荐使用

4.5、display和float对比

  • display

    方向不可控制

  • float

    浮动起来会脱离标准文档流,需要解决父级边框塌陷

5、页面布局——定位

5.1、相对定位

/*相对定位:相对于自己原来的位置定位*/
#first{
    position:relative;
    bottom:10px;
    top:-20px;
    right: 10px;
    left: 10px
}

相对定位:relative

相对于原来的位置,进行指定的偏移。相对定位的话,它原来的位置仍然保留在标准文档流之中。

5.2、绝对定位

定位:基于xxx定位,上下左右

  1. 没有父级元素定位的前提下,相对页面(body标签的边框)定位
  2. 父级元素进行了定位(即设置了position属性,即便没有设置具体位置),也会相对父级元素进行定位,并且不会超出父级元素
#first{
    position:absolute;
    bottom:10px;
    top:-20px;
    right: 10px;
    left: 10px
}

5.3、固定定位

定位:基于浏览器的定位,上下左右

#first{
    position:fixed;
    bottom:10px;
    top:-20px;
    right: 10px;
    left: 10px
}

5.4、z-index

一个固定属性。

固定定位会将元素脱离文档流,完全浮于上方,通过设z-index的层级,可以是排列不同的元素图层,z-index越大,位置越靠上。

5.5、一些布局方法(摘自head first html)

  1. 凝胶布局

    将全部内容放到一个div标签中,通过指定div标签外边距为auto,会自动地适应网页的页面,而内容会居于页面中间

  2. 两栏布局

    设置布局display:table;display:table-row,可以实现同等高度的两栏,在解决双栏设计的时候比较好看

6、动画

可以直接在百度搜索示例,进行修改

上一篇:css如何给div加上四角边框


下一篇:float、table、flex解决等分布局出现的问题及解决方案