Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CSS 7:网页布局(传统布局,flex布局,布局套路)

CSS 7:网页布局(传统布局,flex布局,布局套路)

作者头像
代码之风
发布于 2019-03-14 02:04:13
发布于 2019-03-14 02:04:13
4.4K01
代码可运行
举报
文章被收录于专栏:马涛涛的专栏马涛涛的专栏
运行总次数:1
代码可运行

传统布局

一栏、两栏、三栏布局

一栏布局

特点:页面内容居中,宽度固定

实现方式: 定宽 + 水平居中

width: 1000px; //或 max-width: 1000px; margin-left: auto; margin-right: auto; 演示地址范例

注意 max-width和width的区别:使用固定width的时候,如果浏览器缩小到比设置的宽度要小,那么会出现滚动条(不允许宽度小于width)。设置为max-width之后:缩小浏览器,如果浏览器比max-width要小,那么宽度就是浏览器的宽度,既最大是那么大,可以不那么大。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
  .layout{
  /*   width: 960px; */
    max-width: 960px;
    margin: 0 auto;
  }
  #header{
    height: 60px;
    background: red;
  }
  #content{
    height: 400px;
    background: blue;
  }
  #footer{
    height: 50px;
    background: yellow;
  }
</style>
<div class="layout">
  <div id="header">头部</div>
  <div id="content">内容</div>
  <div id="footer">尾部</div>
</div>

也可有如下写法,省标签,便于控制局部 ,主要方法是单独写一个layout类,需要控制布局的时候,加上这个类就可以了 范例演示地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
  .layout{
    width: 960px;
    margin: 0 auto;
  }
  #header{
    height: 60px;
    background: red;
  }
  #content{
    height: 400px;
    background: blue;
  }
  #footer{
    height: 50px;
    background: yellow;
  }
</style>
<div id="header"  class="layout">头部</div>
<div id="content" class="layout">内容</div>
<div id="footer" class="layout">尾部</div>

以下是针对通栏(既上下栏是满width)的场景,给通栏加背景色 演示地址 http://js.jirengu.com/zira/ed...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
  .layout{
    width: 960px;
    margin: 0 auto;
  }
  #header{
    height: 60px;
    background: red;
  }
  #content{
    height: 400px;
    background: blue;
  }
  #footer{
    height: 50px;
    background: yellow;
  }
</style>
<div id="header">
  <div class="layout">头部</div>
</div>
<div id="content" class="layout">内容</div>
<div id="footer">
  <div class="layout">尾部</div>
</div>

查看范例效果,能发现不完美的地方吗? 对了,滚动条 bug

因为layout是固定宽度,而有背景色的上下通栏是自适应的屏幕宽度,所以当小于.layout的宽度的时候,会出现滚动条。

下面我们进行优化,给 body (或者layout)设置min-width 去掉滚动背景色 bug

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
  .layout{
    width: 960px;
    margin: 0 auto;
  }
  body{
    min-width: 960px;
  }
  #header{
    height: 60px;
    background: red;
  }
  #content{
    height: 400px;
    background: blue;
  }
  #footer{
    height: 50px;
    background: yellow;
  }
</style>
<div id="header">
  <div class="layout">头部</div>
</div>
<div id="content" class="layout">内容</div>
<div id="footer">
  <div class="layout">尾部</div>
</div>

两栏布局

两栏布局 特点: 一栏固定宽度, 另外一栏自适应撑满

如何实现 浮动元素 + 普通元素margin 范例 http://js.jirengu.com/loxe/ed...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <style>
    #content:after{
      content: '';
      display: block;
      clear: both;
    }
    .aside{
      width: 200px;
      height: 500px;
      background: yellow;
      float: left;//
    }
    .main{
      margin-left: 210px;//
      height: 400px;
      background: red;
    }

    #footer{
      background: #ccc;
    }

  </style>
  <div id="content">
    <div class="aside">aside</div>
    <div class="main">content</div>
  </div>
  <div id="footer">footer</div>

如果侧边栏在右边呢?

