HTML+CSS入门 CSS圣杯布局详解
沉沙 2018-09-20 来源 : 阅读 2052 评论 0

摘要:本篇教程介绍了HTML+CSS入门 CSS圣杯布局详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门。

本篇教程介绍了HTML+CSS入门 CSS圣杯布局详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门。<

圣杯布局

圣杯布局很完美(兼容所有浏览器,包括IE6),但是使用了相对定位,布局有局限性,宽度控制要改的地方也多。

第一种方法公用部分:

.lgyz, .lzrg, .lrzcg, .lcgrz, .lzcrg {margin:10px 0; min-width:400px;text-align: center;color:#ffffff; }
    .left {background-color: #4DBCB0; padding:20px 0;}
    .aside, .center, .right {background-color: #E35881;padding:20px 0; }

第二种方法都不考虑兼容IE8及以下。
左侧栏固定宽度,右侧自适应 :



第一种写法:

<div class="lgyz">
        <div class="left">主内容栏自适应宽度</div>
        <div class="aside">侧边栏固定宽度</div>
    </div>

.lgyz{zoom:1;overflow:hidden;padding-left:210px;}
.lgyz .aside{float:left;width:200px;margin-left:-100%;position:relative;left:-210px;_left:0;}
.lgyz .left{float:left;width:100%;}

第二种写法:

<div class="layout">
    <aside class="layout__aside">侧边栏宽度固定</aside>
    <div class="layout__main">主内容栏宽度自适应</div>
</div>

.layout:after {clear: both;content: " "; display: table;}
.layout__aside, .layout__main {float: left;}
.layout {padding-left: 210px;}
.layout__main {width: 100%;}
.layout__aside {width: 200px;margin-left: -210px;}

右侧栏固定宽度,左侧自适应 :



第一种写法:

<div class="lzrg">
  <div class="left">主内容栏自适应宽度</div>
   <div class="aside">侧边栏固定宽度</div>
</div>

.lzrg{zoom:1;overflow:hidden;padding-right:210px;}
.lzrg .aside{float:left;width:200px;margin-left:-200px;position:relative;right:-210px;}
.lzrg .left{float:left;width:100%;}

第二种写法:

<div class="layout">
    <div class="layout__main">主内容栏宽度自适应</div>
    <aside class="layout__aside">侧边栏宽度固定</aside>
</div>

.layout:after{clear:both;content:" ";display:table;}
.layout{padding-right:210px;}
.layout__main{width:100%;float:left;}
.layout__aside{float:right;width:200px;margin-right:-210px;}

 左右固定   中间自适应 



第一种:

<div class="lrzcg">
        <div class="left">主内容栏自适应宽度</div>
        <div class="center">侧边栏1固定宽度</div>
        <div class="right">侧边栏2固定宽度</div>
    </div>

.lrzcg{zoom:1;overflow:hidden;padding-left:210px;padding-right:210px;}
 .lrzcg .left{float:left;width:100%;}
 .lrzcg .center{float:left;width:200px;margin-left:-100%;position:relative;left:-210px;_left:210px;}
 .lrzcg .right{float:left;width:200px;margin-left:-200px;position:relative;right:-210px;}

第二种:

<div class="layout">
    <aside class="layout__aside layout__aside--left">左侧边栏宽度固定</aside>
    <div class="layout__main">主内容栏宽度自适应</div>
    <aside class="layout__aside layout__aside--right">右侧边栏宽度固定</aside>
</div>

.layout:after{clear:both;content:" ";display:table;}
.layout__aside,.layout__main{float:left;}
.layout{padding:0 210px;}
.layout__main{width:100%;}
.layout__aside{width:200px;}
.layout__aside--left{margin-left:-210px;}
.layout__aside--right{margin-right:-210px;float:right;}

第三种:

<div class="layout__main-wrapper">
    <div class="layout__main">主内容栏宽度自适应</div>
</div>
<aside class="layout__aside layout__aside--left">左侧边栏宽度固定</aside>
<aside class="layout__aside layout__aside--right">右侧边栏宽度固定</aside>
<footer class="clear">底部</footer>

.clear{clear:both;}
.layout__main-wrapper,.layout__aside{float:left;}
.layout__main-wrapper{width:100%;}
.layout__main{margin:0 210px;}
.layout__aside{width:200px;}
.layout__aside--left{margin-left:-100%;}
.layout__aside--right{margin-left:-200px;}

 
都在左边,右侧自适应 



第一种:

<div class="lcgrz">
        <div class="left">主内容栏自适应宽度</div>
        <div class="center">侧边栏1固定宽度</div>
        <div class="right">侧边栏2固定宽度</div>
    </div>

.lcgrz{zoom:1;overflow:hidden;padding-left:420px;}
   .lcgrz .left{float:left;width:100%;}
   .lcgrz .center{float:left;width:200px;margin-left:-100%;position:relative;left:-420px;_left:0px;}
   .lcgrz .right{float:left;width:200px;margin-left:-100%;position:relative;left:-210px;_left:210px;}

第二种:

<div class="layout">
    <aside class="layout__aside layout__aside--first">第1个侧边栏宽度固定</aside>
    <aside class="layout__aside layout__aside--second">第2个侧边栏宽度固定</aside>
    <div class="layout__main">主内容栏宽度自适应</div>
</div>

.layout:after{clear:both;content:" ";display:table;}
.layout__aside,.layout__main{float:left;}
.layout{padding-left:420px;}
.layout__main{width:100%;}
.layout__aside{width:200px;}
.layout__aside--first{margin-left:-420px;}
.layout__aside--second{margin-left:-210px;}

 都在右边,左侧自适应

 

第一种:

<div class="lzcrg">
        <div class="left">主内容栏自适应宽度</div>
        <div class="center">侧边栏1固定宽度</div>
        <div class="right">侧边栏2固定宽度</div>
    </div>

.lzcrg{zoom:1;overflow:hidden;padding-right:420px;}
   .lzcrg .left{float:left;width:100%;}
   .lzcrg .center{float:left;width:200px;margin-left:-200px;position:relative;right:-210px;}
   .lzcrg .right{float:left;width:200px;margin-left:-200px;position:relative;right:-420px;}

第二种:

<div class="layout">
    <div class="layout__main">主内容栏宽度自适应</div>
    <aside class="layout__aside layout__aside--first">第1个侧边栏宽度固定</aside>
    <aside class="layout__aside layout__aside--second">第2个侧边栏宽度固定</aside>
</div>

.layout:after{clear:both;content:" ";display:table;}
.layout{padding-right:420px;}
.layout__main{width:100%;float:left;}
.layout__aside{width:200px;float:right;}
.layout__aside--first{margin-right:-210px;}
.layout__aside--second{margin-right:-420px;}

 

使用flex方法圣杯布局,每种布局做法的结果同上面一模一样,但是代码减少了很多,而且适用的场景更多

<div class="layout">
    <aside class="layout__aside">侧边栏宽度固定</aside>
    <div class="layout__main">主内容栏宽度自适应</div>
</div>
<div class="layout">
    <div class="layout__main">主内容栏宽度自适应</div>
    <aside class="layout__aside">侧边栏宽度固定</aside>
</div>
<div class="layout">
    <aside class="layout__aside">左侧边栏宽度固定</aside>
    <div class="layout__main">主内容栏宽度自适应</div>
    <aside class="layout__aside">右侧边栏宽度固定</aside>
</div>
<div class="layout">
    <aside class="layout__aside">第1个侧边栏宽度固定</aside>
    <aside class="layout__aside">第2个侧边栏宽度固定</aside>
    <div class="layout__main">主内容栏宽度自适应</div>
</div>
<div class="layout">
    <div class="layout__main">主内容栏宽度自适应</div>
    <aside class="layout__aside">第1个侧边栏宽度固定</aside>
    <aside class="layout__aside">第2个侧边栏宽度固定</aside>
</div>

.layout {margin:10px 0; min-width:400px;text-align: center;color:#ffffff; }
 .layout__main {background-color: #4DBCB0; padding:20px 0;}
    .layout__aside {background-color: #E35881;padding:20px 0; }

    .layout { display: flex;}
    .layout__main { flex: 1;}
    .layout__aside {width: 200px; }
    .layout > .layout__aside:not(:first-child),
    .layout > .layout__main:not(:first-child){ margin-left: 10px;}

   

本文由职坐标整理发布,欢迎关注职坐标WEB前端HTML/CSS频道,获取更多HTML/CSS知识!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 2 不喜欢 | 0
看完这篇文章有何感觉?已经有2人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程