简明的例子讲解position:relative、float、overflow:hidden和inline-block
标签(空格分隔): css relative float
我们通过一个简单的实验来了解position:relative
float
overflow:hidden
和 inline-block
。
下面以index.html和layout_new.css这两个文件为例来探讨。
index.html:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="assets/css/layout_new.css">
</head>
<body>
<div class = "a1">
a1
<div class = "b1">
b1
</div>
between b1 and b2
<div class = "b2">
b2
</div>
</div>
</body>
</html>
layout_new.css
.a1{
border:10px red solid;
width:90%;
overflow:hidden;
}
.b1, .b2{
display:inline-block;
border:5px blue solid;
width:40%;
}
.b1{
position:relative;
left:100px;
height:200px;
background-color:red;
}
.b2{
float:left;
height:300px;
}
- 在layout_new.css中,我们重点关注以下几点:
- .class为a1的div被设置为overflow:hidden
- .b1与.b2倍设置为inline-block
- .b1被设置为 position:relative和left:100px;
- .b2被设置为float:left
代码运行效果图如下:
我们一一分析:
首先,inline-block是一种布局方式。之后的inline对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性。
然后,overflow:hidden在高/宽度确定时能把多余的部分裁剪掉,但是如果没指定高/宽度的话(比如此例中,.a1就没指定高度)那么就可以根据内部内容的高度来自行适应。所以尽管.b1和.b2的高度不同,但最终.a1为了包含所有元素,其高度便以.b2为准了。
- 如果一定要追究高度自适应的效果的原因,那就是因为overflow:hidden本质的功能还有一个是清除浮动元素(所以浮动的b2被考虑在高度计算范围内)。
overflow:hidden可防止float元素遮盖原本在那的元素而发生的重叠现象。
- 如果一定要追究高度自适应的效果的原因,那就是因为overflow:hidden本质的功能还有一个是清除浮动元素(所以浮动的b2被考虑在高度计算范围内)。
不加overflow:hidden的话效果如下:
(由于b2是float的所以脱离了文档流所以a1高度计算时没有考虑 b2的高度)
.b1中的position:relative就是让对象脱离原本的文档流。
在此例中,本来b1的位置是这样的
但加了position:relative
和left:100px
后,它就相对于原来按文档流顺序时本该出现的位置往右偏移了100px。
.b2的float:left
就是在文档流安排完成后,浮动到对应位置。浮动的对象是在文档流安排完成后再计算位置的。float对象在没设置overflow:hidden
的时候可能会与原本在那的元素重叠,但设置了overflow:hidden
后可以避免这种重叠情况。
那么总的来说我们可以推测出浏览器在布局时的顺序时这样的:
- 先把float以外的内容按文档流一个个地显示到屏幕上(先不管relative的偏移,照常放置在那)
- 然后把各个relative按设定的偏移去让它偏移。
- 最后让float元素浮进去,把能挤开的元素都挤开
- 于是就有了最后的效果图。
简明的例子讲解position:relative、float、overflow:hidden和inline-block的更多相关文章
- position,display,float,overflow,margin,padding之间的相互影响
1.元素分为块级元素和行内元素, 块级元素可以设置宽高,会自动换行,并且会发生相邻margin的合并问题.行内元素设置宽和高无效,以水平方向排列,(行内元素,绝对定位,浮动元素不会发生外边距合并)并且 ...
- 对CSS中的Position、Float属性的一些深入探讨
对CSS中的Position.Float属性的一些深入探讨 对于Position.Float我们在平时使用上可以说是使用频率非常高的两个CSS属性,对于这两个属性的使用上面可能大多数人存在一些模糊与不 ...
- 装载:对CSS中的Position、Float属性的一些深入探讨
对CSS中的Position.Float属性的一些深入探讨 对CSS中的Position.Float属性的一些深入探讨 对于Position.Float我们在平时使用上可以说是使用频率非常高的两个 ...
- 使用position:relative制作下边框下的小三角
在制作tab选项卡的时候,有时会有下边框,且下边框下另一个头向下的小三角,这全然能够用css来实现,而不必使用背景图片. 由于使用背景图片时会有一个问题,选项卡内容字数不同.导致使用背景图片时无法控制 ...
- 解决IE6,IE7下子元素使用position:relative、父元素使用overflow:auto后,子元素不随着滚动条滚动的问题
解决IE6,IE7下子元素使用position:relative.父元素使用overflow:auto后,子元素不随着滚动条滚动的问题 在IE6,IE7下,子元素使用position:relati ...
- 内层元素设置position:relative后父元素overflow:hidden overflow:scroll失效 解决方法
内层元素设置position:relative后父元素overflow:hidden overflow:scroll 都失效 解决方法:在position:relative的外层父容器加positio ...
- CSS布局 ——从display,position, float属性谈起
页面布局,或者是在页面上做些小效果的时候经常会用到 display,position和float 属性,如果对它们不是很了解的话,很容易出现一些莫名其妙的效果,痛定思痛读了<CSS Master ...
- 谈谈CSS的布局,display、position、float
前言 前端一直是我的一个很大的缺憾,这段时间痛顶思痛,决定好好的把前台的东西加强,这不,在学习了一段时间js之后,在做一些小练习,却发现最基本的一些css知识却还不了解,所以便有了这篇博文. 块级元素 ...
- CSS布局 ——从display,position, float属性谈起(转)
CSS布局 ——从display,position, float属性谈起 页面布局,或者是在页面上做些小效果的时候经常会用到 display,position和float 属性,如果对它们不是很了 ...
随机推荐
- Rikka with Graph(联通图取边,暴力)
Rikka with Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- spring NotWritablePropertyException异常
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'userDao' of bea ...
- 通过pull解析器操作安卓的xml
通过pull解析器操作安卓的xml 例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,代码请见本页下面备注: =================== ...
- 【Winform开发2048小游戏】
先来看一下界面: 游戏帮助类 class GameCore { //游戏地图 private int[,] map = new int[4, 4]; //合并时用到的临时数组 private int[ ...
- C++ ofstream和ifstream
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O, ...
- 前端模块与CMS结合
前端模块与CMS结合 在<FIS官方技术群>经常看到一些讨论,这次是 前端组件化与CMS的相关讨论,主要观点来自群里 漂流瓶(张云龙前辈). CMS是运营人员直接操作,我们往往需求各种各样 ...
- package.json配置项
以下示例列举了常用的地方,一些不常用的可以查看文档:文档地址 { //该模块名字 "name":"test" , //版本 "version" ...
- JavaScript引用类型之Array数组之强大的splice()方法
splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...
- 在windows后台调用webservice
1.首先要创建个webservice,然后再webservice写一个方法如图 2.然后将WebService1.asmx 在浏览器中浏览会出现如图所示(该地址很重要,复制此地址在下边程序中要用到) ...
- SQL Server 大数据量批量插入
private void AddShuJu_Click(object sender, RoutedEventArgs e) { Stopwatch wath = new Stopwatch(); wa ...