侧边栏在右 谨记页面元素的渲染顺序 main 在下面 范例 http://js.jirengu.com/qaca/edit

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <style>
    #content:after{
      content: '';
      display: block;
      clear: both;
    }
    .aside{
      width: 200px;
      height: 500px;
      background: yellow;
      float: right;//
    }
    .main{
      margin-right: 210px;//
      height: 400px;
      background: red;
    }

    #footer{
      background: #ccc;
    }

  </style>

  <div id="content">
    <div class="aside">aside</div>
    <div class="main">content</div>
  </div>
  <div id="footer">footer</div>

三栏布局

特点: 左右两栏固定宽度, 中间主要区块自适应撑满

如何实现 范例 http://js.jirengu.com/jige

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    #content:after{
      content: '';
      display: block;
      clear: both;
    }
    .menu{
      width: 100px;
      height: 500px;
      background: pink;
      float: left;
    }
    .aside{
      width: 200px;
      height: 500px;
      background: yellow;
      float: right;
    }
    .main{
      margin-left: 110px; /*为什么要加margin-left*/
      margin-right: 210px;
      height: 400px;
      background: red;
    }

    #footer{
      background: #ccc;
    }

  <div id="content">
    <!-- 为什么不是main在前面,因为浮动的特性 -->
    <div class="menu">aside</div>
    <div class="aside">aside</div>
    <div class="main">content</div>
  </div>
  <div id="footer">footer</div>

圣杯布局

利用浮动和负边距的特性实现的两(三)栏布局。圣杯布局双飞翼布局 是老的布局方式,2012年以前流行,现在已不流行,但是面试可能会考察到,所以记录一下

why it?

  • 是三列布局,两边固定宽度,中间自适应
  • 中间内容元素在 dom 元素次序中优先位置

按照注释编号,一行行实现观察效果 范例

http://js.jirengu.com/poya/1/...

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <style>
    #content:after{
      content: '';        /*8*/
      display: block;     /*8*/
      clear: both;        /*8*/
    }
    #content{
      padding-left: 100px;  /*5*/
      padding-right: 150px; /*5*/
    }
    .aside, .main, .extra{
      float: left;         /*2*/
    }

    .aside{
      width: 100px;        /*1*/
      height: 300px;       /*1*/
      background: red;     /*1*/

      margin-left: -100%;  /*4*/
      position: relative;  /*6*/
      left: -100px;        /*6*/
    }
    .extra{
      width: 150px;        /*1*/
      height: 300px;       /*1*/
      background: yellow;  /*1*/

      margin-left: -150px; /*5*/
      position: relative;  /*7*/
      left: 150px;         /*7*/

    }
    .main{
      height: 350px;       /*1*/
      background: blue;    /*1*/

      width: 100%;         /*3*/
    }

  </style>

  <div id="content">
    <div class="main">main</div>
    <div class="aside">aside</div>
    <div class="extra">extra</div>
  </div>

缺点:.mian的最小宽度不能小于.aside的宽度

双飞翼布局

双飞翼布局 按照注释编号,一行行实现观察效果 范例 http://js.jirengu.com/fevifum...

解决了圣杯布局的缺点,多写了一个wrap。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <style>

    #content:after{
      content: '';        /*8*/
      display: block;     /*8*/
      clear: both;        /*8*/
    }
    #content{

    }
    .aside, .main, .extra{
      float: left;         /*2*/
    }

    .aside{
      width: 100px;        /*1*/
      height: 300px;       /*1*/
      background: red;     /*1*/

      margin-left: -100%;  /*4*/

    }
    .extra{
      width: 150px;        /*1*/
      height: 300px;       /*1*/
      background: yellow;  /*1*/

      margin-left: -150px; /*5*/


    }
    .main{
      /* background: blue;  */   /*第1步添加,第7步注释掉*/
      /* height: 350px;  */      /*第1步添加,第7步注释掉*/

      width: 100%;         /*3*/
    }

    .wrap{
      margin-left: 100px;  /*6*/
      margin-right: 150px; /*6*/
      background: blue;    /*7*/
      height: 350px;       /*7*/

    }

  </style>

  <div id="content">
    <div class="main">
      <div class="wrap">main</div>
    </div>
    <div class="aside">aside</div>
    <div class="extra">extra</div>
  </div>

这两个布局都比较老,用了浮动和负边距的特性。面试可能会问到。

如果用flex实现三栏布局,且main在dom次序最上面,那么只需要contain使用flex布局,mainflex:1;order:2两边固定宽度即可

使用flex写几个简单布局

1.flex手机页面基本布局

main部分设置了overflow:auto之后,出现滚动条,header和下方按钮固定 代码演示地址:http://js.jirengu.com/saqulus...

2.flex产品列表布局

例如九个产品,每行三个展示

演示地址:http://js.jirengu.com/xecuqam...

3.flex PC布局(三栏布局,左右两栏定宽,中间内容自适应)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<header>header</header>
  <div class="content">
    <div class="aside">aside固定宽度</div>
    <div class="main">main自动填充宽度</div>
    <div class="nav">nav固定宽度</div>
  </div>
<footer>footer</footer>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
header,footer{
  height:100px;
  background:#ccc;
}
.content{
  display:flex;//
}
.content .aside{
  width:250px;
  background:red;
}
.content .main{
  height:500px;
  flex:1;//
}
.content .nav{
  width:250px;
  background:green;
}

flex:1,自动填充宽度。

4.flex完美居中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.content{
  display:flex;
  justify-content:center;
  align-items:center;
}

不管里面的子元素宽高是多少,都在垂直和水平方向居中。

布局的套路

口诀 float:

  • 儿子全加 float: left (right)
  • 老子加 .clearfix

在做平均布局的时候,如果左右宽度不够,可以用负margin。例如margin: 0 -4px; flex:

  • 老子加 display: flex
  • 老子加 justify-content: space-between;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.clearfix:after{
    content: '';
    display: block;
    clear: both;
}
.clearfix{
    zoom: 1;
}

原则

  • 不到万不得已,不要写死 widthheight
  • 尽量用高级语法,如 calcflex
  • 如果是 IE,就全部写死

浮动布局套路

套路:

  • 儿子全加 float: left (right)
  • 老子加 .clearfix
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.clearfix:after{
content: '';
display: block;
clear: both;
}
.clearfix{
zoom: 1;
}

举例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="father clearfix">
  <div class="child1 child">儿子1</div>
  <div class="child2 child">儿子3</div>
</div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.child{
  float:left;
}
.clearfix::after{
  content:'';
  display:block;
  clear:both;
}

.father{
  border:1px solid black;
}
.child1{
  width:30%;//
  background:red;
}
.child2{
   background:yellow;
  width:70%;//
}

可以看到不管如何拉长,child1和child2永远占30%和70%。且两个child DIV只用来布局,然后内容写在里面,如果要加padding等边距,就得在里面再写一个div,child相当于是一个套在外面的wrapper,用来布局

演示地址:http://js.jirengu.com/socoget...

做布局的时候,要分清布局块内容块!布局块DIV只用来布局,内容快DIV只用来添加网页内容。bootstrop就用栅格系统做布局块,内容块是自己设计的独立元素。

例子:简单的头部导航布局

演示地址:http://js.jirengu.com/wabuluz...

举例使用:用float做平均布局

宽800的div上显示8张图,每列四张。 演示地址: http://js.jirengu.com/casodig...

加一个wrapper的作用是使用负margin扩大8像素,为了不与外面的pics冲突(pics用来布局,居中)所以再包裹一个div。又一次显示出布局块内容块的区别。

如果使用flex布局,只需要三行代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diaplay:flex;
flex-wraP:wrap;
justify-content:space-between;

自动平均布局。

使用calc

width是194px,定死的。如果不自己算picture的宽度 那么就可以使用 width:calc(25% - 8px)

左右不一样比例的布局

1:3使用float:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="father clearfix">
  <div class="child left"></div>
  <div class="child right"></div>
</div>

CSS:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.clearfix::after{
  content:'';
  display:block;
  clear:both;
}

.father{
  width:500px;
  background: #red;
  border:1px solid red;
}
.child{
  height:200px;
  float: left;
}
.left{
  width:33.33333%;
  background: #ccc;
}
.right{
  width:66.66666%;
  background: #777;
}

如果想在1:3的块之间加空隙,那么这个已经成比例的布局块不要动,在里面加div,然后里面的div加上margin-right就行了。还有一种方法就是width:cacl(33.3333% - 20px).

使用flex:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="father2">
  <div class="child2 left2"></div>
  <div class="child2 right2"></div>
</div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.father2{
  width:500px;
  border:1px solid red;
  display:flex;
}
.child2{
  height:200px;
}
.left2{
  flex:1;//
  background: #ccc;
  border:1px solid green;
}
.right2{
  flex:0 0 33.3333%;//
  background: #777;
  border:1px solid blue;
}

