Bootstrap

CSS的布局有哪些

1. table布局

● 特点:他的特性决定非常适合用来做布局,表格的内容可以自动居中,也可加入display:table;display:table.cell来支持
● 缺点:1.table比其他更多的html标记占更多的字节(会造成下载时间延迟,占用服务器更多的资源)
2. table会阻挡浏览器渲染引擎的渲染顺序(会延迟页面的生成速度,让用户等待更久的时间)
● 优点:本身具备的特点,让有的时候用起来非常的方便,可以很好的达到预期的效果

2. flex布局:

2.1 盒模型:

一个盒子的占用空间是:content+padding+border+margin

2.2 display/position

display的值有
● block(元素表现为块级元素,有固定的宽高,独占一行)
● inline(元素表现为行内元素,不能设置宽高)
● inline-block(对外表现为行内元素,对内表现为块级元素)
position的值有:
● static (默认情况,存在文档流中)
● relative:(根据元素本身原来所处的位置偏移,不会改变布局的计算)
● absolute:(绝对定位,脱离文档流,不会对别的元素造成影响,相对的是父级最近的relative或者absolute定位元素)
● fixed:(绝对定位,脱离文档流,相对于的是 屏幕,这个是固定在一定的位置,但是absolute元素是离开相应的位置就看不见了)
position的层叠是按顺序层叠的,不过可以通过设置z-index来改变层叠的顺序,只有relative,absolute,fixed是可以设置z-index。

2.3 flexbox布局

flexbox布局即弹性盒子布局,他的特点是 盒子本来是并列的,只需要指定宽度。下面是一个经典的三栏布局的例子

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>CSS布局</title>
</head>
<style>
.container{
  height:200px;
  width:200px;
  display:flex;
}
  .left{
    background-color:red;
    flex:1;
  }
  .middle{
    background-color:yellow;
    flex:1;
  }
  .right{
    background-color:green;
    flex:1;
  }
</style>
<body>
  <div class="container">
    <div class="left"></div>
    <div class="middle"></div>
    <div class="right"></div>
  </div>
</body>
</html>

要是需要两边定宽,中间自适应的话,可以

.left{
  background-color:red;
  width:20px;
}
.middle{
  background-color:yellow;
  flex:1;
}
.right{
  background-color:green;
  width:20px;
}

缺点:就是flexbox布局方式浏览器的支持性不是很好,有些兼容性问题,但是是未来布局的趋势。

3. float布局:

float布局是各大网站用的最多的一种布局方式了,但是相对来说是比较复杂的。

  1. 什么是浮动呢? 浮动就是脱离文档流,但是不脱离文本流。
  2. 有什么特点呢?
    (1)对自身的影响:
    ● float元素是可以形成块的,如span元素,可以让行内元素拥有宽和高,因为块级元素就是有宽高的。
    ● 浮动元素的位置尽量是靠上 的
    ● 尽量是靠左(float:left)或者是靠右的(float:right),要是哪一行满足不了浮动元素的宽度要求,那么元素是往下掉的。
    (2)对兄弟元素的影响:
    ● 不影响其他块级元素的位置
    ● 影响其他块级元素的文本
    ● 上面贴非float元素
    ● 旁边贴float元素 或者边框
    (3)对父级元素的影响:
    ● 从布局上“消失”
    ● 高度塌陷
3.1 高度塌陷

什么是高度塌陷呢?

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>CSS布局</title>
  </head>
  <style>
    *{
      margin:0;
      padding:0;
    }
    .container{
      width:200px;
      background-color:red;
    }
    .left{
      background-color:yellow;
      float:left;
      height:50px;
      width:50px;
    }
    .right{
      background-color:yellow;
      float:right;
      height:50px;
      width:50px;
    }
  </style>
  <body>

    <div id="container">
    <span class="left">float</span>
    <span>我是字</span> 
      <span class="right">float</span>
    </div>
  </body>
</html>

从上面的图中 ,我们可以看到,float元素虽然包含在第一个container中,但是却超出了第一个container的范围,在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。
但是当子元素设置了浮动之后,子元素会完全脱离文档流,此时将会导致子元素无法撑开父元素的高度,那么父元素的高度就会塌陷。
解决的方案:
● 父元素设置overflow:auto 或者overflow:hidden
给父元素设置了之后,效果如下

那么给父元素添加一个伪类效果如何呢

.container::after{
  content:'',
  clear:both;
  display:block;
  visibilityhidden;
  height:0;
}
3.2 两栏布局

现在要搞清楚的是,为什么要用float去实现布局呢?黄红黄这是一个标准的三栏布局,其实并不是

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>CSS布局</title>
  </head>
  <style>
    *{
      margin:0;
      padding:0;
    }
    .container{
      width:400px;
      height:200px;
    }
    .left{
      background-color:yellow;
      float:left;
      height:100%;
      width:100px;
    }
    .right{
      background-color:red;
/*       float:right; */
      height:100%;
      margin-left:100px;
    }
    .container::after{
      content:'';
      display:block;
      visibility:hidden;
      clear:both;
    }
  </style>
  <body>

    <div id="container">
    <span class="left"></span>
      <span class="right"></span>
    </div>
  </body>
</html>

上面的代码中,最重要的是margin-left:100px;这一句 将浮动元素的位置让出来了,所以右边栏里面的元素是不会影响到浮动的div 的
这就是浮动布局思想;

3.3 三栏布局

三栏布局主要是思路就是 左边一个浮动元素,右边一个浮动元素,但是这里要注意,中间的元素是要写在最后面的,因为中间的元素假设有块级的话,会影响右边浮动元素的定位的。
因为浮动元素会把块级元素的位置腾出来,所以要把中间的元素放在最后

4. 响应式布局

4.1 meta标签

这个到底是什么
最简单的处理方式其实就是,加上一个meta标签

其中,width=device-width这一句话的意思就是让 页面的宽度等于屏幕的宽度

4.2 使用rem

rem指的就是 html元素font-size,html元素的font-size 默认的是16px 所以1rem=16px, 然后根据rem去算各个元素的宽高,然后去配合media query就可以实现自适应。

4.3 media query

css2允许用户根据特定的Media类型去定制样式,基本的语法是这样的,

@media screen and (max-width:360px){
  html{font-size:12px;}
}

意思就是:当屏幕的 宽度小于360px的时候html的字体的大小为12px
要值得注意的就是,范围大的要放在上面。

;