基于文档流、浮动等一系列问题的详解

文档流

将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素,即为文档流.

(自己的理解是从头到尾按照文档的顺序,该在什么位置就在什么位置,也可以按照上面的意思理解,自上而下,自左到右的顺序)

每个非浮动块级元素都独占一行, 浮动元素则按规定浮在行的一端. 若当前行容不下, 则另起新行再浮动.

(块级元素:div  , p  , form,   ul,  li ,  ol, dl,    form,   address,  fieldset,  hr, menu,  table

 1)块级元素会独占一行,其宽度自动填满其父元素宽度

        行内元素不会独占一行,相邻的行内元素会排列在同一行里,知道一行排不下,才会换行,其宽度随元素的内容         而变化

 2) 块级元素可以设置 width, height属性,行内元素设置width,  height无效

         【注意:块级元素即使设置了宽度,仍然是独占一行的】

 3) 块级元素可以设置margin 和 padding.  行内元素的水平方向的padding-left,padding-right,margin-left,margin-right 都产生边距效果,但是竖直方向的padding-top,padding-bottom,margin-top,margin-bottom都不会产生边距效果。(水平方向有效,竖直方向无效)

下面会继续介绍块级元素与内联元素。

内联元素不会独占一行. 几乎所有元素(包括块级,内联和列表元素)均可生成子行, 用于摆放子元素.

有三种情况将使得元素脱离文档流而存在,分别是浮动,绝对定位, 固定定位. 但是在IE中浮动元素也存在于文档流中(还让我觉得这样很合理><).

{浮动元素不占任何正常文档流空间,而浮动元素的定位还是基于正常的文档流,然后从文档流中抽出并尽可能远的移动至左侧或者右侧。文字内容会围绕在浮动元素周围。当一个元素从正常文档流中抽出后,仍然在文档流中的其他元素将忽略该元素并填补他原先的空间。

浮动概念让人迷惑根源在于浏览器对理论的解读造成的。只能说很多人以IE做标准,其实它不是。}

基于文档流, 我们可以很容易理解以下的定位模式:

static默认定位方式
relative相对定位,相对于原来的位置,但是原来的位置仍然保留
absolute定位,相对于最近的非标准刘定位,原来的位置消失,被后边的位置所顶替

 

下面先演示相对定位的案例

 

[html]  view plain  copy
 
 print ?
  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.     <title>relative.html</title>  
  5.       
  6.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  7.     <meta http-equiv="description" content="this is my page">  
  8.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  9.   
  10.   <link rel="stylesheet" href="../css/relative.css" type="text/css"></link>  
  11.   </head>  
  12.     
  13.   <body>  
  14.     <div class="style1">内容一</div>  
  15.     <div id="special" class="style1">内容二</div>  
  16.     <div class="style1">内容三</div>  
  17.     <div class="style1">内容四</div>  
  18.   </body>  
  19. </html>  


CSS代码如下

 

 

[css]  view plain  copy
 
 print ?
  1. .style1{  
  2.     width300px;  
  3.     height100px;  
  4.     background-colorgray;  
  5.     border1px solid red;  
  6.     floatleft;  
  7.     margin-left10px;  
  8. }  
  9.   
  10. #special{  
  11.     positionrelative;/*这里使用了相对定位,left意思是在原来的位置向左移动多少*/  
  12.     left: 40px;/*左侧坐标变大,向右移动*/  
  13.     top: 200px;  
  14. }  


其中的left是值扩大left的长度,也就是向右移动,当然了,是相对于这个模块的原来的位置。他的后面的元素不会顶

 

替他的位置,效果图


然后是绝对定位。其中,HTML代码不变,至改变了CSS代码

 

[css]  view plain  copy
 
 print ?
  1. .style1{  
  2.     width300px;  
  3.     height100px;  
  4.     background-colorgray;  
  5.     border1px solid red;  
  6.     floatleft;  
  7.     margin-left10px;  
  8. }  
  9.   
  10. #special{  
  11.     positionabsolute;/*这里使用了相对定位,left意思是在原来的位置向左移动多少*/  
  12.     left: 40px;/*左侧坐标变大,向右移动*/  
  13.     top: 200px;  
  14. }  


绝对定位这里就是相对于body这个元素的绝对定位,当然了,当他的最近处有一个非标准流的东西,他就会跟那个非

 

标准流为标准进行配对。

效果如如下

内联元素是什么意思呢?什么是块级别元素。