关键在于:

flex:1自动占满剩余空间! flex:0 0 33.3333%固定宽度为33.3333%!

或者也可以直接父亲display:flex,儿子1width:cacl(33.3333% - 20px),儿子2width:cacl(66.6666%)

演示地址: http://js.jirengu.com/qovefuw...

阮一峰的flex布局实例教程: https://cloud.tencent.com/developer/article/1095848

PC网页转成响应式的手机布局

在需要修改的地方加上媒体查询,然后修改相关CSS。主要需要修改的是显示的宽度width:auto,直到左右不能滑动为止。

请看我的博客,媒体查询CSS5:移动端页面(响应式)

图片处理技巧

为了防止图片收缩,尽量不要使用img标签,使用div标签然后使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
background:transparent url('xxx') no-repeat center;
background-size:cover;

尽量完整显示图片

练习

分别用float和flex实现左右布局

如图:

float: http://js.jirengu.com/goqebat... flex: http://js.jirengu.com/folonow...

做一个平均布局

请打开这个 jsbin,完善代码, 要求用 float + 负 margin 做一个平均布局

演示地址: http://js.jirengu.com/jaxepij...

把上面的布局用 flex 实现 http://js.jirengu.com/huyihim...

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
css常用布局
执行结果链接描述 在header 和footer上再包裹一层div,在外层的div上添加背景颜色,设置内层layout上设置左右margin:auto,就出现了通栏的效果。实际上layout占据的位置是固定的,如下图border框出的位置。
bamboo
2019/01/29
1.3K0
css常用布局
最全的常见css布局
对于第一种,先通过对 header,content,footer 统一设置 width:1000px;或者 max-width:1000px(这两者的区别是当屏幕小于 1000px 时,前者会出现滚动条,后者则不会,显示出实际宽度);然后设置 margin:auto 实现居中即可得到。
grain先森
2019/03/29
1.9K0
最全的常见css布局
css布局使用
目录 常用居中 垂直居中 水平居中 垂直水平居中 单列布局 双列&三列布局 ---- 常用居中 垂直居中 单行文本垂直居中 <div class="parent"> <div class="child">child</div> </div> .parent { line-height: 200px; } 图片垂直居中 <div class="parent"> ![](image.png) </div> .parent { line-height: 200px; } .par
听城
2018/04/27
2.2K0
10·灵魂前端工程师养成-CSS布局(上)
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/10/31
4900
10·灵魂前端工程师养成-CSS布局(上)
回顾div+css几种经典布局
什么是三列布局 经典的三栏布局:左右量栏固定,中间宽度自适应 可以利用浮动,定位,fiex布局,gird布局等方法来实现 以下是几种可以实现三列布局的方法,各有优缺点
不愿意做鱼的小鲸鱼
2022/09/24
2.1K0
回顾div+css几种经典布局
css精髓:这些布局你都学废了吗?
前言 最近忙里偷闲,给自己加油充电的时候,发现自己脑海中布局这块非常的凌乱混杂,于是花了一些时间将一些常用的布局及其实现方法整理梳理了出来,在这里,分享给大家。 单列布局
马克社区
2022/03/29
1.2K0
css精髓:这些布局你都学废了吗?
几种常见的 CSS 布局
其中实现三栏布局有多种方式,本文着重介绍圣杯布局和双飞翼布局。另外几种可以猛戳实现三栏布局的几种方法
夜尽天明
2019/08/21
1.1K0
几种常见的 CSS 布局
CSS 基础系列:常见布局方式
给 header、content、footer 设置相同的 width 或者 max-width(显示的宽度都一样,但是前者内容过长会溢出,后者会换行),再设置 margin 达到水平居中。
Chor
2019/11/07
2.1K0
【Web前端】CSS传统布局方法(补充)
开发技术不断演进,布局方式也经历了多个阶段的变革。从最初的基于表格布局到 CSS 的浮动布局,再到今天的弹性盒(Flexbox)与 CSS Grid 网格布局,每一种布局方式都有其独特的背景和解决特定问题的优势。
一条晒干的咸鱼
2024/11/19
1.5K0
【Web前端】CSS传统布局方法(补充)
CSS常用布局方式
布局是CSS中一个很重要的部分,也是最不好处理的一部分,其他诸如字体大小、颜色等等都是很容易的。总结一下使用过的CSS常用布局,包括水平居中、垂直居中、单列布局、多列布局等,以及flex布局,希望能给前端同学一些帮助。
Javanx
2019/09/04
8810
CSS常用布局方式
CSS布局(一)
只需要让header,footer充满整个屏幕,header的内容区、foooter的内容区,content设置一样的宽度,然后都设置 margin: 0 auto实现居中即可。
赤蓝紫
2023/03/11
1.5K0
CSS布局(一)
实例详解:Flex布局(二)
在之前的一篇文章:详解CSS的Flex布局中介绍了CSS的Flex布局的基本知识,包括flex-container的6个属性,以及flex-item的6个属性。同时也提到过,通过使用Flex布局,可以很优雅地解决很多CSS布局问题。本文将通过三个简单的实例,实际应用上篇文章的基础理论知识,展示下Flex布局是如何解决CSS布局问题。
前端林子
2018/12/15
2.8K5
实例详解:Flex布局(二)
一文搞定各类前端常见布局方式
缺点:若子元素脱离文档流,会导致 margin 失效,如 float、absolute、fixed
CS逍遥剑仙
2022/08/13
2.3K0
前端学习笔记之CSS网页布局 CSS网页布局
  1、浮动流只有一种排版方式,就是水平排版,它只能设置某个元素左对齐或者右对齐,没有居中对齐,也就是没有center这个取值
