博客列表 >3月27日三栏布局的几种方式

3月27日三栏布局的几种方式

田亢的博客
田亢的博客原创
2018年03月28日 17:08:05718浏览

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

它的特点:两边定宽,然后中间的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

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议