css auto那些事
2016-05-18 15:39
836 查看
最近又重新看了一遍《css权威指南》,重点关注了一下盒模型。
对于元素框的width和height以及margin属性来讲,auto是一个很有趣的值;不同情况下auto的值也不尽相同,因此小小总结一下。
explantion:由于此处着重讨论width和margin属性,因此假设元素框的padding和border均为0;
假定有一面一段html文档代码。以下都会以此结构来讨论。
<div>
<p>auto example<p>
</div>
先上结论吧。
div{width:600px;}
p{margin-left:100px;width:200px;margin:300px;}
但是,总会有不理想的状态;
div{width:600px;}
p{margin-left:100px;100px;300px;}
很明显,此时p元素的总宽度为500px,不等于父元素的width 600px,此时就是css中的格式化属性过分受限,这个时候浏览器就会“被动的”
设置margin-right值为auto,为400px,从而是总宽度等于父元素的width。但是此处还有一个例外,如果文档文本的文字方向是从右向左(rtl),浏览器会强制使margin-left的值为auto,也就是200px。
为父元素width的值,因此值为auto的属性的值此时变为父元素的width减去另外两个给定值之和。
因此,以下几个例子的显示效果完全相同。
// example 1
div{width:600px;}
p{margin-left:100px;width:200px;margin-right:auto;}
//example 2
div{width:600px;}
p{margin-left:100px;width:auto;margin-right:300px;}
//exampe 3
div {width:600px;}
p{margin-left:auto;width:200px;margin-right:300px;}
等于margin-right的值。
div{width:600px;}
p{margin-left:auto;width:300px;margin-right:auto;} // it means “margin-left:150px,margin-right:150px”
但是如果指定的特定值是margin-left或者margin-right中的某一个,情况就不是简单的两个设为auto的属性“对半分”剩下的宽度了。
此时浏览器会把剩余长度全部给到width上,设置为auto的margin的值会变为0;
div{width:600px;}
p{margin-left:100;width:auto;margin-right:auto;} // it means “width:500px , margin-right:0”
div{width:600px;}
p{margin-left:auto;width:auto;margin-right:100px;} // it means “width:500px,margin-left:0”
div{width:600px;}
p{margin-left:auto;width:auto;margin-right:auto;}
一般可以认为顺序如下:特定值 > width属性 > margin属性,margin-left,margin-right的优先度相同。
也就是如果三个属性中某个属性为特定的值,那么它的值将不会改变。至于剩下的长度,优先全部给与width属性。
原文地址:https://github.com/zengxiaotao/css-auto-
对于元素框的width和height以及margin属性来讲,auto是一个很有趣的值;不同情况下auto的值也不尽相同,因此小小总结一下。
explantion:由于此处着重讨论width和margin属性,因此假设元素框的padding和border均为0;
假定有一面一段html文档代码。以下都会以此结构来讨论。
<div>
<p>auto example<p>
</div>
先上结论吧。
margin-left,width,margin-right中auto数量为0
css里有个规则:正常流中块级元素框的水平部分总和就等于父元素的width。因此,如果设定的margin-left,width,margin-right三者之和等于父元素的width,则按设定的样式显示,可以把这当成理想状态。div{width:600px;}
p{margin-left:100px;width:200px;margin:300px;}
但是,总会有不理想的状态;
div{width:600px;}
p{margin-left:100px;100px;300px;}
很明显,此时p元素的总宽度为500px,不等于父元素的width 600px,此时就是css中的格式化属性过分受限,这个时候浏览器就会“被动的”
设置margin-right值为auto,为400px,从而是总宽度等于父元素的width。但是此处还有一个例外,如果文档文本的文字方向是从右向左(rtl),浏览器会强制使margin-left的值为auto,也就是200px。
margin-left,width,margin-right中auto数量为1
margin-left,width,margin-right中两个属性为特定的值,另外一个为auto,是最简单,也最容易理解的。由于三者宽度之和为父元素width的值,因此值为auto的属性的值此时变为父元素的width减去另外两个给定值之和。
因此,以下几个例子的显示效果完全相同。
// example 1
div{width:600px;}
p{margin-left:100px;width:200px;margin-right:auto;}
//example 2
div{width:600px;}
p{margin-left:100px;width:auto;margin-right:300px;}
//exampe 3
div {width:600px;}
p{margin-left:auto;width:200px;margin-right:300px;}
margin-left,width,margin-right中auto数量为2
如果指定的特定值为width,margin-left和margin-right为auto,这就是最常见的水平居中的实现形式,浏览器将会使margin-left的值等于margin-right的值。
div{width:600px;}
p{margin-left:auto;width:300px;margin-right:auto;} // it means “margin-left:150px,margin-right:150px”
但是如果指定的特定值是margin-left或者margin-right中的某一个,情况就不是简单的两个设为auto的属性“对半分”剩下的宽度了。
此时浏览器会把剩余长度全部给到width上,设置为auto的margin的值会变为0;
div{width:600px;}
p{margin-left:100;width:auto;margin-right:auto;} // it means “width:500px , margin-right:0”
div{width:600px;}
p{margin-left:auto;width:auto;margin-right:100px;} // it means “width:500px,margin-left:0”
margin-left,width,margin-right全为auto
这种情况下,就只有一种结果,该元素的width将获得父元素width的全部长度,元素的外边距为0,元素的文本内容填满整个元素框。div{width:600px;}
p{margin-left:auto;width:auto;margin-right:auto;}
总结
以上就是水平方向是auto属性值的所有情况。最难理解的就是第(3)(4)中情况。个人理解就是浏览器对于各个属性以及给定各个值的“优先度”的顺序的区别。一般可以认为顺序如下:特定值 > width属性 > margin属性,margin-left,margin-right的优先度相同。
也就是如果三个属性中某个属性为特定的值,那么它的值将不会改变。至于剩下的长度,优先全部给与width属性。
原文地址:https://github.com/zengxiaotao/css-auto-
相关文章推荐
- Web布局连载——两栏固定布局(五)
- [div+css]晒晒最新制作专题推广页模板
- 盒子模型
- CSS选择器
- CSS样式优先权
- [css] line-height 百分比单位和数值单位的区别
- Apple官网研究之使用Justify布局导航
- 关于前端的思考与感悟
- 设计更快的网页(三):字体和 CSS 调整
- 纯CSS制作的新闻网站中的文章列表
- Auto Autorun.inf desktop.ini sxs.exe auto.exe类病毒的手动处理完全技巧
- 10条影响CSS渲染速度的写法与使用建议第1/3页
- BS项目中的CSS架构_仅加载自己需要的CSS
- 很不错的 CSS Hack 又学了一招
- 发一个css比较清爽的写法
- CSS expression控制图片自动缩放效果代码[兼容 IE,Firefox]
- css布局网页水平居中常用方法
- CSS经典技巧十则第1/2页
- css 兼容性问题this.style.cursor=''hand''