float浮动布局,auto冻结布局,position:absolute绝对布局

在布局中遇到的问题:

1.在用float属性使元素浮动时,一定要为浮动元素设置宽度,在清除浮动效果时,一定是与浮动元素同等级别的情况下,写一个空的div然后设置他的{float:none;}.其中main为主要内容区可以不设宽度,继承父元素的100%width,可以设置它的margin.

    若在body下嵌套子divheader,main,sidebar,footer,那么body设置{margin:0px;padding:0px;}即可,无论你给header设置的margin是多少,在效果呈现上都是有效的。

 

效果图:

 

 

但是如果你在body下嵌套了一个Container,然后用container去承载所有的div子块,你会发现当你为header设置margin的时候,他的上边界不起作用,为什么?

 

(上边界无效)效果图:


Container已经是一个盒子了,你用该盒子的内容区去承载子div,我认为在给出一个总的容器的时候,最好预先设置好他的padding margin值且不能全为0px

最后用container实现的布局:

 

效果图:

 

这是在网上搜到的类似例子,大家可以共享看下

当你想让两个元素的content在垂直方向(vertically)分隔时,既可以选择padding-top/bottom,也可以选择margin-top/bottom,再此Jorux建议你尽量使用padding-top/bottom来达到你的目的,这是因为css中存在Collapsing margins(折叠的margins)的现象.

Collapsing margins: margins折叠现象只存在于临近或有从属关系的元素,垂直方向的margin.文字说明可能让人费解,下面用一个例子说明margin-collapsing现象.

: html文件的<body></body>之间写入如下代码:

<div id=ID1>
<h1 id=ID2>Margins of ID1 and ID2 collapse vertically.<br/>元素ID1ID2margins在垂直方向折叠.</h1>
</div>

在与其外联的css文件中写入:

* {
padding:0;
margin:0;
}
#ID1 {
background-color: #333;
color: #FFF;
margin-top: 10px;
margin-bottom: 10px;
}
#ID2 {
font: normal 14px/1.5 Verdana, sans-serif;
margin-top: 30px;
margin-bottom: 30px;
border: 1px solid #F00;
}

代码解释:

1. html写入的代码表示,html中插入id分别为ID1ID2的两个块级元素div, h1;

2. *{padding:0; margin:0;}: 使浏览器默认的元素paddingmargin值均归零;

3. #ID1{}:使idID1的元素div的背景颜色为#333,字体颜色为#FFF, margin-top/bottom10px;

4. #ID2{}:使idID2的元素h1的字体大小为14px, verdana字体,行高为字体高的150%,正常粗细. margin-top/bottom30px,边框为1px,红色实线.

依据以上解释, 我们应该得到如下效果(Fig. 3):


ID1margin-top/bottom=ab=ef=10px;

ID2margin-top/bottom=bc=de=30px;

但用浏览器打开html文件,却得到Example4的效果,如下图(Fig. 4):


ab=cd=30px, ID1margin-top/bottom=10px被折叠了,而且ID1应有的margin黑色背景也一同被折叠消失了.

为什么会折叠: 造成以上现象的原因是,我们在css中并没有声明idID1的元素divheight(),因此它的高便被设为auto(自动).一旦其值被设为auto,那么浏览器就会认为它的高为子元素ID2border-topborder-bottom之间的距离,Fig. 4bc的长度,所以子元素ID2margin-top/bottom(30px)就伸出到了父元素ID1之外,出现了Fig. 4abcd之间的空白区域.因此父元素ID1margin-top/bottom因子元素的”红杏出墙”而被折叠消失了.

如何解决折叠问题: 可能大家最初想到的办法就是根据折叠发生的原因—auto,来解决问题.但是, 在实际操作中, 某些元素如div, h1, p,我们是不可能预先知道它的高是多少的,因此在css文件中是不能常规通过声明元素的高来解决折叠问题.

我们需要在css文件中加入如下代码(红色部分):

#ID1 {
background-color: #333;
color: #FFF;
margin-top: 10px;
margin-bottom: 10px;
padding-top:1px;
padding-bottom:1px;}

或是:

#ID1 {
background-color: #333;
color: #FFF;
margin-top: 10px;
margin-bottom: 10px;
border-top:1px solid #333;
border-bottom:1px solid #333;}

通过增加以上代码, 便可使浏览器重新计算ID1的高,使其为子元素ID2margin-top/bottom外缘(outer top/bottom)之间的距离,Fig. 3be的距离.

Key Note:

A.代码, 言归正传,返回之前的关于float布局,当设置如下代码时:#sidebar{float:right;width:280px;padding:15px;margin:10px;}

#main{margin:0px 330px 10px 10px;}//表示的是main在右边界空出一个sidebar的大小

这样有利于页面正确的扩展和收缩。

 

效果图:

 

2.可不可使用设置main的宽度来达到页面布局分明的效果?当然可以。采用冻结布局,将元素锁住冻结在整个父元素container中,相当于间接的设置了main块的宽度,可以避免由于窗口扩展的带来的问题。

 

效果图:

 

3.一种布局一般有好几个方法,都有各自的优缺点。例如绝对布置,使用它可以在页面上精确的放置元素。只是需要注意,position:absolute的元素会以最近的一个position不为static的父元素为相对参考。

 

效果图:

 

转自:http://blog.csdn.net/tanyacui/article/details/52205104
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值