zoukankan      html  css  js  c++  java
  • CSS 之 圣杯布局&双飞翼布局

    圣杯布局 和 双飞翼布局 是重要布局方式。两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局。

    遵循了以下要点:

    • 两侧宽度固定,中间宽度自适应
    • 中间部分在DOM结构上优先,以便先行渲染
    • 允许三列中的任意一列成为最高列
    • 只需要使用一个额外的<div>标签

      圣杯布局

        1、结构:

    1 <div id="header"></div>
    2 <div id="container">
    3   <div id="center" class="column"></div>
    4   <div id="left" class="column"></div>
    5   <div id="right" class="column"></div>
    6 </div>
    7 <div id="footer"></div>

        2、CSS 样式

        (1)假设左侧的固定宽度为200px,右侧的固定宽度为150px,则首先在container上设置:

    1 #container {
    2   padding-left: 200px; 
    3   padding-right: 150px;
    4 }

          为左右两列预留出相应的空间,得到如下示意图:

        

        (2)随后分别为三列设置宽度与浮动,同时对footer设置清除浮动:

     1 #container .column {
     2   float: left;
     3 }
     4 
     5 #center {
     6   width: 100%;
     7 }
     8 
     9 #left {
    10   width: 200px; 
    11 }
    12 
    13 #right {
    14   width: 150px; 
    15 }
    16 
    17 #footer {
    18   clear: both;
    19 }

        得到如下效果:

        

         根据浮动的特性,由于center的宽度为100%,即占据了第一行的所有空间,所以leftright被“挤”到了第二行。

        (3) 接下来的工作是将left放置到之前预留出的位置上,这里使用负外边距

    1 #left {
    2   width: 200px; 
    3   margin-left: -100%;
    4 }

         得到:

         

        (4)随后还需要使用定位(position)方法:

    1 #left {
    2   width: 200px; 
    3   margin-left: -100%;
    4   position: relative;
    5   right: 200px;
    6 }

         这里使用position: relativeright: 200pxleft的位置在原有位置基础上左移200px,以完成left的放置:

        

        (5)接下来放置right,只需添加一条声明即可:

    1 #right {
    2   width: 150px; 
    3   margin-right: -150px; 
    4 }

         最终效果图:

        

        

            至此,布局效果完成。不过还需要考虑最后一步,那就是页面的最小宽度:要想保证该布局效果正常显示,由于两侧都具有固定的宽度,所以需要给定页面一个最小的宽度,
        但这并不只是简单的200+150=350px。回想之前left使用了position: relative,所以就意味着在center开始的区域,还存在着一个left的宽度。所以页面的最小宽度应该设置为200+150+200=550px:

      双飞翼布局

        1、结构

    1 <body>
    2   <div id="header"></div>
    3   <div id="container" class="column">
    4     <div id="center"></div>
    5   </div>
    6   <div id="left" class="column"></div>
    7   <div id="right" class="column"></div>
    8   <div id="footer"></div>
    9 <body>

       2、样式

        (1)与圣杯布局相同的思路,首先设置各列的宽度与浮动,并且为左右两列预留出空间,以及为footer设置浮动清除:

     1 #container {
     2   width: 100%;
     3 }
     4 
     5 .column {
     6   float: left;
     7 }
     8 
     9 #center {
    10   margin-left: 200px;
    11   margin-right: 150px;
    12 }
    13 
    14 #left {
    15   width: 200px; 
    16 }
    17 
    18 #right {
    19   width: 150px; 
    20 }
    21 
    22 #footer {
    23   clear: both;
    24 }

          以上代码将container,left,right设置为float: left,而在container内部,center由于没有设置浮动,所以其宽度默认为container的100%宽度,通过对其设置margin-leftmargin-right为左右两列预留出了空间。

        (2)将left放置到预留位置:

    1 #left {
    2   width: 200px; 
    3   margin-left: -100%;
    4 }

        (3)将right放置到预留位置:

    1 #right {
    2   width: 150px; 
    3   margin-left: -150px;
    4 }

        最后计算最小页面宽度:由于双飞翼布局没有用到position:relative进行定位,所以最小页面宽度应该为200+150=350px。但是当页面宽度缩小到350px附近时,会挤占中间栏的宽度,使得其内容被右侧栏覆盖。

       因此在设置最小页面宽度时,应该适当增加一些宽度以供中间栏使用。

        更多详情,参考这篇文章:圣杯布局和双飞翼布局

  • 相关阅读:
    实验八 进程间通信
    实验七 信号
    实验六 进程基础
    实验五 shell脚本编程
    实验四 Linux系统C语言开发环境学习
    实验三 linux系统用户管理及VIM配置
    实验二 Linux系统简单文件操作命令
    实验一 linux系统与应用准备
    myatbis的一个好的封装
    php上传微信素材
  • 原文地址:https://www.cnblogs.com/niujifei/p/11269093.html
Copyright © 2011-2022 走看看