经典的两栏布局和三栏布局的几种简单的实现

一,三栏布局

1,两边栏宽度固定值,中间栏宽度自适应

(1)绝对定位法

【关键点】1,绝对定位从普通文档流中脱离出来,中间元素可以不用考虑左右定位元素占的位置

2,左右栏绝对定位到确定的位置上,(absolute,left,right)

3,中间栏左右外边距设置为左右栏的宽度,因此自身宽度就自适应的变成了窗口宽度-左右两边栏的宽度

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <style>
 5      html,body{
 6           margin:0;
 7           padding:0;
 8           height:100%;
 9      }
10      #left,#right{
11           background-color:yellow;
12           position:absolute;
13           top:0;
14           width:100px;
15           height:100%;
16      }
17      #left{
18           left:0;
19      }
20      #right{
21           right:0;
22      }
23      #center{
24           background-color:green;
25           height:100%;
26           margin:0 100px;
27      }
28 </style>
29 </head>
30 <body>
31 <div id="left">左边栏</div>
32 <div id="right">右边栏</div>
33 <div id="center">中间栏</div>
34 </body>
35 </html>

(2)浮动定位法

【关键点】与绝对定位类似,中间的自适应宽度是靠设置相对于窗口 的外边距来确定的,左右栏从文档流中脱离,浮动的各自位置

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <style>
 5      html,body{
 6           margin:0;
 7           padding:0;
 8           height:100%;
 9      }
10      #left,#right{
11           background-color:yellow;
12           width:100px;
13           height:100%;
14      }
15      #left{
16           float:left;
17      }
18      #right{
19           float:right;
20      }
21      #center{
22           background-color:green;
23           height:100%;
24           margin:0 100px;
25      }
26 </style>
27 </head>
28 <body>
29 <div id="left">左边栏</div>
30 <div id="right">右边栏</div>
31 <div id="center">中间栏</div>
32 </body>
33 </html>

(3)负外边距法

【关键点】1,中间栏由里外两层构成,外层撑起整个内容区域,内层进行中间栏的布局,设置内层的左右外边距给左右栏留出空间

2,左右栏浮动并设置负的外边距浮动到相应位置

3,中间栏先于左右栏定位(三个div的位置顺序一定是中间栏在前)

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <style>
 5 html,body{
 6      height:100%;
 7      margin:0;
 8      padding:0;
 9 }
10 #main{
11      margin:0;
12      padding:0;
13      width:100%;
14      height:100%;
15      float:left;
16 }
17 #inner{
18      margin:0 200px;
19      background-color:green;
20      height:100%;
21 }
22 #left,#right{
23      width:200px;
24      height:100%;
25      float:left;
26      background-color:#a0b3d6;
27 }
28 #left{
29      margin-left:-100%;
30 }
31 #right{
32      margin-left:-200px;
33 }
34 </style>
35 </head>
36 <body>
37 <div id="main">
38 <div id="inner">this is main content</div>
39 </div>
40 <div id="left">this is left sidebar content</div>
41 <div id="right">this is right siderbar content</div>
42 </body>
43 </html>

(4)使用flexbox属性

代码没有考虑一些低版本浏览器的兼容性,只做了一些简单的flex属性设置,但是效果很明显

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <style>
 5      html,body{
 6           margin:0;
 7           padding:0;
 8           height:100%;
 9      }
10      body{
11           display:flex;
12           align-items:stretch;
13      }
14      #left,#right{
15           background-color:yellow;
16           flex:0 100px;
17      }
18      #center{
19           background-color:green;
20           flex:1 auto;
21      }
22 </style>
23 </head>
24 <body>
25 <div id="left">左边栏</div>
26 <div id="center">中间栏</div>
27 <div id="right">右边栏</div>
28 </body>
29 </html>

2,三栏布局中间栏固定大小,两边栏自适应

(1)负margin法

【关键点】1,左右两栏宽度不固定,因此在外层设置宽度各位50%,此时内层只需要左外边距为中间宽度的一半就可以为中间留出固定的宽度,达到两边自适应的目的

2,设置三栏都为浮动

3,三栏放在一排正常显示,只需要将左右两栏的外层设置负外边距就行了

4,这时三个div的顺序应该是固定的

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <style>
 5 html,body{
 6      height:100%;
 7      margin:0;
 8      padding:0;
 9 }
10 #left,#right {
11      float: left;
12      margin: 0 0 0 -271px;
13      width: 50%;
14      height:100%;
15 }
16
17 #main {
18      width: 540px;
19      float: left;
20      background: green;
21      height:100%;
22 }
23 #left .inner,#right .inner {
24      margin: 0 0 0 271px;
25      background: orange;
26      height:100%;
27 }
28 </style>
29 </head>
30 <body>
31 <div id="left">
32 <div class="inner">this is left sidebar content</div>
33 </div>
34 <div id="main">this is main content</div>
35 <div id="right">
36 <div class="inner">this is right siderbar content</div>
37 </div>
38 </body>
39 </html>

(2)flexbox

<!DOCTYPE html>
<html>
<head>
<style>
     html,body{
          margin:0;
          padding:0;
          height:100%;
     }
     body{
          display:flex;
          align-items:stretch;
     }
     #left,#right{
          background-color:yellow;
          flex:1 auto;
     }
     #center{
          background-color:green;
          flex:0 500px;
     }
</style>
</head>
<body>
<div id="left">左边栏</div>
<div id="center">中间栏</div>
<div id="right">右边栏</div>
</body>
</html>

二,两栏布局,左边栏为固定宽度的目录栏,右边栏宽度自适应

(1)负margin法

【关键点】1、首先让左边栏浮动到自己的位置,已经确定了大小宽度

2,中间栏设置内外两层,外层宽度为100%,然后有一个左边栏宽度的负margin,这样就可以放下左边栏了

3,内层设置外边距为左边栏宽度,在确定的位置显示

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <style>
 5 html,body{
 6      height:100%;
 7      margin:0;
 8      padding:0;
 9 }
10 #left{
11      background: green;
12      float: left;
13      width: 200px;
14      height:100%;
15 }
16
17 #main {
18      width: 100%;
19      height:100%;
20      float: left;
21      margin:0 0 0 -200px;
22 }
23 #inner {
24      margin: 0 0 0 200px;
25      background: orange;
26      height:100%;
27 }
28 </style>
29 </head>
30 <body>
31 <div id="left">
32 <div class="inner">this is left sidebar content</div>
33 </div>
34 <div id="main">
35 <div id="inner">this is main content</div>
36 </div>
37 </body>
38 </html>

(2)绝对定位法

【关键点】1,左边绝对定位,右边就可以跟左边放在一排

2,右边通过设置外边距来决定自己的大小了

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <style>
 5 html,body{
 6      height:100%;
 7      margin:0;
 8      padding:0;
 9 }
10 #left{
11      background: green;
12      position:absolute;
13      width: 200px;
14      height:100%;
15      top:0;
16      left:0;
17 }
18
19 #main {
20      height:100%;
21      margin-left:200px;
22      background-color:purple;
23 }
24 </style>
25 </head>
26 <body>
27 <div id="left">
28 <div class="inner">this is left sidebar content</div>
29 </div>
30 <div id="main">this is the main content</div>
31 </body>
32 </html>

(3)flexbox

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <style>
 5      html,body{
 6           margin:0;
 7           padding:0;
 8           height:100%;
 9      }
10      body{
11           display:flex;
12           align-items:stretch;
13      }
14      #left{
15           background-color:yellow;
16           flex:0 200px;
17      }
18      #center{
19           background-color:green;
20           flex:1 auto;
21      }
22 </style>
23 </head>
24 <body>
25 <div id="left">左边栏</div>
26 <div id="center">中间栏</div>
27 </body>
28 </html>

【最后,关于负外边距:就相当于一个透明的相纸折在了元素的内容上,其他的元素如果在负外边距上是可以把外边距的部分遮盖掉的,但是如果元素有内容并没有被遮盖,还是可以显示】

时间: 2024-10-21 17:13:37

经典的两栏布局和三栏布局的几种简单的实现的相关文章

div+css两列布局与三列布局

