【CSS】 布局之多列等高

这两天看了不少文章,对于css布局多了一些理解,现在来总结下。



我们来写一个最普遍的Top、Left、Content、Right、Foot布局。

第一步:自然是写一个坯子

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 2 <html>
 3     <head>
 4         <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 5         <title>Css布局</title>
 6     </head>
 7     <body>
 8         <div id="parents">
 9            <div id="top">这是Top!</div>
10            <div id="main">
11                   <div id="left">这是Left!</div>
12                <div id="content">这是Content!</div>
13                <div id="right">这是Right!</div>
14              </div>
15            <div id="foot">这是Foot!</div>
16         </div>
17     </body>
18 </html>

效果:

第二步: 我们给这些加上背景色,并将整个parents居中

 1 <style type="text/css">
 2     * {
 3     margin: 0;
 4     padding: 0;
 5     text-Align: center;
 6     }
 7     #parents {
 8         width: 600px;
 9         border: 1px solid;
10         margin: 100px auto 0 auto;
11     }
12     #top {
13         background: #cc00cc;
14      }
15     #left {
16         background: #00cc00;
17     }
18     #content {
19         background: #cccccc;
20     }
21     #right {
22         background: #0000cc;
23     }
24     #foot {
25         background: #cccc00;
26     }
27 </style>

效果:

我们给top和foot设置100的高度,并将left和content向左浮动,right向右浮动。

 1 <style type="text/css">
 2     * {
 3       margin: 0;
 4        padding: 0;
 5        text-Align: center;
 6     }
 7     #parents {
 8        width: 600px;
 9        border: 1px solid;
10        margin: 100px auto 0 auto;
11      }
12     #top {
13        background: #cc00cc;
14        height: 100px;
15     }
16     #left {
17        background: #00cc00;
18        float: left;
19     }
20     #content {
21        background: #cccccc;
22        float: left;
23     }
24     #right {
25        background: #0000cc;
26        float: right;
27     }
28     #foot {
29        background: #cccc00;
30        height: 100px;
31     }
32 </style>

效果:

貌似有点不对,没事。把foot给clear一下就可以了!

1 #foot {
2     background: #cccc00;
3     height: 100px;
4     clear: both;
5 }

效果:

我们给left、content、right分别设置宽度100px、400px、100px。

 1 #left {
 2     background: #00cc00;
 3     float: left;
 4     width: 100px;
 5 }
 6 #content {
 7     background: #cccccc;
 8     float: left;
 9     width: 400px;
10 }
11 #right {
12     background: #0000cc;
13     float: right;
14     width: 100px;
15 }

效果:

看起来貌似大功告成!

不过这里的设置还有一个大问题,在网页布局中,中间的left、content、right是根据实际需要添删内容的,而各列高度很多时候都不一样。比如我们设置left的高度为100px。

1 #left {
2     background: #00cc00;
3     float: left;
4     width: 100px;
5     height: 100px;
6 }

效果:

我们看到,当其中一个高度发生变化时,其余两者并没有随之改变,这样布局就出现了一个很大的漏洞。

如何使中间层的三者在其中随意一个高度发生变化时,依旧能保持三者高度一致呢?

这里就牵涉到一个负边距的使用技巧了。

这个方法称之为padding补偿法

  首先把列的padding-bottom设为一个足够大的值,再把列的margin-bottom设一个与前面的padding-bottom的正值相抵消的负值,父容器设置超出隐藏,这样子父容器的高度就还是它里面的列没有设定padding-bottom时的高度,当它里面的任一列高度增加了,则父容器的高度被撑到它里面最高那列的高度,其他比这列矮的列则会用它们的padding-bottom来补偿这部分高度差。因为背景是可以用在padding占用的空间里的,而且边框也是跟随padding变化的,这样就成功的使得三者列高最起码看起来是等高的。这样也就满足了我们的需求。

 1 #left {
 2     background: #00cc00;
 3     float: left;
 4     width: 100px;
 5     height: 100px;
 6     margin-bottom: -2000px;
 7     padding-bottom: 2000px;
 8 }
 9 #content {
10     background: #cccccc;
11     float: left;
12     width: 400px;
13     margin-bottom: -2000px;
14     padding-bottom: 2000px;
15 }
16 #right {
17     background: #0000cc;
18     loat: right;
19     width: 100px;
20     margin-bottom: -2000px;
21     padding-bottom: 2000px;
22 }

效果:

现在产生了一个问题,高度溢出了。

我们可以对其父元素配置一个overflow: hidden来对溢出部分进行修剪。

1 #main {
2     overflow: hidden;
3 }

这样就大功告成了:

此刻,我们给content添加内容改变他的高度。

1 <div id="content">这是Content!<br><br><br>打算打算打<br><br><br>dwdoahdoa<br><br>的味道</div>

效果:

我们看到,当content的高度发生变化时,left和right的高度随之改变,这就是多列等高的奥秘。




