当前位置:Gxlcms > css > CSS实现页面各种列布局的示例

CSS实现页面各种列布局的示例

时间:2021-07-01 10:21:17 帮助过:45人阅读

这篇文章主要介绍了CSS实现页面一列布局,两列布局与三列布局的方法示例,包括宽度与高度的自适应的示例,需要的朋友可以参考下:

1.一列布局(又叫单列布局)
一列布局需要掌握3个知识点:标准文档流,其中又包含了块级元素和行级元素,还有margin属性,可以说实现一列布局的关键代码就是由margin属性实现的,通过设置margin:0 auto;来实现水平居中,auto就是它会根据浏览器的宽度自动设置两边的外边距。要设置margin,你首先得有一个盒子模型,比如这里的div,然后设置它的长宽,有一个固定的大小,才可以实现居中。

  1. <style type="text/css">
  2. body{margin:0;padding:0;}
  3. .head{heigth:200px;background:blue;}
  4. .main{height:500px;width:800p;margin:0 auto;}
  5. .footer{background:blue;height:200px;width:800px;margin:0 auto;}
  6. </style>
  7. <div class="head"> This is head !</div>
  8. <div class="main"> This is main !</div>
  9. <div class="footer"> This is footer !</div>

2.二列布局(两列自适应)
浮动:
块级元素都是一行一行这样排列的,需要把两个块级元素并排时,就需要用到CSS中的浮动布局float,float有三个属性值,
left-左浮动,right-右浮动,none-不浮动,一旦设置了float属性,元素就会对应的向左移,或向右移,直到碰到容器边缘,
当元素没有内容但是设置了浮动属性时,元素的宽度就随内容的变化而变化。
清除浮动的常用方法是:clear:both;(为需要清楚浮动的元素设置)如果你清楚的知道设置了那种浮动,也可以clear:right/left,一般都用both,保障浮动被清除;还有另外一种清除浮动的方法,width:100%;overflow:hidden;

  1. <style type="text/css">
  2. body{margin:0;padding:0;}
  3. .main{width:800px;margin:0 auto;}
  4. .left{width:20%;height:500px;background:blue;float:left;}
  5. .right{width:80%;background:red;height:500px;float:right;}
  6. </style>
  7. <div class="main">
  8. <div class="left"> This is left !</div>
  9. <div class="right"> This is right !</div>
  10. </div>

添加了父级div后,right和left块就被限制在父级块中,父级块宽度是固定的,则左右两块的宽度也随之固定,但是如果父级块的宽度改变,则左右两块也会随之改变,且比例还是2:8,这个是固定不变的。

3.三列布局
position可设置4个属性值,分别为:static(静态定位),relative(相对定位),absolute(绝对定位),fixed(固定定位)
三列布局自适应,将上述两列布局中的比例更改为33.33%即可,那么以此类推,四列布局自适应也可以用一样的方法,调整比例分配,从而实现自己想要的布局方式。

  1. <style type="text/css">
  2. body{margin:0;padding:0;}
  3. .main{width:800px;margin:0 auto;}
  4. .left{width:33.33%;height:500px;background:blue;float:left;}
  5. .middle{width:33.33%;height:500px;background:black;float:left;}
  6. .right{width:33.33%;background:red;height:500px;float:right;}
  7. </style>
  8. <div class="main">
  9. <div class="left"> This is left !</div>
  10. <div class="middle"> This is middle !</div>
  11. <div class="right"> This is right !</div>
  12. </div>

另外一种情况是,左右两块的宽度都是固定的分别为200px,300px,而中间是自适应的。这种情况下就不能通过float来实现了,此时我们需要对左右两块进行绝对定位,然后设置中间块的margin,则可以实现要求。如果你想让中间和左右两块不要紧密贴合,则可以在设置margin(上,右,下,左)时,把像素适当的提高。实现方式如下:
注意left:0;top:0;right:0;top:0; 这些设置是必须的,不加就会出问题,亲测

  1. <style type="text/css">
  2. body{margin:0;padding:0;}
  3. .main{width:800px;margin:0 auto;}
  4. .left{width:200px;height:500px;background:blue;position:absolute;left:0;top:0;}
  5. .middle{height:500px;background:black;margin:0 300px 0 200px;}
  6. .right{width:300px;background:red;height:500px;position:absolute;right:0;top:0;}
  7. </style>
  8. <div class="main">
  9. <div class="left"> This is left !</div>
  10. <div class="middle"> This is middle !</div>
  11. <div class="right"> This is right !</div>
  12. </div>

在网页设计中,我们更多的是将上述布局方式进行混合,比如在一列布局的main块中插入二列或者三列布局,代码和上基本一致

使用BFC的原理实现
BFC的规则之一,就是BFC区域,不会与float box重叠,因此我们可以利用这一点来实现3列布局。

css代码如下

  1. .left {
  2. float: left;
  3. margin-right: 10px;
  4. width: 100px;
  5. height: 100px;
  6. background-color: orange;
  7. }
  8. .rightright {
  9. float: rightright;
  10. margin-left: 10px;
  11. width: 100px;
  12. height: 100px;
  13. background-color: orange;
  14. }
  15. .main {
  16. height: 100px;
  17. background-color: green;
  18. overflow: hidden;
  19. }

html代码如下

  1. <div class="left"></div>
  2. <div class="right"></div>
  3. <div class="main"></div>

双飞翼布局
这种布局方案最早由淘宝提出,主要为了主列能够被最先加载。
实现原理:
(1)让主列外面添加一个wrap,主列wrap,以及2子列都左浮动。
(2)设置主列wrap宽度为100%,将子列的margin-left设置为负值,让子列能够排列在左右两侧。
(3)这是主列的margin-left与margin-right比左右两列的宽度大一点,则可以设置出来主列与子列之间的间隙。

css代码如下

  1. .wrap {
  2. width: 100%;
  3. }
  4. .wrap::after {
  5. display: block;
  6. content: '';
  7. font-size: 0;
  8. height: 0;
  9. clear: both;
  10. zoom: 1;
  11. }
  12. .main-content {
  13. float: left;
  14. width: 100%;
  15. }
  16. .main {
  17. height: 100px;
  18. background-color: green;
  19. margin-left: 110px;
  20. margin-right: 110px;
  21. }
  22. .left {
  23. float: left;
  24. width: 100px;
  25. height: 100px;
  26. background-color: orange;
  27. margin-left: -100%;
  28. }
  29. .rightright {
  30. float: left;
  31. width: 100px;
  32. height: 100px;
  33. background-color: orange;
  34. margin-left: -100px;
  35. }

html代码如下

  1. <div class="wrap">
  2. <div class="main-content">
  3. <div class="main"></div>
  4. </div>
  5. <div class="left"></div>
  6. <div class="right"></div>
  7. </div>

圣杯布局
圣杯布局在结构上要简单一点,也能够让主列优先加载。
实现原理:
(1)添加一个包裹框,设置padding-leftpadding-right值,比子列宽度大一个空隙的宽度。
(2)主列,子列都设置为float: left 左子列margin-left设置为-100%,并且设置为position:relative; left: -110px将左子列放置到左侧。右子列同理。
(3)主列只需设置宽度为100%即可。包裹框的宽度不要设置为100%,自适应即可。

css代码如下

  1. .wrapper {
  2. padding-left: 110px;
  3. padding-right: 110px;
  4. overflow: hidden;
  5. }
  6. .main {
  7. float: left;
  8. width: 100%;
  9. height: 100px;
  10. background-color: #ccc;
  11. }
  12. .left {
  13. float: left;
  14. width: 100px;
  15. height: 100px;
  16. margin-left: -100%;
  17. position: relative;
  18. left: -110px;
  19. _left: 0;
  20. background-color: orange;
  21. }
  22. .rightright {
  23. float: left;
  24. width: 100px;
  25. height: 100px;
  26. background-color: orange;
  27. margin-left: -100px;
  28. position: relative;
  29. rightright: -110px;
  30. }

html代码如下

  1. <div class="wrapper">
  2. <div class="main"></div>
  3. <div class="left"></div>
  4. <div class="right"></div>
  5. </div>

人气教程排行