页面布局学习(二)

现在开始讲解各种常用布局。

三栏——固定宽度布局

掌握了创建三栏布局的技术,你想建多少栏就能建多少栏。为了学习方便,我会给每个栏添加不同的背景色以区分。

首先做个简单的居中的单栏固定布局。贴上代码:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>页面布局</title>
    <style type="text/css">
        #wrapper{width:960px;margin:0 auto;border:1px solid;}
        article{background: #ffed53;}
    </style>
</head>
<body>
    <div id="wrapper">
        <article>
            <h2>响应式网页布局的实现方法原理·马海祥博客</h2>
            <p>响应式网页设计(Responsive Web design,通常缩写为RWD)是指:页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整。可以说是一种网页设计的技术做法,该设计可使网站在多种浏览设备(从桌面电脑显示器到移动电话或其他移动产品设备)上阅读和导航,同时减少缩放、平移和滚动。
                具体的实践方式由多方面组成,包括弹性网格和布局、图片、CSS media query的使用等。无论用户正在使用笔记本还是iPad,我们的页面都应该能够自动切换分辨率、图片尺寸及相关脚本功能等,以适应不同设备;换句话说,页面应该有能力去自动响应用户的设备环境。响应式网页设计就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这样,我们就可以不必为不断到来的新设备做专门的版本设计和开发了。
            </p>
        </article>
    </div>
</body>
</html>

如图可知这个单栏布局在页面上居中了,往里面添加内容这一栏的高度将相应增加。article元素本质上是没有宽度的块

级盒子,它水平填满了外包装。再为其添加一个导航元素,作为第二栏。

html:

<div id="wrapper">
        <nav>  <!--无序列表-->
            <li><a>link</a></li>
            <li><a>link</a></li>
            <li><a>link</a></li>
        </nav>
        <article>
            <h2>响应式网页布局的实现方法原理·马海祥博客</h2>
            <p>响应式网页设计(Responsive Web design,通常缩写为RWD)是指:页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整。可以说是一种网页设计的技术做法,该设计可使网站在多种浏览设备(从桌面电脑显示器到移动电话或其他移动产品设备)上阅读和导航,同时减少缩放、平移和滚动。
                具体的实践方式由多方面组成,包括弹性网格和布局、图片、CSS media query的使用等。无论用户正在使用笔记本还是iPad,我们的页面都应该能够自动切换分辨率、图片尺寸及相关脚本功能等,以适应不同设备;换句话说,页面应该有能力去自动响应用户的设备环境。响应式网页设计就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这样,我们就可以不必为不断到来的新设备做专门的版本设计和开发了。
            </p>
        </article>
    </div>
css:

#wrapper{width:960px;margin:0 auto;border:1px solid;}
        nav{
            width:150px;
            float:left;
        }
        nav li{list-style-type: none;}
        article{
            <span style="color:#ff0000;">width: 810px;
            float: left;</span>
            background: #ffed53;
        }

两栏容器元素的总宽度设定为为960px,并浮动它们,就可创造出并肩排列的两栏来。同样的方法可以创

建第三栏或者任意多栏。

<nav>  <!--无序列表-->   
        </nav>
        <article>
           <!--***-->
        </article>
        <aside>
            this is aside,内容转自马海祥的博客
        </aside>
article{
            <span style="color:#ff0000;">width: 600px;</span>
            float: left;
            background: #ffed53;
        }
        aside{
            <span style="color:#ff0000;">width:210px;
            float: left;
            background: #3f7ccf;</span>
        }

只要总宽度等于960px,我可想添加多少就多少栏,可以添加页眉和页脚。

在div顶部和底部分别添加了页眉<header>和页脚<footer>标签,css样式如下:

<span style="white-space:pre">	</span>header{background: #f00;text-align: center;}
        footer{background: #000;color: #EEEEEE;}
页面出现如下问题:


页脚位于浮动元素后面,所以就会尽量往上移动,解决方法是添加:clear: both(left);


清除浮动后就可以阻止footer向上移动,让它不超过浮动元素的下方边界。

接下来主要解决布局中的两个问题:①内容与各栏边界紧挨着太拥挤;②每栏高度由文本决定。别以为

这是件简单的事。

为栏设定内边距和边框:

添加水平外边距和内边距或者图片,长字符串如长URL都会导致栏宽超过布局宽度,导致右边的栏下滑

到左边的栏下方,称作“浮动滑移”。

如添加article{padding: 10px 20px;},中间盒子变成640px宽,如下:


有三种方法可以预防:

①重设宽度以抵消内边距和边框,比如将width设为560px,则右边栏可以归为,问题是每次只要调整内

外边距就要重设布局宽度,有点烦人。这个方法虽然可行却不够理想,说不定那一回调整内边距和边框

就会导致布局错乱。

②给容器内部的元素应用内边距和边框,前提是这些元素没有明确设定宽度,这样它们的内容才会跟着

内、外边距的增加而缩小。盒模型定义没有宽度的元素在水平方向上回适应其父元素,其内容会随着外

边距、边框和内边距的增加而减少。然而一栏之中会有大量不同元素,要调整每个元素,将来又决定调

整时就必须再次对每个元素更改,麻烦且容易出错。故可以在栏中添加一个没有宽度的div,包含所有

内容元素,只需调整该div。如下:

去掉article中的padding属性,同时在article标签内部添加div标签包围原先的内容元素,样式为inner,添加

article .inner {
            margin: 10px;
            border: 1px solid red;
            padding: 20px;;
        }
页面如下:

可以同样方法修改其余几部分。

补充:还有另外一种方法——子-星选择符,这就是一种组合选择符,利用它可以不使用内部div就

能设定一栏中所有元素的外边距。星号选择符可以选择“所有元素”,子选择符可以选择“某元素的子元素”,

比如someSelector>*就会只选择someSelector所代表的所有子元素,正好适用于选择容器内部的所有

顶部元素。使用该选择符要注意两点:第一,设定垂直外边距时,只能使用margin-top,margin-bottom,

不能使用简写margin,否则会抵消该选择符应用给这些元素的水平外边距。如果想缩进某个子元素的内容,

可以给它应用内边距。第二,该选择符有潜在性能问题,因为它会遍历整个DOM结构去查找匹配的元素,

不过该性能影响几乎可忽略。除非是包含成千上万个元素的页面,就该考虑用ySlow或其他性能度量工具测一测。

③使用CSS3的box-sizing:border-box:这是最简单的方法。加上这个声明后,再给栏添加内边距

(和边框)就不会导致盒子的宽度变化,注意外边距不行。和②效果一样。给每个部分添加

box-sizing: border-box;,padding和border属性,去掉div标签。页面效果如下:


但是,IE6和IE7不支持box-sizing属性,不过有个专门解决这个问题的腻子脚本(polyfill),

名叫borderBoxModel.js。

在body标签结束前添加代码段:

<!--HTML标记-->
<!--只让IE8之前的IE加载它-->
<!--[if lt IE 8]>
<script src="helpers/borderBoxModel.js"></script>
<![!endif]-->

在使用内部div这么久以来,经试验发现不仅是浮动的栏,所有的元素都可以应用这个不同的盒缩放

模型,故可在css中添加一条规则:

*{box-sizing:border-box;}

补充:动态网站中,预防过大的元素,比如图片,简单的预防措施是,添加一条.inner img{max-width:100%;}

声明,在方法②的基础上。还有一个方法,就是给每个栏或者内部div添加overflow:hidden;声明。还有一个

潜在问题是换行。长字符串会导致栏宽过大,因此还应该给所以栏的外包装元素应用word-wrap:break-word;声明,

这样会把过长的词调整断开显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值