三种可视化格式模型:普通文档流、相对定位与绝对定位、浮动

在CSS中是有三种定位机制的:普通文档流、浮动和绝对定位。在未指定其它两种定位机制的情况下,所有框都是在普通文档流中定位的。

普通文档流:

  普通文档流,顾名思义,就是根据块级元素的标签在HTML里的顺序,像水流一样,从上至下。当然对于行内元素而言,还是在一行中水平排列的。

  这里插入一个积累的小知识点。

  行内元素可 以在水平(内间距、边框。外边距)方向上修改它们水平尺寸,但是在垂直方向上对行内元素的高度是毫无影响的,还有就是直接定义行内元素的 width/height也是毫无影响。对与行内元素来说,它的高度仅仅容纳下它所包含的内容即可。But,通过设置行内元素的行高line- height,就可以增加这个行内元素的高度。(当然还有就是,将行内元素的style属性里设置一个display:block,即可将其转化成块级元素。)


相对定位和绝对定位:

  • 相对定位(relative): 是一种相对于起点的移动,根据top和left值做出改变。但是无论是否移动,元素仍然占据原来的空间,所以移动的元素会导致覆盖的情况。它仍然是被看  作普通文档流的一部分,这和接下来的绝对定位有着本质区别。
  • 绝对定位(absolute): 这是一种非常有用,也经常被人滥用的css技术。绝对定位会使元素脱离普通文档流,不占据文档流的空间。其它元素的布局会忽视绝对定位。它是相对于 基于它的上一个已经定位的祖先元素进行偏移。若没有已经定位的祖先元素,通常情况下就会根据HTML元素进行偏移。进行绝对定位后,会有显示的层级z- index,数值越高,层级越高。
  • 固定定位(fixed): 它也属于绝对定位,脱离文档流,会发生覆盖。但是它是基于视口的定位而且随着滚动条滚动,位置不会发生改变。(IE6并不支持)

下面说说它们的组合用法:

  对于一个嵌套的元素,要让内层元素灵活定位在包含元素的附近。可以先让包含元素position:relative,再让内层元素position:absolute,这样内层元素就会相对于外层元素进行位移。

(很多所见即所得的software,就是将所有元素都进行绝对定位,通过精确的像 素定位各个部分的元素。但是问题也十分明显,可维护性极其低下,一旦有一些例如字号修改等会改变元素尺寸的行为,会导致布局完全混乱,不得不为了这点小改 变,进行页面重构。放弃所见即所得吧,它会让你变得懒惰自满。)


浮动:

重点说一下浮动.

  浮动(float)是最有意思的一个可视化模型,会经常应用到我们实际的前端页面上。

  进行浮动后的元素,会和绝对定位相似,脱离文档流,失去文档流的元素空间。若进行左浮动,脱离文档流的元素会向左移动,直到遇到包含元素的左边缘。若多个元素一起浮动,则除第一个元素之外,其它元素都会定位在前一个浮动元素之后(即它的右边)。

  若包含元素不够宽,则无法水平排列的元素会向下移动,直到有足够的空间。若浮动元素的高度不一致,还会发生元素卡在较高的元素的现象。请看图片。

  还有关于元素浮动造成包含元素高度塌陷。

  因为浮动元素脱离了文档流,所以浮动元素并不会占据包含元素的空间,包含元素高度不会自动撑开,造成塌陷。我们需要做点清除浮动的处理。

  1. 我们可以在包含元素最后增添一个新的空元素,并在空元素style上应用clear:both。但缺点也明显,clear只对块级元素有用,这样会增添了一些无意义的块级标签。
  2. 对包含元素也应用浮动。这个方法万不可使用,如果全部都进行浮动,页面会极其复杂。
  3. 使用overflow的副作用。overflow本是用来对溢出内容进行样式声明,但它有一个“副作用”,就是会清除包含元素里的浮动元素。使用这个方法的缺点是,一旦有溢出内容,则会造成内容被切断,出现清楚浮动的副作用。
  4. 使用:after伪元素(伪类),动态生成元素,并做清除浮动,不会有无意义标签。缺点是不兼容老版IE浏览器。

  一般来说,3、4比较常用,具体怎么用需要看实际情况定夺。

下面详细说一下方法4,一般来说方法4的CSS代码如下:


1

2

3

4

5

6

7

.clear:after {

     content : ".";

     height : 0;

     visibility : hidden;

     display : block;

     clear : both;      

 }

  "."是一个非常小不会被注意的字符。因为要让其不可见,所以要把它的height设置为0,且它的visibility设置为 hidden。最后为了使其变成块级元素能够clear要用到display:block;这样就Done了。当然对于不兼容的老IE还要再加一个类:


1

.ieClear{zoom : 1;}

大致做了一个新手总结,希望可以帮到大家。

时间: 2024-10-04 05:39:57

三种可视化格式模型:普通文档流、相对定位与绝对定位、浮动的相关文章

读《精通css》--第三章可视化格式模型

一. 盒模型: 1. IE 和 盒模型: 非标准盒模型 2. 外边距叠加:什么情况下外边距会叠加? 1)两个垂直的块元素 2)两个包含关系的块元素并且之间没有padding和border隔开 3)外边距与自身发生叠加,空元素,没有padding和border 4)空元素的外边距碰到另一个空元素的外边距. 解决办法:行内元素.浮动元素.绝对定位元素的外边距不会叠加.如果是包含关系的话,加上padding或者border. 二. 3种可视化格式模型: 1. 普通流:块级元素和行内元素. 1)块级框从

三种方法解决android帮助文档打开慢

三种方法解决android帮助文档打开慢 经查是因为本地文档中的网页有如下两段js代码会联网加载信息,将其注释掉后就好了 <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto"> <script src="

盒模型、文档流

盒模型 一.盒子中的区域 一个盒子中主要的属性就5个:width.height.padding.border.margin. width是“宽度”的意思,CSS中width指的是内容的宽度,而不是盒子的宽度. height是“高度”的意思,CSS中height指的是内容的高度,而不是盒子的高度 padding是“内边距”的意思 border是“边框” margin是“外边距” 二.认识padding 背景色会填充到padding中去,padding区域有背景颜色,background-color

内联元素的盒子模型与文档流定位padding属性

        内联元素的盒子模型 1.内联元素不能设置width宽度和高度height span{width:200px ; height:200px}   与     span{width:100px ; height:100px}   表现效果相同,由此可见内联元素不可以设置高度和宽度 2.内联元素可以设置水平方向的内边距padding-left或padding-right span{padding-left:20px ; padding-right:200px} 3.内联元素可以设置垂直

11-[CSS]-标准文档流,display,浮动,清除浮动,overflow

1.标准文档流 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> span{ font-size: 50px; } </style> </head> <body> <d

CSS定位机制Ⅰ——文档流定位

关于CSS的定位机制Ⅰ ㈠概念 对于盒子模型来说,也就是页面元素,这些盒子究竟在页面的什么位置,怎样排列它,那么找到它的位置,确定它的位置,这个就是定位机制所决定的. ㈡分类 文档流, 浮动定位,层定位 ㈢三种类型定位的功能 ⑴文档流定位(flow)   默认 我们不需要额外的设置,每种元素它们在当前的网页上面呈现出来的状态都不同,文档流定位就相当于我们平常写字一样,都是从上到下,从左到右,只是有的元素会单独占一行,有的元素跟其他元素在一行上显示. ⑵浮动定位(float) 改变默认的文档流定位

CSS可视化格式模型(CSS Mastery随笔)

CSS渲染页面的时候,把每个文档元素看作是盒子. CSS盒子模型 margin,padding,border,内容. margin会出现margin折叠.上下元素的margin折叠.左右的不折叠.包含的元素之间marign也会折叠.margin折叠的好处是文档排版齐整. 每个元素都会有一个框.这个框分两种类型.块级元素的块框.行内元素的行内框. 行框:还有行框的概念,行框的高度由中间最高的行内框决定.设置行内框的高度.padding.margin并不影响行框的高度.行框的高度line-heigh

CSS 文档流技巧,让布局更简单

看文章之前,先来看两个例子.这是我们在项目中最常见的项目布局方式. 案例一:多个容器按照相同间距水平排列. 案例二:常见的菜单导航 看到这两个案例时,你可以先短暂的想想平时都是如何实现的,很多同学的答案应该是这样的. // 案例一 <div class="demo"> <div class="item"></div> <div class="item"></div> <div cl

网站布局之------浮动(float)和定位(position)(绝对定位,相对定位,静态固定定位),***什么叫脱离文档流?

网站布局之------浮动(float)和定位(position)(绝对定位,相对定位,静态固定定位),***什么叫脱离文档流? @参考文档:http://www.cnblogs.com/jenry/archive/2007/07/15/818660.html @什么叫脱离文档流?注意,只有绝对定位absolute和浮动float才会脱离文档流! 答案:CSS中脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位. ---部分无视和完全无视