CSS中的定位与浮动

本文主要讲述CSS中的三种定位样式static、relative和absolute的区别以及浮动元素的特征。

定位样式

CSS中定位样式position的取值有三个,默认值:static,相对定位:relative,绝对定位:absolute。

static: 采用默认定位时,一般可以不用设置position样式。 各个元素是按照文档流的形式从上往下排,同时保证块状元素独占一行的原则。

relative : 生成相对定位的元素,相对于其正常位置进行定位,同时配合top, bottom, left和right样式完成定位。它不会影响同一容器中其他元素的定位。

相对定位元素并没有脱离文档流,其参造物是其本身,不管你怎么移动,它原有的位置还是会留着,父容器对其布局影响照旧。

absolute:对于绝对定位的元素,则需要分其的父元素及以上元素的定位情况来说:

  1. 父元素中有设置了Position属性,并且属性值为 absolute 或 relative的时候,那么子元素相对于该父元素来进行定位。
  2. 父元素没有设置非static的Position属性,则以其第一个设置了非static的Position属性的祖先元素来进行定位。如果不存在一个有着position属性的祖先元素,那么那就会以body为定位对象,按照浏览器的窗口进行定位。

绝对定位是将元素彻底从文档流删除,并相对于其父元素定位,元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样,该元素再也不会影响父元素中其他元素的布局了。

浮动元素

假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。

浮动元素会生成一个块级框,而不论它本身是何种元素。如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。

如果浮动元素跳过了这一行,那么浏览器就认为这一行没有足够的空间,其他div在浮动过程中会自动跳过这一行,即使该行还有空间容纳其他div。

浮动元素是脱离文档流的,脱离文档流的元素没有实际高度,不会把父元素撑开。对于浮动属性来说,位置属性(left/top/right/bottom)是没有用的。

浮动元素之后的文字内容,如果是汉字则会自动换行; 如果是连续的数字或英文字母,则不会换行,设置word-wrap : break-word;属性会使内容强制换行。

看下面的例子。

<style>
#container {
position:relative;
width:300px;
height:100px;
background:#039;
}
#A {
float:left;
top:0;
left:0;
width:50px;
height:40px;
background:#C00;
}
</style>
</head>
<body>
<div id="container">
<div id="A">你好</div>
<div id="B">
1234567890abcdabcdabcdabcdabcdabcdabcdabcd</div>
</body>

原本应该环绕在红色块周围的文字因不能换行而显示在其下方,并且部分文字被容器遮住了。

浮动元素和绝对定位的区别

浮动元素设计之初是为了使文本环绕图像排版,而后来的CSS允许浮动任何元素。理解了这一设计原则,就能理解它与其他定位方式的区别了。

  1. 绝对定位是将元素彻底从文档流删除,并相对于其包含块定位(包含块可能是文档中的另一个元素或者是初始包含块),元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样,该元素再也不会影响其他元素的布局了。
  2. 浮动,会以某种方式将浮动元素从文档的正常流中删除,并把浮动元素向左边和右边浮动,不过它们还是对文档的其余部分有影响。当一个元素浮动时,其他内容会“环绕”该元素。

看下面的例子

<style>
body {
color:#FFF;
}
#container {
position:relative;
width:300px;
height:100px;
background:#039;
}
#A {
position:absolute;
top:0;
left:0;
width:50px;
height:40px;
background:#C00;
}
</style>
</head>
<body>
<div id="container">
<div id="A">你好</div>
<div id="B">
浮动元素和绝对定位的区别浮动元素和绝对定位的区别浮动元素和绝对定位的区别浮动元素和绝对定位的区别</div>
</body>

把A元素的定位改成浮动后,其后的内容会环绕该元素。

 #A {
float:left;
top:0;
left:0;
width:50px;
height:40px;
background:#C00;
}

文本流和文档流

下面顺便引出文本流和文档流的概念。

文档流是相对于盒子模型讲的。

文本流是相对于文子段落讲的。

元素浮动之后,会让它跳出文档流,也就是说当它后面还有元素时,其他元素会无视它所占据了的区域,直接在它身下布局。但是文字却会认同浮动元素所占据的区域,围绕它布局,也就是没有拖出文本流。

但是绝对定位后,不仅元素盒子会拖出文档流,文字也会出文本流。那么后面元素的文本就不会在认同它的区域位置,会直接在它后面布局,不会在环绕。

