鸟食轩

 Microsoft .NET[C#] MVP 2003
随笔 - 427, 文章 - 234, 评论 - 5468, 引用 - 346
数据加载中……

Web页中的HTML元素的排版布局规则

    我们知道每个Web页面都是由一大堆的HTML元素组成的,我们把每对<element>...</element>这样的结构称为box,在Web页面的排版布局中,浏览器把这样的box作为排版的元素,并且把box分为了inline level和block level两种类型。

    当然这个box内是可以容纳很多其它的HTML标签的,但是不管它的内部有多少的TAGs,box都被我们看成是一个排版元素,比如:<div style="border: solid 1px blue"> abc </div>和<table> <tr> <td> <span> <i> abc </i> </span> </td> </tr> </table>就可以被看成是两个排版元素div和table(当然div和table的内部还可以继续细分子的box)。

    在browser的默认排版策略(没有任何的CSS修饰)中,box的inline和block分别指的是:

    Inline Level:元素按从左向右排列,就像我们输入文字一样,一行容纳不下了自动分行继续显示。比如text、<a>、<img>、<span>等都属于inline element(除了30个block level的TAGs,和几个none的TAGs,其它大多数的标签都是inline level的;

    Block Level:相对于它的parentElement构成的box来说,它的排版始终会独自占一行,就是在block level的元素后必然会新起一行。比如<form>、<hr>、<div>、<table>、<p>等30个TAGs都属于block element。

    在大多数的情况下,虽然我们完全可以在inline level的元素中嵌套block level的元素,可是这样会对它们的显示效果带来一些混淆和不确定。比如<div>正常情况下是单独占一行的,可是我们却可以使用一个inline level的元素<span>把<div>包裹起来,这时这个<span><div>...</span>构成的box排版属性仍是inline的(e.g.

span&div

)。可是如果我们用<span>把<table>包裹起来,这时这个<span><table>...</span>构成的box的排版属性却成了block的了(e.g.
span&table
)。

    其实inline和block直观的表现就是,比如<a>link1 </a>text1 <a>link2 </a>text2 ...这样的HTML在browser里是可以显示一行上(preview:link1 text1 link2 text2 ...),而<table> <tr> <td> text1 </td> </tr> </table> <table> <tr> <td> text2 </td> </tr> </table> ...是不能显示在一行上的(preview:
text1
text2
)。

    以上是browser对于box的默认的排版策略,而我们可以通过css来改变这些默认的策略。使用css中提供的position(配合top,left)、float和clear三个属性就可以实现用户定制Web页中元素的排版布局策略。 

   :所有示例都只针对IE6.0sp1。

posted on 2005-01-06 23:52 birdshome 阅读(5305) 评论(12)  编辑 收藏 网摘 所属分类: Jscript&Dhtml开发

评论

#1楼    回复  引用    

有时我用 <div style="display:inline">...</div>
2005-01-07 02:36 | 红移 [未注册用户]

#2楼    回复  引用  查看    

嗯,你这个用法属于用户定制的范畴了,我下面会再说说这个,到时候多提意见。
2005-01-07 10:31 | birdshome      

#3楼    回复  引用  查看    

<html>

<p align="center">
test layout!:
<br/>
<table title="table1" align = "right" columns = "2">
<tr>
<td> 1-1</td>
<td> 1-2</td>
</tr>
<tr>
<td> 2-1</td>
<td> 2-2</td>
</tr>
<tr>
<td> 3-1</td>
<td> 3-2</td>
</tr>
<tr>
<td> 4-1</td>
<td> 4-2</td>
</tr>
</table>
</p>
<p>
<a href="192.168.2.160:8282/wap/wae/wmlencode/index.wml" title = "object">[HOME]</a><br/>
</p>


</html>

有次碰到这样 一个页面,有两个P,且分别容纳了一个table和一个A。按照block box的排版,应该是纵向排版一个table和一个A的。但是效果却是横向排版一个A和一个TABLE。觉得很奇怪。不管TABLE是否align right, 它都是一个block box.为什么TABLE align center 时候就是纵向排TABLE和A,而TABLE aligh right就是横向排版了呢?
2005-07-19 10:06 | Amelie      

#4楼 [楼主]   回复  引用  查看    

test layout!:
1-11-2
2-12-2
3-13-2
4-14-2

[HOME]

line 3 line 3 line 3 line 3
2005-07-19 13:06 | birdshome      

#5楼 [楼主]   回复  引用  查看    

@Amelie
     这个是因为table的align属性,会影响table在布局流的状态导致的。在IE浏览器里,除了我讲到过的block和inline这两种默认布局流,还有一种布局方式,叫做floating。当table和iframe这两个元素的align属性被设置为"left"和"right"后,该元素的布局方式就变成了floating了。如果你希望得到你要的效果,可以用table来代替<p>。例如:
test layout!:
1-11-2
2-12-2
3-13-2
4-14-2

[HOME]

line 3 line 3 line 3 line 3
 
// 注意右边的框框,它是一个被我放在第二个<p>里面的,并且align="right"的IFRAME元素。
2005-07-19 13:17 | birdshome      

#6楼    回复  引用  查看    

为什么“当table和iframe这两个元素的align属性被设置为"left"和"right"后,该元素的布局方式就变成了floating了。”呢?这是不是有什么规范定义的?

2005-07-19 14:21 | Amelie      

#7楼 [楼主]   回复  引用  查看    

@Amelie
     这是MSDN里面说到的,你注意看Remarks。其实从表现上我们也能感觉到table和iframe这两个元素的align属性的特别,因为除此外其它任何的container元素,其align或style里面的布局属性,都是影响的container内的元素的对齐方式。
2005-07-19 15:52 | birdshome      

#8楼    回复  引用    

谢谢,msdn上内容好丰富,可以仔细看了。多谢:)
2005-07-20 10:36 | Amelie [未注册用户]

#9楼    回复  引用  查看    

我也才注意到,以前注意到了也看不明白!

Remarks

If the align property is not set on the object, the table is aligned to the left edge of the available space as a block element. If the property is set to left or right, however, the table is aligned as a "floating" object. Successive text and other elements flow to the right of the table if align is set to left, or to the left of the table if align is set to right. For more information, see the styleFloat property.
2005-07-20 11:34 | Boler      

#10楼    回复  引用    

原来是这样,谢谢
2005-08-16 11:52 | carvetime.net [未注册用户]

#11楼    回复  引用  查看    

非常佩服。。。
2006-10-29 00:54 | 心不在焉      

#12楼    回复  引用    

其实TABLE ALIGN置为right后和浮动还是不同的(IE下不同,FF下相同)。float会受hasLayout影响;这种情况不会。
2008-09-07 23:32 | 海健 [未注册用户]




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-01-10 01:53 编辑过
Google站内搜索
[推荐职位]上海盛大网络招聘架构师

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: