Blogger Information
Blog 32
fans 0
comment 0
visits 19907
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
3月27日三栏布局的几种方式
田亢的博客
Original
719 people have browsed it

三栏布局,也是经常会被使用到的一种布局。

它的特点:两边定宽,然后中间的width是auto的,可以自适应内容,再加上margin边距,来进行设定。

第一种:基础的三列布局

使用左右两栏使用float属性,中间栏使用margin属性进行撑开

代码如下:

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三栏布局</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        .left{
            width: 200px;
            height: 500px;
            background-color: yellow;
            float: left;
        }
        .right{
            width: 200px;
            height: 500px;
            background-color: green;
            float: right;
        }
        .middle{
            height: 500px;
            background-color:red;
            margin-left: 220px;
            margin-right: 220px;

        }
</style>



</head>
<body>
<!--基础的三列布局-->
<div class="left"></div>
<div class="right"></div>
<div class="middle"></div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

缺点:
当宽度小于左右两边宽度之和时,右侧栏会被挤下去

效果如下:

屏幕快照 2018-03-28 16.56.44.png第二种:使用position定位实现 即左右两栏使用position进行定位,中间栏使用margin进行定位

代码如下:

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三栏布局</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        .left1{
            background-color: yellow;
            width: 200px;
            height: 300px;
            position: absolute;
            top: 0px;
            left: 0px;
        }
        .middle1{
            height: 300px;
            margin: 0 220px;
            background-color: firebrick;
        }
        .right1{
            height: 300px;
            width: 200px;
            position: absolute;
            top: 0px;
            right: 0px;
            background-color: green;
        }
  </style>
</head>
<body>
<div class="left1">左栏</div>
<div class="middle1">中间栏</div>
<div class="right1">右栏</div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:好处是:HTML结构正常
缺点:当父元素有内边边距时,会导致中间栏的位置出现偏差 不出现偏差的话需要先将内外边距清除

效果如下:

屏幕快照 2018-03-28 17.01.14.png

第三种:双飞翼布局

创建步骤:

1创建DOM结构,顺序非常重要
2必须是中间的主题在前,其次是左右
3中间的middle必须套一个父级,将样式加给它
将middle的宽度设置为100%,然后将其float设置为left,其中的main块设置margin属性,然后左边栏设置float为left,之后设置
margin为-100%,右栏也设置为float为left,之后margin-left为自身大小。

代码如下:

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三栏布局</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
       .wrapper{
            /*清除浮动*/
            overflow: hidden;
            margin: auto;
            /*宽度设置非常重要*/
            width: 1000px;
        }
        .middle{
            width: 100%;
            float: left;
            background-color: forestgreen;
        }
        .middle .main{
            margin: 0 220px;
            background-color: red;
            height: 300px;
        }
        .left{
            width: 200px;
            height: 300px;
            background-color: firebrick;
            float: left;
            margin-left: -100%;
        }
        .right{
            width: 200px;
            height: 300px;
            background-color: greenyellow;
            float: left;
            margin-left: -200px;
        }
</style>

</head>
<body>
<div class="wrapper">

    <div class="middle">
        <div class="main">中间</div>
    </div>
    <div class="left">左栏</div>
    <div class="right">右栏</div>

</div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

效果如下:



总结:

缺点:多了一层标签

第四种:圣杯布局

步骤:

DOM结构:一个父级容器 内部的三列 主题必须在前,能确保优先渲染,其次是左右

  中间内容部分必须全部左浮动
  浮动以后 中间区域的宽度是100%,所以会后面的左右元素会被挤到下面,换行显示
  然后将浮动的左右元素移动到中间的指定位置
  通过给左右元素设置负的  左外边距margin-left来实现浮动区块的反向移动;
  左元素必须跨越整个main区块才可以到达定位的起点: margin-left:-100%;
  右元素是在右边显示,所以只要跨过自己的宽度就可以: margin-left:200px;
  然后给中间的主题部分添加内边距进行挤压完成布局

代码如下:

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三栏布局</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
.wrapper{
            width: 600px;
            margin: auto;
            /*清除浮动,使它能包住浮动区块,不让浮动的元素跑到父元素外面去*/
            overflow: hidden;
            background-color: #ffff0a;
            /*因为左右区块现在覆盖在main之上,挡住了main的内容,现在添加padding来实现自身内容显示*/
            padding: 0 200px;

        }
        .wrapper .middle{

            min-height: 600px;
            background-color: fuchsia;
            float: left;
            width: 100%;

        }
        .wrapper .left{
            width: 200px;
            min-height: 600px;
            background-color: forestgreen;
            float: left;
            /*设置左外边距margin为-100%,使它回到main区块的起始点处*/
            margin-left: -100%;
            position: relative;

            left: -200px;
        }
        .wrapper .right{
            width: 200px;
            min-height: 600px;
            background-color: #ff8899;
            float: left;
            margin-left: -200px;

            position: relative;

            right:-200px;
        }

    </style>

</head>
<body>
<div class="wrapper">

<div class="middle">中间</div>

<div class="left">左栏</div>
<div class="right">右栏</div>

</div>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

效果如下:

屏幕快照 2018-03-28 17.10.03.png

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post