Jetpropelledsnake21
2019/02/15
5.2K0
CSS布局--圣杯布局和双飞翼布局以及使用Flex实现圣杯布局
我曾一度觉得总写css的前端很low,有了这种思想以后我便远离网页布局,H5的工作更不想接,沉迷于页面逻辑和封装组件。直到最近我面试,面试官说我css3理解的不熟,我起初很不屑,但后来静下来反省了一下并不是我不熟,只是我开始瞧不上网页制作这种工作了,问我css问题时,我感觉就像是再问一个老粉刷匠这片墙面要从哪里刷起,从哪里刷不行 ?这有什么决定性的问题吗 ? 说的有点多,其实写这边文章的主要目的还是想告诉自己,不要瞧不起某一门技术,技术有高低,但不代表学css的人的技术就要比学js的智商低,术业有专攻,心态要自己掌握,不要受外界的影响。
yuezhongbao
2019/02/26
2K0
网页布局基础
1、CSS的三种定位机制 CSS 规定的定位机制有三种,分别是: 标准文档流(Normal flow): 特点:从上到下,从左到右,输出文档内容。由块级元素(块级元素特点:从左到右撑满页面,独占一行,触碰到页面边缘时,会自动换行)和行级元素(块级元素特点: 在同一行内显示,不会改变HTML文档结构 )组成。 浮动(Floats) 绝对定位(Absolute positioning) 言下之意就是网页布局和元素的定位都离不开这三种机制。 2、什么是W3C标准 W3C标准,是由万维网联盟制定的一系列标准,
小胖
2018/06/27
2.1K0
web前端面试中10个关于css高频面试题,你都会吗?
BFC(Block Formatting Context),块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响。
coder_koala
2019/07/30
3K0
圣杯布局、双飞翼布局、Flex布局和绝对定位布局的几种经典布局的具体实现示例
题目要求:针对如下DOM结构,编写CSS,实现三栏水平布局,其中left、right分别位于左右两侧,left宽度为200px,right宽度为300px,main处在中间,宽度自适应。 要求:允许增加额外的DOM节点,但不能修改现有节点顺序。
全栈程序员站长
2022/09/07
1.3K0
​day010:CSS如何进行圣杯布局
这种float布局是最难理解的,主要是浮动后的负margin操作,这里重点强调一下。
用户3806669
2021/03/11
3990
CSS布局(五) 网页布局方式
网页实质是块与块之间的位置,块挨着块,块嵌套块,块叠着块。 三种关系:相邻,嵌套,重叠。 下面介绍网页布局的常用几种方式 1.一列布局: 一般都是固定的宽高,设置margin : 0 auto来水平居
柴小智
2018/04/10
1.9K0
CSS布局(五) 网页布局方式
相关推荐
css常用布局
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验