css中width的计算方式,以及width:100%的参考系
PS:测试浏览器均为chrome。
首先说下负margin的影响。
正常html页面在显示时,默认是根据文档流的形式显示的。文档流横向显示时,会有一个元素横向排列的基准线,并且以最高元素的vertical-align设置为基准线,此元素的高度也为本行的高度。当横向空间不够,或者元素为block时,文档流会换行显示。
除去绝对定位、固定定位的元素,文档中的每一个元素在文档流中是占据一定空间的,此空间包括margin、border、padding、content。根据元素的display、line-height、text-align、vertical-align、float等属性,对元素进行排列布局。
如果对一个处于文档流中的元素设置了margin属性值,会改变紧接其后的元素在文档流的位置。
元素的margin为正值,会使此元素占据的文档流位置加大,同改变padding和content大小效果相似。
例
<div style="display:inline-block;width:100px;height:100px;border:1px solid black;margin-bottom:10px;vertical-align:bottom;"></div>
<div style="display:inline-block;width:100px;height:50px;border:1px solid black;"></div>
会发现第二个div同第一个div的下边缘对齐时,将第一个div的margin-bottom考虑进来了,距离第一个div的bottom正好向下移动了10px。
元素margin为负值,会使此元素本身占据的文档流空间减小,同时使出现的下一个元素占据的文档流位置,向上和向左移动,同文档流的方向正好相反。文档流换行显示时,会出现下行元素同上行元素重合的现象。而改变padding和content则无法达到此效果,因为padding和content最小为0。
<div style="display:inline-block;width:100px;height:100px;border:1px solid black;margin-bottom:-10px;vertical-align:bottom;"></div>
<div style="display:inline-block;width:100px;height:50px;border:1px solid black;"></div>
此时发现,第二个div的位置向上移动了,并且距离第一个div的bottom正好向上移动了10px。如果margin-left和margin-right为负值,会发现元素出现了重叠。
width值有四种:auto、length(px、em)、%、inherit。
auto,根据元素的显示方式(block,inline-block),一级父元素内部的content大小,自适应子元素的显示大小,此时子元素的auto宽度会包括margin的大小。
%,取父元素的content宽度,设置为此子元素的content加border的总宽度。如果此时子元素有padding、margin等属性值,会发现子元素可能会超出父元素的显示区域,与父元素之外的显示元素重叠。
如果子元素拥有box-sizing:border-box属性, 会取父元素的content宽度,设置为此子元素的content加padding加border的总宽度。有margin时,还是可能会与父元素以及父元素之外的元素重叠。
总结:无box-sizing:border-box时,百分比或者数值的width设置只影响元素content,有box-sizing:border-box时影响padding+content;margin不受影响,margin只会影响元素在文档流的位置和占据的空间,不参与元素大小的计算。width的百分比,参考的是父元素的content的width。此外所有和百分比相关的位置、大小设置,都是基于父元素的content。除了line-height~
css中width的计算方式,以及width:100%的参考系的更多相关文章
- 问答:怎样规划CSS 中 的命名方式 怎样看待 CSS 中 BEM 的命名方式?
好多盆友 非常纠结 css命名规则 怎么弄,还没起步就被绊住了.那么今天蝈蝈就针对这个问题来讨论一下 没什么技术 含量.但却对效率开发至关重要的 "问题". 下文是一些知乎大神的个 ...
- 讨论CSS中的各类居中方式
今天主要谈一谈CSS中的各种居中的办法. 首先是水平居中,最简单的办法当然就是 margin:0 auto; 也就是将margin-left和margin-right属性设置为auto,从而达到水平居 ...
- css中两种居中方式text-align:center和margin:0 auto 的使用场景
关于使用text-align:center和margin:0 auto 两种居中方式的比较 前言:最近由于要学习后端,需要提前学习一部分前端知识,补了补css知识,发现狂神在讲这一部分讲的不是特别清楚 ...
- css中三种隐藏方式
1.overflow 溢出隐藏 overflow:hidden 2.display 隐藏不占据原来的文档,即会让出空间 display:black 显示 display:none 隐藏 3.vis ...
- CSS中的那点事儿(一)--- CSS中的单位1
单位主要用在规定元素的数值性css属性的,这里主要讨论应用的比较多的是width height padding margin font-size,而单位中应用最广泛就是%.px.em 百分比 百分比 ...
- 浅析CSS中的BFC和IFC
1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...
- CSS中定位和浮动对行内元素的宽高的影响
行内元素的大小是由元素里面的内容撑开的宽高决定的,就算在css中对行内元素设置width,height.行内元素也会忽略宽高的设置. 但是当行内元素使用position:absolute或者posit ...
- css中的单位和css中的颜色表示方法
css中颜色的表示方式: 图片来源http://www.w3school.com.cn
- css中的width,height,属性与盒模型的关系
这段话很容易记住盒模型: css中盒子模型包含属性margin.border.padding.content,他们可以把它转移到我们日常生活中的盒子(箱 子)上来理解,日常生活中所见的盒子也具有这些属 ...
随机推荐
- Python学习笔记07
时间: tickets 时间元组 格式化的时间 日历 import time tickets = time.time() print tickets print time.localtime() ...
- BZOJ1001 [BeiJing2006]狼抓兔子(平面图最小割转最短路)
..和HDU3870类似..注意n=1和m=1的情况. #include<cstdio> #include<cstring> #include<queue> #in ...
- Prerequisites?[HDU1144]
Prerequisites?Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- div+css定位position详解
div+css定位position详解 1.div+css中的定位position 最主要的两个属性:属性 absolute(绝对定位) relative(相对定位),有他们才造就了div+css布局 ...
- glup Browsersync
http://www.browsersync.cn/#installhttp://www.browsersync.cn/docs/gulp/http://www.mamicode.com/info-d ...
- Here's what C++ is
Yes this article describes what c++ exactlyis http://www.skywind.me/blog/archives/1398#comment-3671 ...
- 【BZOJ】3240: [Noi2013]矩阵游戏
题意 给出\(n, m(1 \le n, m \le 10^{1000000})\),求\(f(n, m) \ \mod \ 10^9+7\) $$\begin{cases}f(1, 1) = 1 \ ...
- POJ 1564 经典dfs
1.POJ 1564 Sum It Up 2.总结: 题意:在n个数里输出所有相加为t的情况. #include<iostream> #include<cstring> #in ...
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults是首选.下次再登陆的时候就可以直接从NSUserDefa ...
- Linux下memcached安装和启动方法
Linux下memcached安装和启动方法 1. 首先下载memcached 和 libevent 包. Memcached用到了libevent这个库用于Socket的处理.下面是下载的两个包文件 ...