首页 > 网站优化 > css

CSS常见布局 实现布局的常用方法 单列布局

发布时间:2019-8-22 17:33

说起布局其实就和盖房子的道理一样,你首先要盖好房子的模型(规划好页面的布局),房子的雏形盖好后就是往房子里面布置家具了(在布局里面添加东西),这样,房子盖好后不论你往里面添加什么家具也不能影响房子(杠精请坐下),布局也一样,布局完成后,只需要在布局的容器里面添加更加细化的东西就行了。切忌边写内容边布局,这可能因为内容导致布局的改写,费时费力、得不偿失

实现布局的常用方法

1. float

Float 的设计初衷仅仅是为了实现文字环绕效果,所以了解了 Float的设计初衷,我们就能明白 Float的特有的行为表现了

包裹

这种特性称之为 BFC(Block Formatting Context——块级格式化上下文), 具有这种包裹性的元素有

  1. display:inline-block / table-cell

  2. position: absolute/fixed/sticky

  3. overflow:hidden/scroll

破坏

如果浮动元素是某一个元素的父元素,那么子元素就会溢出父元素,而父元素将会塌陷

2. 定位

优点:

缺点:

如果可以的情况下,轻易不要使用定位进行布局,复杂的层级关系会导致你的定位越来越乱,难以维护。

3. Table

优点:

缺点:

4. Grid

  1. Grid 适用于布局大画面。它们使页面的布局变得非常容易,甚至可以处理一些不规则和非对称的设计。

  2. Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局

5. Flex

  1. Flex 非常适合对齐元素内的内容。你可以使用 Flex 来定位设计上一些较小的细节。

  2. Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。

  3. 不需要进行浏览器兼容测试

  4. 超简洁语法、响应式布局

  5. 兼容性较差

CSS常见布局

单列布局

常见的单例布局有两种

特点:定宽、水平居中

两列布局

特点:侧栏固定宽度(如广告等)、主栏自适应

实现方法有很多,这里只举一种方法(以左侧栏固定为例)

DOM

<div class="main">  <!--左侧-->
  <div class="left"></div>
  <!--右侧-->
  <div class="right"></div></div>

CSS

// 页面.main{  display: flex;  height: 100vh;  // 左侧
  .left{    background: red;    width: 300px;
  }  // 右侧
  .right{    background: yellow;    flex: 1 1 auto;
  }
}

三列布局

实现方法有很多,这里只举一种方法(以第一个为例)

DOM

<div class="box">  <!--主要内容-->
  <div class="middle"></div>
  <!--左侧边栏-->
  <div class="left"></div>
  <!--右侧边栏-->
  <div class="right"></div></div>

CSS

// 页面.box{  display: flex;  height: 100vh;  min-width: 700px;  // 左侧边栏
  .left{    order: 0;    background: red;    width: 300px;
  }  // 主要内容
  .middle{    order: 1;    background: pink;    flex: 1 1 auto;
  }  // 右侧边栏
  .right{    order: 2;    background: yellow;    width: 300px;
  }
}

注意:这里我们把 <div class="middle"></div> 放在了最上方,因为DOM是按顺序渲染的,所以优先加载主要内容,但这会导致位置的先后顺序错乱,这里可以用 flex 布局的 order 属性来改变位置的先后顺序

粘连布局

特点:

第一种

DOM

<div class="box">  <!--内容外框-->
  <div class="middle">
    <!--主要内容-->
    <div class="main"></div>
  </div>
  <!--底部-->
  <div class="footer"></div></div>

CSS

// 页面.box{  height: 100%;  // 内容外框
  .middle{    min-height: 100%;    // 主要内容
    .main{      padding-bottom: 50px;      background: pink;      height: 300px;       // 高度应该是内容的高度(这里只是展示用)
    }
  }  // 底部
  .footer{    background: yellow;    height: 50px;    margin-top: -50px;
  }
}

第二种(flex)

DOM

<div class="box">  <!--内容外框-->
  <div class="middle">
    <!--主要内容-->
    <div class="main"></div>
  </div>
  <!--底部-->
  <div class="footer"></div></div>

CSS

// 页面.box{  display: flex;  flex-direction: column;  // 内容外框
  .middle{    flex-basis: 100vh;      // min-height: 100vh;也可以
    // 主要内容
    .main{      padding-bottom: 50px;      background: pink;      height: 30vh;         // 高度应该是内容的高度(这里只是展示用)
    }
  }  // 底部
  .footer{    background: yellow;    height: 50px;    margin-top: -50px;
  }
}

这两种的方法区别不大,主要看你喜欢用那个(~ ̄▽ ̄)~

多栏布局(Multi-Columns Layout)

多栏布局是CSS3新增布局中的一种,尽管它很低调。

我们可以用它实现分栏的效果

DOM

<div class="box">  <div class="middle">
    丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?(何似 一作:何时;又恐 一作:惟 / 唯恐)转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。  </div></div>

CSS

// 页面.middle{ column-count: 3; column-rule: dotted; column-gap: 50px; width: 700px; margin: 30px auto
}

也可以用它来实现古书的排版

DOM

<div class="box">  <div class="middle">
    丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?(何似 一作:何时;又恐 一作:惟 / 唯恐)转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。  </div></div>

CSS

// 页面.middle{  width: 300px;  height: 200px;  margin: 100px auto;  columns: 10;  column-rule: 1px dashed rgb(213,213,213);  direction: rtl;  word-wrap: break-word;  text-align: center;
}

瀑布流

使用css的multi-column为例来实现

DOM

<div id="Falls">
  <!--每一个模块-->
  <div class="item">
    <!--图片-->
    <img class="item_img" src="地址"/>
    <!--图片信息-->
    <div class="image_info">努力保持一个好心情</div>
  </div>
  ...</div>

CSS

// 页面#Falls{  margin: 0 auto;  column-count: 5;  column-width: 240px;  column-gap: 20px;  // 每一个模块的样式
  .item{    break-inside: avoid;    // 防止多列布局,分页媒体和多区域上下文中的意外中断
    margin-bottom: 10px;    background: #fff;    border: 1px solid #ccc;    // 图片的样式
    .item_img{      width: 100%;      vertical-align: middle;
    }    // 图片信息
    .image_info{      padding: 5px 10px;      text-align: center;
    }
  }
}


标签:[!--infotagslink--]

您可能感兴趣的文章: