width具体细节
1、width :auto;
至少包含四种表现形式:
- 充分利用可利用的空间,
div p
元素的默认宽度就是父级元素 - 收缩与包裹,包裹性也就是css3中的
fit-content
- 收缩到最小 在
table-layout:auto
的表格中。一柱擎天的样子 - 超出容器,特俗情况,
width:auto
的时候会超出父元素的宽度,就比如出现内容很长的连续英文和数字,white-space:nowrap
2、宽度和流体特性
以上的四种宽度,1是外部宽度,234是内部宽度
外部宽度和流的特性
- 正常流宽度 但是如果我们给一个表现为外部尺寸的块级元素设置了宽度,流动性就会丢失
- 格式化宽度
position:absolute/fixed
一般来说绝对定位宽度表现为包裹性,由内部尺寸决定,有一种例外,当left/right
top/bottom
同时存在的时候
内部宽度和流的特性:
- 包裹性(1 包裹性 2 自适应性)
自适应性是指 元素尺寸由内部元素决定,但是永远的小于包含块容器的尺寸 - 首选最小宽度
- 中文(东亚文字)的最小宽度是14
- 西方文字的最小宽度 由特定的连续的英文字符单元决定
- 类似于图片的这种替换元素的最小宽度是自己本身
- 最大宽度
元素能达到的最大宽度,其实就是包裹性元素设置的white-space:nowrap
申明后的宽度。
如果内部没有块级元素或者是块级元素没有设定宽度值,最大宽度实际上是连续内联盒子的宽度
3、 width的细节
有四种盒子:content box
,padding box
,border box
,margin box
宽度的表现设定不合理的原因:
- 设置宽度流动性丢失,尤其是宽度设定在content上的时候
- 与现实世界表现不一致的困扰;可能是指的宽度是content的,但是开发者以为是包含了
padding
或者是border
的
4、css流体布局下的宽度分离原则
宽度分离原则:width
不与影响宽度的属性如:padding/border
属性共存
如
//不推荐这么写
.box{width:100px;border:1px solid ;}
//要分开写
.father{width:100xp;}
.son {
margin:0 20px;
padding:0 20px;
border:1px solid;
}
如上就是设置了父元素,然后子元素根据流动性实现内部自适应
张鑫旭就推荐,整个html
只有一个widht
,然后剩下的就全用流体布局实现。
5、 box-sizing
可以理解为宽度作用的细节
box-sizing :content-box;/**默认值**/
box-sizing :padding-box/**firefox支持**/
box-sizing :border-box;/**全线支持**/
box-sizing :margin-box;/**都不支持**/
box-sizing :border-box;
d的时候,其实是相当于width
包含了content
padding
和border
的宽度。
但是为什么不支持margin-box呢?
因为改变margin
并不会影响offset
的尺寸 但是border
和padding
就不一样了
如果有了box-sizing
支持了margin-box
那么background-origin
属性要不要支持,margin
的背景永远透明在规范里标明了
*{box-sizing:border-box}
/**这种方式不好,1浪费渲染,search的搜索框本来就是这个属性,2、不能真正的实现无计算**/
/**推荐**/
input ,textarea,img,video ,object{
box-sizing:border-box;
}
/**因为box-sizing设计的主要目的还是为了这种原色普通文本框和文本域的计算**/
height 的细节
1、height:100%
如果父元素不确定的话,那么height
的百分比基本上就可以当成没看见了。
原因:如果包含块的高度没显示指定(即高度由内容决定,且该元素不是绝对定位,那么计算值就是auto) 'auto'* 100% = nan
如何支持100% 的高度
1、显示的确定高度
2、使用绝对定位,注意的是绝对定位元素的百分比和非绝对定位元素的百分比是有区别的。
-
绝对定位的百分比是相对于
padding-box
的 -
非绝对定位的百分比是相对于
content box
的
min-width /max-width /min-height/max-height
1 、min-width /max-width 与流
其出现一定是自适应布局 或者是流布局中出现的。如果定死了,就没有变化的可能性
2、与众不同的初始值
max-*
系列,初始值是:none
min-*
系列的初始值是:auto
为什么max
系列不能使aut
o呢?如果父元素是100px
子元素是200px
,如果默认max-width
是auto
也就是max-width:100px;
直接让子元素的200px
无效,所以不能使auto
3、max 会覆盖width 哪怕你是important
如果一个元素width:100px!important
但是max-width:20px;
那么宽度还是20px
超越最大:min
覆盖max
如果max-width:50px;min-width:100px;
那么超越最大的原则,min
就会赢了,元素为100px