最后附上完整代码:

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 2 <html>
 3     <head>
 4         <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 5         <title>PE Layout Example 1</title>
 6         <style type="text/css">
 7             * {
 8                 margin: 0;
 9                 padding: 0;
10                 text-Align: center;
11             }
12             #parents {
13                 width: 600px;
14                 border: 1px solid;
15                 margin: 100px auto 0 auto;
16             }
17             #top {
18                 background: #cc00cc;
19                 height: 100px;
20             }
21             #main {
22                 overflow: hidden;
23                 width: 100%;
24             }
25             #left {
26                 background: #00cc00;
27                  float: left;
28                  width: 100px;
29                  margin-bottom: -2000px;
30                  padding-bottom: 2000px;
31             }
32             #content {
33                 background: #cccccc;
34                 float: left;
35                 width: 400px;
36                 margin-bottom: -2000px;
37                  padding-bottom: 2000px;
38             }
39             #right {
40                 background: #0000cc;
41                 float: right;
42                 width: 100px;
43                 margin-bottom: -2000px;
44                  padding-bottom: 2000px;
45             }
46             #foot {
47                 background: #cccc00;
48                 height: 100px;
49                 clear: both;
50             }
51         </style>
52     </head>
53     <body>
54         <div id="parents">
55            <div id="top">这是Top!</div>
56            <div id="main">
57                   <div id="left">这是Left!</div>
58                <div id="content">这是Content!<br><br><br>打算打算打<br><br><br>dwdoahdoa<br><br>的味道</div>
59                <div id="right">这是Right!</div>
60              </div>
61            <div id="foot">这是Foot!</div>
62         </div>
63     </body>
64 </html>
时间: 2024-10-11 11:59:49

【CSS】 布局之多列等高的相关文章

纯css实现div三列等高布局的最简单方法简化版/也可以多列

使用正padding和负margin对冲实现多列布局方法 这种方法很简单,就是在所有列中使用正的上.下padding和负的上.下margin,并在所有列外面加上一个容器,并设置overflow:hiden把溢出背景切掉. html代码 <div id="wrap"> <div id="left"> <p> left</p> <p> left</p> <p> left</p>

css奇技淫巧之—多列等高

什么是等高布局? 先来看一个案例: 上图中的页面的主体内容是两列结构,左列是用来导航的,右列是用来显示内容的.我们看到它们有一个共同的边框,中间还有一条分隔线,左右两列的高度都是不固定的.这种情况下就需要两列的高度保持一致了,左边高度增加,右边也跟着增加,右边高度增加,左边同样也要增加,否则就会出现“断层”的效果.在这里,等高布局是为了维护边框线条的完整性,在有些地方则可能是为了维护背景的完整性,达到整体一致不缺失的效果. 布局方案 等高布局有几种不同的方法,但目前为止我认为浏览器兼容最好最简便

常用布局的实现(两列布局、三列适应布局,两列等高适应布局等)

两列布局:左侧定宽,右侧自适应方法一:利用float和负外边距 <style> * { margin: 0; padding: 0; } .main,.sitebar { font: bolder 20px/300px; } .main { width: 100%; float: left; } .main .content { margin-left: 200px; background-color: red; } .sitebar { width: 200px; float: left;

css布局之两列布局

我们见过两列布局的网站也很多,不过这种两列布局的分为两种:自适应和固定宽度 1.自适应两列布局 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>两列之自适应布局</title> </head> <style> .left{ float: left; width: 20%; heig

多列等高布局

多列等高布局是在一个容器里面,并排的多列,如果内容的高度无法在一开始确定(例如内容是动态的),又需要让各列自然地撑开(不出现每列里面的滚动条),这时候需要用css或者js的方法把各列高度设置为最高列的高度.这里我们介绍纯css实现方法. 程序代码: <div id="container"> <div class="col"> <img src="trend.png"> <h1>Trend</h

CSS布局(二) 常见布局

本文是根据网上资料总结出来的文章 CSS 布局方式 一列布局 多用于显示标题展示等: <div class="main"></div> .main{ width: 200px; height: 100px; background-color: green; margin: 0 auto; } 两列布局 两列布局,最常见的就是使用float来实现.float浮动布局的缺点是浮动后会造成文本环绕等效果,以及需要及时清除浮动. 注意: 1.如何父级元素没有设置高度,则

负边距实现圣杯布局以及列等高

圣杯布局如下图所示, 图一 两边的内容宽度固定,中间栏宽度自适应.html代码如下, <div class="container"> <div class='main'> <p>main</p> <p>主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干内容主干

CSS布局——左定宽度右自适应宽度并且等高布局

今天有位朋友一早从妙味课堂转来一个有关于CSS布局的面试题,需要解决,花了点时间写了几个DEMO,放上来与大家分享受.那么我们在看DEMO之前一起先来看看这个面试题的具体要求吧: 左侧固定宽,右侧自适应屏幕宽: 左右两列,等高布局: 左右两列要求有最小高度,例如:200px;(当内容超出200时,会自动以等高的方式增高) 要求不用JS或CSS行为实现: 仔细分析试题要求,要达到效果其实也并不是太难,只是给人感觉像有点蛋疼的问题一样.但是你仔细看后你会觉得不是那么回事: 左边固定,右边自适应布局,

CSS3之flexbox如何实现水平垂直居中和三列等高布局

最近这些天都在弥补css以及css3的基础知识,在打开网页的时候,发现了火狐默认首页上有这样一个东西. 第一个css属性就没有看懂.于是乎,开始各种找资料,各种看书.这些天把对于css3伸缩布局盒(flexbox)模型的理解写成博文,目的是对flexbox做一个简单的介绍. 以下的内容会分为如下小节: 1.关于css3中flexbox需要掌握的概念 2.flexbox实现水平垂直居中对齐 3.三列等高自适应,页脚区域黏附底部的布局 1.关于css3中flexbox需要掌握的知识 因为对于三列等高