CSS中的定位与浮动
CSS中的定位与浮动
本文主要讲述CSS中的三种定位样式static、relative和absolute的区别以及浮动元素的特征。
定位样式
CSS中定位样式position的取值有三个,默认值:static,相对定位:relative,绝对定位:absolute。
static: 采用默认定位时,一般可以不用设置position样式。 各个元素是按照文档流的形式从上往下排,同时保证块状元素独占一行的原则。
relative : 生成相对定位的元素,相对于其正常位置进行定位,同时配合top, bottom, left和right样式完成定位。它不会影响同一容器中其他元素的定位。
相对定位元素并没有脱离文档流,其参造物是其本身,不管你怎么移动,它原有的位置还是会留着,父容器对其布局影响照旧。
absolute:对于绝对定位的元素,则需要分其的父元素及以上元素的定位情况来说:
- 父元素中有设置了Position属性,并且属性值为 absolute 或 relative的时候,那么子元素相对于该父元素来进行定位。
- 父元素没有设置非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允许浮动任何元素。理解了这一设计原则,就能理解它与其他定位方式的区别了。
- 绝对定位是将元素彻底从文档流删除,并相对于其包含块定位(包含块可能是文档中的另一个元素或者是初始包含块),元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样,该元素再也不会影响其他元素的布局了。
- 浮动,会以某种方式将浮动元素从文档的正常流中删除,并把浮动元素向左边和右边浮动,不过它们还是对文档的其余部分有影响。当一个元素浮动时,其他内容会“环绕”该元素。
看下面的例子
<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中的定位与浮动的更多相关文章
- 关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置)
关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置) 欢迎转发,但是请填写原博客地址https://www.cnblogs.com/JNovice/p/9536910.html 前言:最近在 ...
- css中的定位属性position(转)
css中的定位属性position 同样的也是上课的时候发现学生难以理解的一些问题拿出来记录一下,希望帮助初学者. 在css中定位属性position的运用在页面中是很常用的,特别是一些结合js来 ...
- CSS中如果实现元素浮动和清除浮动,看这篇文章就足够了
浮动基本介绍 在标准文档流中元素分为2种,块级元素和行内元素,如果想让一些元素既要有块级元素的特点也同时保留行内元素特点,只能让这些元素脱离标准文档流即可. 浮动可以让元素脱离标准文档流,可以实现让多 ...
- CSS中的定位机制
CSS3 中有三种定位机制 : 普通文档流 (text)| 浮动(float) | 定位(position) 普通文档流 就是CSS中默认的文本文档 普通流中,元素位置由文档顺序和元素性质决定,块级元 ...
- 总结一下CSS中的定位 Position 属性
在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...
- css中的定位
上一篇博客,我大概介绍了下浮动的使用及行为.其实在整个文档布局中,定位也对我们整个的页面排版有非常好的帮助,当然前提是使用得当. 一.定位分类: a.静态定位 position:static; ...
- [转]总结一下CSS中的定位 Position 属性
在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...
- css中元素定位
在html中网页可以看成一个立体的空间,一个完整的页面是由很多个页面堆积形成的,如下图所示 CSS中Position属性有四个可选值,它们分别是:static.absolute.fixed.relat ...
- 对css中的定位属性postion刨根解牛
定位的基本思想很简单: 它允许你定义元素框相对于其正常位置应该出现的位置(relative),或者相对于父元素(absolute).另一个元素甚至浏览器窗口本身的位置(fixed).显然,这个功能非常 ...
随机推荐
- 几个关于js数组方法reduce的经典片段
以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...
- datatable使用笔记
这是一个使用datatable的jsp文件实例,实现了点击单元格后编辑单元格所在行的内容. <%@ page pageEncoding="UTF-8"%> <!D ...
- css实现多行文本溢出显示省略号(…)全攻略
省略号在ie中可以使用text-overflow:ellipsis了,但有很多的浏览器都需要固定宽度了,同时ff这些浏览器并不支持text-overflow:ellipsis设置了,下文来给各位整理一 ...
- .Net WinForm 控件键盘消息处理剖析
在WinForm控件上我们可以看到很多关于键盘消息处理的方法,比如OnKeyDown, OnKeyPress, ProcessCmdKey, ProcessDialogKey,IsInputKey等等 ...
- python 模块:csv
转自:http://www.cnblogs.com/sislcb/archive/2008/12/15/1355481.html (感谢整理) 举几个例子来介绍一下,Python 的 CSV模块的使用 ...
- opensuse安装pycurl失败记录
早上在opensuse安装pycurl,一直出现如下错误: pepper@VM_56_243_suse:~/code/gitosis-autotest> pip install pycurl C ...
- SQL Server 禁用扩展存储过程
概述 扩展存储过程是 SQL Server 实例可以动态加载和运行的 DLL.扩展存储过程是使用 SQL Server 扩展存储过程 API 编写的,可直接在 SQL Server 实例的地址空间中运 ...
- python基础(六)dict字典和文件操作open
字典dict 使用key来标注value的数据类型,key和value是一一对应的.在字典中key是唯一的,所以字典也是无序的. #定义一个字典 dict = { 'name' : 'sylar', ...
- 前端js之JavaScript
知识预览 一小知识 二 JavaScript的基础 BOM对象 DOM对象 实例练习 js拓展 小知识 核心(ECMAScript) 文档对象模型(DOM) Document object model ...
- EF Core 使用编译查询提高性能
今天,我将向您展示这些EF Core中一个很酷的功能,通过使用显式编译的查询,提高查询性能. 不过在介绍具体内容之前,需要说明一点,EF Core已经对表达式的编译使用了缓存:当您的代码需要重用以前执 ...