CSS中的定位与浮动的更多相关文章

  1. 关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置)

    关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置) 欢迎转发,但是请填写原博客地址https://www.cnblogs.com/JNovice/p/9536910.html  前言:最近在 ...

  2. css中的定位属性position(转)

    css中的定位属性position   同样的也是上课的时候发现学生难以理解的一些问题拿出来记录一下,希望帮助初学者. 在css中定位属性position的运用在页面中是很常用的,特别是一些结合js来 ...

  3. CSS中如果实现元素浮动和清除浮动,看这篇文章就足够了

    浮动基本介绍 在标准文档流中元素分为2种,块级元素和行内元素,如果想让一些元素既要有块级元素的特点也同时保留行内元素特点,只能让这些元素脱离标准文档流即可. 浮动可以让元素脱离标准文档流,可以实现让多 ...

  4. CSS中的定位机制

    CSS3 中有三种定位机制 : 普通文档流 (text)| 浮动(float) | 定位(position) 普通文档流 就是CSS中默认的文本文档 普通流中,元素位置由文档顺序和元素性质决定,块级元 ...

  5. 总结一下CSS中的定位 Position 属性

    在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...

  6. css中的定位

    上一篇博客,我大概介绍了下浮动的使用及行为.其实在整个文档布局中,定位也对我们整个的页面排版有非常好的帮助,当然前提是使用得当. 一.定位分类: a.静态定位  position:static;   ...

  7. [转]总结一下CSS中的定位 Position 属性

    在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...

  8. css中元素定位

    在html中网页可以看成一个立体的空间,一个完整的页面是由很多个页面堆积形成的,如下图所示 CSS中Position属性有四个可选值,它们分别是:static.absolute.fixed.relat ...

  9. 对css中的定位属性postion刨根解牛

    定位的基本思想很简单: 它允许你定义元素框相对于其正常位置应该出现的位置(relative),或者相对于父元素(absolute).另一个元素甚至浏览器窗口本身的位置(fixed).显然,这个功能非常 ...

随机推荐

  1. lesson - 13 Linux系统日常管理2

    内容概要: 1. Linux抓包工具 tcpdump 系统自带抓包工具tcpdump -nn -i eth0 tcp and host 192.168.0.1 and port 80tcpdump - ...

  2. 详解PHP反射API

    PHP中的反射API就像Java中的java.lang.reflect包一样.它由一系列可以分析属性.方法和类的内置类组成.它在某些方面和对象函数相似,比如get_class_vars(),但是更加灵 ...

  3. 豹哥嵌入式讲堂:ARM开发中有用的文件(1)- source文件

    大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的source文件种类. 众所周知,嵌入式开发属于偏底层的开发,主要编程语言是C和汇编.所以本文要讲的source文件主要指的就 ...

  4. PHP Session的优化使用

    前言 首先说一下,原版session实际并不是很烂,如果你的项目不是高并发项目,完全可以使用原版session. PHP默认的session是以文件形式保存在本地磁盘上的,每次访问实际就是一次io操作 ...

  5. vim编辑器的使用技巧

    vim(vi)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是“visual interface”的缩 ...

  6. 关于asp.net web form 和 asp.net mvc 的区别

    asp.net web forms 有什么缺陷? 1.视图状态臃肿:服务器和客户端传输过程中包含了大量的试图状态——在现在的web程序中甚至多达几百kb,而且每次往返都会请求,导致服务器请求带宽增加, ...

  7. C# DataTable抽取Distinct数据(不重复数据)

    http://blog.csdn.net/jyh_jack/article/details/17959821 DataTable dataTable; DataView dataView = data ...

  8. H5 + 开发App(分享功能)

    我们开发App有一个不可少的功能,就是分享功能.让用户将app分享到他的社交圈.比如微信 QQ 微博等等. 准备工作:我们要先去申请相关的权限, 这是传送门http://ask.dcloud.net. ...

  9. Spark入门,概述,部署,以及学习(Spark是一种快速、通用、可扩展的大数据分析引擎)

    1:Spark的官方网址:http://spark.apache.org/ Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL.Spark Streaming.Graph ...

  10. Oracle COMMIT语句的处理顺序

    Oracle COMMIT语句相信大家都有一定的了解,下面就为您介绍Oracle COMMIT语句的处理步骤,希望对您能有所帮助. Oracle COMMIT语句处理顺序 当事务提交时,Oracle分 ...