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,他们可以把它转移到我们日常生活中的盒子(箱 子)上来理解,日常生活中所见的盒子也具有这些属 ...
随机推荐
- iOS学习01C语言数据类型
1.注释 // 单行注释 // 注释对代码起到解释说明的作用,注释是给程序员看的,不参与程序运行 /* 多行注释 Xcode快捷键 全选 cmd+a 复制 cmd+c 粘贴 cmd+v 设 ...
- Android 推送实现
解决数据同步的问题:常用的方法有2种. (1) 定时去服务器上查询数据,也叫Polling. (2) 手机跟服务器之间维护一个 TCP 长连接,或者使用SMS,当服务器有数据时,实时推送到客户端,也就 ...
- Jquery-UI实现弹出框样式
需要引用 <link href="CSS/jquery-ui.custom.min.css" rel="stylesheet" /> <scr ...
- 【noiOJ】p8210
10:河中跳房子 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石.这项激动人心 ...
- PHP curl 模拟POST 上传文件(含php 5.5后CURLFile)
<?php /** * Email net.webjoy@gmail.com * author jackluo * 2014.11.21 * */ //* function curl_post( ...
- PHP.ini文件读取不到
Configuration File (php.ini) Path /usr/local/php/lib Loaded Configuration File (none) Linux 把 dtruss ...
- C#实现动态页面静态化
制作一个aspx页面,专门用来生成各个动态aspx页面的静态页面.如下图所示,仅将内容页和主页面生成静态页面,当然本例只是一个简单的范例,实际情况如很复杂,但原理都是相同的. 生成内容页: 本例中的不 ...
- MyBatis增删改查
MyBatis的简介: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...
- struts2常用标签使用说明
在struts2中,用的是s标记,先在jsp文件中引入标记:<%@ taglib prefix="s" uri="/struts-tags"%> & ...
- ellipsis
语法: text-overflow : clip | ellipsis 参数: clip : 不显示省略标记(...),而是简单的裁切(clip这个参数是不常用的!) ellipsis ...