《写给大家看的CSS书》第五章:网站布局

1、网站的基本结构

我们简单的把网站的基本布局方式分为以下四种:

其中,流动布局与固定布局的差别如下:

  • 流动:主内容区域的宽度会随着浏览器窗口的变化而自动换行,除非达到最小宽度
  • 固定:随着窗口的变化(例如缩小),页面将会被遮掩

以三栏式固定式布局为例,基本的HTML文档结构如下图所示

2、两栏固定布局

/* 两栏固定布局 */
 
body {
    text-align:center; /*通过这条规则使布局在IE6的浏览器窗口中居中*/
}
 
#main_wrapper {
    width:840px;  /*当这个宽度改变时,分栏的宽度也会成比例改变*/
    margin-left:auto;  /*在浏览器中居中布局*/
    margin-right:auto; 
    text-align:left; /*重置body标签为IE6设置的hack */
}
#header {
     
    }
#nav {
    width:22%; /*导航宽度加上内容宽度的和刚好为100% */
    float:left; /* 浮动,使导航和内容并排显示*/
    }
#content {
    float:left;/* 浮动,使导航和内容并排显示*/
    width:78%; /*导航宽度加上内容宽度的和刚好为100% */
    top:0px;   
    }
#footer {
    clear:both; /* 确保页脚位于下方 */
    }
#header_inner, #nav_inner, #content_inner, #promo_inner {
    overflow:hidden; /* 裁剪(隐藏)过大的元素以免由于它们扩展而破坏布局*/
    }
#header_inner { 
    padding:1em 2em; /* 在盒子与内容之间创建间距 */
    }

#nav_inner {
    padding:1em .8em; /* 在盒子与内容之间创建间距 */
    border-right:3px solid #B33;
    }
#content_inner { 
    padding:0 1em 1em 1.5em;/* 在盒子与内容之间创建间距 */
    }
#footer_inner {
    padding:.5em 1em; /* 在盒子与内容之间创建间距 */
    text-align:center;
    }

3、两栏流动式布局

/* 两栏流动布局:注释代表不同的内容*/

body {
    text-align:center; 
    }
#main_wrapper {
        /*设置流动范围,如果超出这个范围,将应用固定布局*/
    max-width:960px; /* 设置流动的最大宽度 */
    min-width:720px; /* 设置流动的最小宽度 */
    margin-left:auto;  
    margin-right:auto; 
    text-align:left;
    }

#header {
     
    }

#nav {
    width:140px; /* 让导航的宽度固定,使其不受窗口缩放影响 */
    float:left; 
    }

#content {
  /* default auto width */
margin-left: 140px; /*内容的左外边距等于nav分栏的宽度*/ } #footer { clear:both; background:#DDC; } #header_inner, #nav_inner, #content_inner, #promo_inner { overflow:hidden; } #header_inner { padding:1em 2em; } #nav_inner { border-right:3px solid #B33; } #content_inner { padding:1em 1em 1em 1.5em; } #footer_inner { padding:.5em 1em; text-align:center; }

4、三栏固定式布局

body {
    margin:0px;
    padding:0px;
    text-align:center; /* IE6 needs this to center the layout in the browser window */
    }
#main_wrapper {
    width:880px; /* sets max layout width */
    margin-left:auto;  /* centers layout in browser */
    margin-right:auto; /* centers layout in browser */
    text-align:left; /* resets the centering hack for IE6 on the body tag */
    position:relative;
    height:100%;
    background-color:#585;
    }
#header {
    /* full width by default */
    }
#content {
    position:absolute;
    padding:0;
    width:600px;
    left:130px;
    }
#nav {
    position:absolute;
    left:0px;
    width:130px;
    background:transparent;
    margin-bottom:300px;
    }
#promo {
    position:absolute;
    right:0px;
    width:150px;
    background:transparent;
    }
#footer {
    /* full width by default */
    }
#header_inner, #nav_inner, #content_inner, #promo_inner {
    overflow:hidden; /* prevents oversize elements from breaking the layout */
    }
#header_inner {
    padding:.25em 2em;
    }
#nav_inner {
    margin:1em 1.2em;
    }
#content_inner {
    margin:1em 2.5em 1em 2em;
    padding:0;
    }
#promo_inner {
    margin:1em 1.2em;
    }
#footer_inner {
    padding:.5em 10em;
    text-align:center;
    }

5、三栏流动式布局

三栏式流动布局的难点在于:要保持中间的内容区域变化的时候,要保证左右两侧导航的不变,为此,需要新增两个div来实现该功能。

 在这里使用了负外边距的技巧,为 #twocolwrap设置了负外边距,欺骗浏览器右侧还有空间,从而可以容纳右边的#promo栏目

/* THREE COLUMN LIQUID CENTER LAYOUT */

body {font: .8em verdana, arial, sans-serif;}
* {margin:0; padding:0;}
div#main_wrapper {min-width:760px; max-width:880px;  margin-left:auto; margin-right:auto;} /* centers layout when > max width */
div#header {
    width:auto;
    }
#threecolwrap {
  float:left;
  width:100%;
  }
#twocolwrap {
     float:left;
    width:100%;
    display:inline; /* stops IE doubling  margin on float*/
    margin-right:-170px;  /*CWS - neg margin move */
    }
 #nav {
     float:left;
     width:150px;
    display:inline; /* stops IE doubling  margin on float*/
     }
 #content {
     width:auto;
     margin-left:150px;
     margin-right:170px;
     height:1%;
    }
#promo {
     float:left;
     width:170px; 
    display:inline; /* stops IE doubling  margin on float*/
    }
 #footer {
     width:100%;
     clear:both; 
     }
/* end of structural styles */ 

/* inner div margin */
#header_inner, #nav_inner, #content_inner, #promo_inner {
    overflow:hidden; /* prevents oversize elements from breaking the layout */
    }
#header_inner {
    padding:1em 2em;
    }
#nav_inner, #promo_inner {
    padding:.5em .5em 1em 1em;
    }
#content_inner {
    padding:0 1em 1em 1.5em;
    }
#footer_inner {
    padding:.5em 10em;
    text-align:center;
    }
/* end inner div margins */

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。