《CSS权威指南》中文字显示:任何不是块级元素的可见元素都是内联元素。其表现的特性是” 行布局”形式,这里的”行布局”的意思就是说其表现形式始终以行进行显示。比如,我们设定一个内联元素border-bottom:1px solid #000;时其表现是以每行进行重复,每一行下方都会有一条黑色的细线。如果是块级元素那么所显示的的黑线只会在块的下方出现。

p、h1、或div等元素常常称为块级元素,这些元素显示为一块内容;Strong,span等元素称为行内元素,它们的内容显示在行中,即”行内框”。(可以使用display=block将行内元素转换成块元素,display=none表示生成的元素根本没有框,也既不显示元素,不占用文档中的空间)

A:行内就是在一行内的元素,只能放在行内;块级元素,就是一个四方块,可以放在页面上任何地方。

B:说白了,行内元素就好像一个单词;块级元素就好像一个段落,如果不另加定义的话,它将独立一行出现。

C:一般的 块级元素诸如段落<p>、标 题<h1><h2>…、列表,<ul><ol><li> 、表格<table>、表单<form>、DIV<div>和BODY<body>等元素。而内联元素则如: 表单元素<input>、超级链接<a>、图像<img>、<span> ……..

D:块级无素的显著特点是:每个块级元素都是从一个新行开始显示,而且其后的无素也需另起一行进行显示。

E:<span>在CSS定义中属于一个行内元素,而<div>是块级元素。

对于学过CSS的人来说一听就能明白。可对于新手来说不易理解,我主要对新手说通熟点吧!

用容器这一词会更容易形象理解它们的存在与用途,行内元素相当一个小容器,而<div>相当于一个大容器,大容器当然可以放一个小容器 了。<span>就是小容器,这样一说你也许会在脑海中有一个初步的印象了吧,如果我们想在大容器中装一些清水。但我也想在里装一些墨水怎么 办?很简单,我们把小容器拿出来装上墨水然后放入大容器里的清水中不就成了吗。

我在举个简单的一个实际例子吧:比如

<div>abcdefg</div>

我想用CSS定义字母c的样式,因此我们就可以用到<span>了。

<div>ab<span>c</span>defg</div

<div>ab<span>c</span>defg</div>

块元素(block element)一般是其他元素的容器元素,块元素一般都从新行开始,它可以容纳内联元素和其他块元素,常见块元素是段落标签’P”。”form”这个块元素比较特殊,它只能用来容纳其他块元素。

如果没有css的作用,块元素会顺序以每次另起一行的方式一直往下排。而有了css以后,我们可以改变这种html的默认布局模式,把块元素摆放到你想要 的位置上去。而不是每次都愚蠢的另起一行。需要指出的是,table标签也是块元素的一种,table based layout和css based layout从一般使用者(不包括视力障碍者、盲人等)的角度来看这两种布局,除了页面载入速度的差别外,没有其他的差别。但是如果普通使用者不经意点了 查看页面源代码按钮后,两者所表现出来的差异就非常大了。基于良好重构理念设计的css布局页面源码,至少也能让没有web开发经验的普通使用者把内容快 速的读懂。从这个角度来说,css layout code应该有更好的美学体验吧。

你能够把块容器元素div想象成一个个box,或者如果你玩过剪贴文载的话,那就更加容易理解了。我们先把需要的文章从各种报纸、杂志总剪 下来。每块剪下来的内容就是一个block。然后我们把这些纸块按照自己的排版意图,用胶水重新贴到一张空白的新纸上。这样就形成了你自己独特的文摘快报 了。作为一种技术的延伸,网页布局设计也遵循了同样的模式。.

内联元素(inline element)一般都是基于语义级(semantic)的基本元素。内联元素只能容纳文本或者其他内联元素,常见内联元素 “a”。

块元素(block element)和内联元素(inline element)都是html规范中的概念。块元素和内联元素的基本差异是块元素一般都从新行开始。而当加入了css控制以后,块元素和内联元素的这种属 性差异就不成为差异了。比如,我们完全可以把内联元素cite加上display:block这样的属性,让他也有每次都从新行开始的属性。

可变元素的基本概念就是他需要根据上下文关系确定该元素是块元素或者内联元素。可变元素还是属于上述两种元素类别,一旦上下文关系确定了他的类别,他就要遵循块元素或者内联元素的规则限制。大致的元素分类见全文。

ps:关于inline element的中文叫法,有多种内联元素、内嵌元素、行内元素、直进式元素。基本上没有统一的翻译,爱怎么叫怎么叫吧。

猜你喜欢

转载自turbo12138.iteye.com/blog/2314805