一.两列布局: 1.左边定宽,右边自适应. 方法一:采用position:absollute;并设置margin-left的值. 例: #left{ position:absolute; width:300px; top:0px; left:0px; background:#F00; } #right{ background:#0FC; margin-left:300px; } <div id="left">左边定宽</div> <div id="

CSS 常见两列布局、三列布局

一.两列布局: 方法一:采用position:absollute;并设置margin-left的值. #left{ position:absolute; width:300px; top:0px; left:0px; background:#F00; } #right{ background:#0FC; margin-left:300px; } <div id="left">左边定宽</div> <div id="right">右

慕课笔记利用css进行布局【三列布局】

三个div中间自适应,两侧固定大小 <html> <head> <title>三列布局</title> <style type="text/css"> body{margin:0;padding:0;text-align:center} /*三列的布局样式*/ /*position:absolute定位*/ .left2{width:200px;height:500px;background:#f0f;position:abs

CSS实现左右布局,三栏布局

css的两栏布局是比较经典的布局之一,一般是左(右)边定宽,右(左)边自适应. 实现的方式也比较多,今天主要介绍3种. 1.浮动方法,使第一个div浮动起来脱离文档流,下面的div自动向上 <body> <div class="left">左边</div> <div class="right">右边</div></body> .left { width: 200px; height: 400px

圣杯布局(三栏布局)

圣杯布局也就是:左右固定宽度,中间自适应的布局样式 HTML布局: 注意:一定是中间部分写在最上面 <header><h4>header内容</h4></header> <div class="container"> <div class="middle"><h4>中间弹性</h4></div> <div class="left"&g

两列布局、三列布局以及等高布局

在了解布局之前,需要先掌握BFC.margin折叠.这里简单对这两个概念做介绍. 1.BFC(block formatting contents),块级格式上下文. 产生条件: 跟元素: 浮动或者定位包括absolute和fixed: overflow不为visiable: display为inline-block, table-cell, table-caption, flex, inline-flex. 特性: 内部的Box会在垂直方向,一个接一个地放置. Box垂直方向的距离由margin

经典三栏布局之圣杯、双飞翼、弹性布局

经典三栏布局之圣杯.双飞翼.弹性布局 圣杯布局和双飞翼布局是前端工程师需要掌握的布局方式,两者功能相同,都是为了实现两侧宽度固定,中间宽度自适应的布局方式,此外,使用新增的flex布局,可以使布局更加简单. 双飞翼布局和圣杯布局虽然实现方式有所差异,但是基本上都遵循了以下几点: 两侧宽度固定,中间宽度自适应 中间结构在DOM上优先,以便于优先渲染 下面依次介绍圣杯布局.双飞翼布局.弹性布局实现三栏布局 圣杯布局 一.搭建主体结构 我们先搭建主体框架,将主体结构写出来 <div class="

转:CSS布局:Float布局过程与老生常谈的三栏布局

使用CSS布局网页,那是前端的基本功了,什么两栏布局,三栏布局,那也是前端面试的基本题了.一般来说,可以使用CSSposition属性进行布局,或者使用CSSfloat属性布局.前者适合布局首页,因为首页上的内容往往可以完全控制.后者适合布局模板,模板中填充的内容你没法控制——比如,在编辑wordpress模板时,你肯定没法考虑每篇博文的长度.这篇博文,就是总结一下怎样使用CSS中的float属性进行布局,其实网上有很多讨论这个话题的文章了,但我觉得都没说到点子上.那就来老生常谈一次吧,CSS之

三栏结构布局技巧,顶了

CSS 七种三栏布局技巧 三栏布局,顾名思义就是两边固定,中间自适应,即左边商品导航和右边导航固定宽度,中间的主要内容随浏览器宽度自适应. 下面围绕的这样的目的,即左右模块固定宽度,中间模块随浏览器变化自适应,想要完成的最终效果如下图所示: 红色和蓝色宽度固定,绿色宽度自适应,下面七种方法实现的最终效果跟这个差不多,可能会稍有不同. 下面七种技巧各有千秋,在开发中可以根据实际需求选择适合自己的方法进行编码. 1. 流体布局 <!DOCTYPE html><html lang="