auto是width的默认属性,

会CSS的同学都知道,

那么当width是auto的时候具有哪些表现呢?

于我,完全不知道,捂脸逃走~

深藏不露的width:auto至少包含下面这4种表现:

1.充分利用空间,比如<div>/<p>/<h1>~<h6>宽度默认为父级元素的100%,fill-available。(见下文备注1:不仅仅是简单的100%)

2.收缩和包裹,比如浮动,绝对定位,还有inline-block的元素是由内容把宽度撑开,宽度收缩到合适,fit-content。(见下文备注2:不仅仅是合适)

3.收缩到最小,这个我还真不知道怎么解释,如果父元素的宽度有限,当前元素内容换行的原则是中文每一个字都可以换行,英文不可以随意换行,根据前面两条规则来换行使得内容能够完全填充,这种行为即收缩到最小,min-content。换行的目的是为了不超过父级元素。

如果父元素的宽度是0,那么又存在下面两种情况(跑偏了~跑偏了~)

<div style="width: 0;"><p>中文中文中文中文中文English中文中文</p>  //<p>元素的width为0
</div>
<div style="width: 0;"><a>中文中文中文中文中文English中文中文</a>  //<a>元素的width为English占据的宽度
</div>

4.超出容器限制,上面三种情况的元素都不会主动超过父级元素的宽度(备注:特别是第三点收缩到最小,目的也是为了不超过父级元素的宽度),除非是很长的英文,或者设置了样式white-space:nowrap的元素。

此处可阅读

备注1:fill-available,不简单的完全填充

前面有提到fill-available的宽度是100%填充父级元素,但不仅仅是100%,因为这里涉及到margin/border/padding/content自动分配机制。

每个元素都有四层结构,margin/border/padding/content,如果在元素上设置100%,默认情况下(不设置box-sizing)这个100%作用在content层面上,那么如果在这个元素上也同时设置margin/border/padding的话,绝对超出父级元素,微笑脸。

所以说width:auto使得元素的宽度100%填充父级元素不简单,毕竟这个完全填充帮你把margin/border/padding/content都规划得好好的,你只需要关注内容就可以了。

不过CSS3中有个优秀的属性也是来帮我们解决完全填充问题的,box-sizing,说到box-sizing又不得不提标准盒模型和怪异盒模型,事实上box-sizing的各个值对应了元素的四层结构,margin-box/border-box/padding-box/content-box,这四个值指元素宽度设置100%时的作用域。不过margin-box没有应用场景,padding-box的应用场景渐弱,只有Firefox 50之前支持,后面的版本不再支持,现在可以设置的属性值是unset/initial/inherit/content-box/border-box。

  • content-box对应的是标准盒模型,width:100%作用在content层,也就是我们在开发时采用的默认模式。

  • border-box对应的是怪异盒模型,也叫做IE盒模型,width:100%作用在border层。

box-sizing请参考

备注2:fit-content,内容再怎么多,

宽度也不能比父元素大,体现包裹性

又是前面提到的,对于inline-block的元素,宽度由内容撑开,但总是比父元素的宽度小,小于等于父元素的宽度。

//这是一个会换行的button
//<input type="button">不会换行,它默认white-space:pre,设置为white-space:normal即可
<div style="width:30px"><button>欢迎关注袋鼠云技术团队微信公众号<button>
</div>

这种特性很有意思,在《CSS世界》一书中有介绍。比如这种场景,元素的内容不定,内容少的时候居中显示,内容多的时候左对齐。

//我会居中
<div style="width:200px; text-align:center;">     <button style="text-align:left;">数据智能,让未来变成现在<button>
</div>
//我会左对齐
<div style="width:200px; text-align:center;">     <button style="text-align:left;">欢迎关注袋鼠云技术团队微信公众号</button>
</div>

box-sizing可以改变width:100%的作用域,那在没有box-sizing属性的那个时代,设置了width:100%同时又需要设置border和padding,怎么破?!怎么破?!

宽度分离原则

width独占一层标签,margin/border/padding占一层标签。在标准盒模型下,遵循这样的原则同样可以让元素流动起来。

<div style="width:100%;"><div style="border:1px solid #ccc; padding:5px;">content...</div>
</div>

说起来,下面这种真是邪恶的操作

//假如父级元素是100px
<div style="width:88px; padding:5px; border:1px solid #ccc;">content...
</div>
//假如我不知道父元素的宽度,那么我也没辙啦~

转载于:https://blog.51cto.com/13766600/2330437

技本功丨呀~我不会写CSS之width:auto!!!相关推荐

  1. 技本功丨呀~我不会写CSS之vertical-align(上集)

    某日阅读<CSS世界>,笔者的一段话鞭挞了我的灵魂.原文是这样的-- "说到这里,我就忍不住多说两句.很多其实工作很多年的前端开发人员,也可能不知道vertical-align的 ...

  2. 技本功丨收藏!斜杠青年与你共探微信小程序云开发(下篇)

    2019年2月26日,人们为了一个杯子疯了一天. 星巴克猫爪杯,一场已经与猫无关了的"圣杯战争".网上的倒卖价格,已炒至近千元! 求而不得,舍而不能,得而不惜.这是人最大的悲哀.. ...

  3. 技本功丨请带上纸笔刷着看:解读MySQL执行计划的type列和extra列

    本萌最近被一则新闻深受鼓舞,西工大硬核"女学神"白雨桐,获6所世界顶级大学博士录取通知书. 货真价值的才貌双全,别人家的孩子 高考失利与心仪的专业失之交臂,选择了软件工程这门自己完 ...

  4. 技本功丨收藏!斜杠青年与你共探微信小程序云开发(上篇)

    人设千万种,"高危"的大概有两种:好老公/老婆 & 学霸. 猪年第一瓜,演艺事业一帆风顺的翟XX,栽在了学霸的人设上,这件事深刻地教育了我们: 1.学习这件事情来不得一点虚 ...

  5. 技本功丨知否知否,Redux源码竟如此意味深长(下集)

    上集回顾 Redux是如何使用的?首先再来回顾一下这个使用demo(谁让这段代码完整地展示了redux的使用) 如果有小伙伴对这段代码不是很理解的话,建议先去学习Redux的使用再来看这篇源码,这样更 ...

  6. 技本功丨用短平快的方式告诉你:Flink-SQL的扩展实现

    2019年1月28日,阿里云宣布开源"计算王牌"实时计算平台Blink回馈给ApacheFlink社区.官方称,计算延迟已经降到毫秒级,也就是你在浏览网页的时候,眨了一下眼睛,淘宝 ...

  7. 技本功丨甲方大人来了之运维数据分析平台搭建实战

    袋鼠云日志团队时常遇到各种各样的甲方大人,毕竟我们是一个非常优秀的企业服务公司(自信满满),当然面对甲方大人的时候要做到处变不惊,临危不乱,镇定自若的接受需求-- 甲方大人的常用台词一定要记住:我们很 ...

  8. 技本功丨用短平快的方式告诉你:Flink-SQL的扩展实现...

    2019年1月28日,阿里云宣布开源"计算王牌"实时计算平台Blink.回馈给ApacheFlink社区.官方称,计算延迟已经降到毫秒级,也就是你在浏览网页的时候,眨了一下眼睛,淘 ...

  9. mysql x key 组合_技本功丨浅谈MySQL的七种锁

    作者:宋丹琪(花名:三思)袋鼠云云服务部DBA团队 数据库工程师 时常会有开发的同学突然紧张兮兮地找我, 然后丢给我一个代码层面的 CannotAcquireLockException的报错, 一脸无 ...

  10. 技本功丨互联网+工业视觉异常检测分析

    胡丰--袋鼠云高级算法专家 袋鼠云人工智能实验室负责人.十年图像处理.模式识别.机器视觉等方面的研发工作,主要研究领域为:智能交通.工业视觉分析.OCR.视频智能质量诊断.智能球机跟踪.人脸等方向,发 ...

最新文章

  1. [转]oracle 存储过程的基本语法 及注意事项
  2. java 比较对象内容是否相同的_Java 比较对象中的内容是否一致
  3. too many open files(打开的文件过多)解决方法
  4. tab翻页导致的问题
  5. asp.net 防止重复提交
  6. ef 执行mysql语句_在EF中执行SQL语句
  7. vfp报表纸张设置_JimuReport积木报表 — API数据源报表制作
  8. Tomcat无响应问题
  9. 老李分享:5个衡量软件质量的标准
  10. matlab中用if语句,matlab if语句如何使用
  11. linux怎么进入自己添加的软盘,linux – 创建没有mount的虚拟软盘映像?
  12. pg库和mysql的优缺点_PostgreSQL的优缺点
  13. Jupyter Notebook又一懒人神器,拖拽生成Python代码!
  14. 禁用笔记本自带键盘技巧
  15. Java jdt 编辑_JDT:打开Java编辑器并显示特定成员
  16. 05 RTMP Chunk Stream
  17. (初阶版本)扫雷游戏(C语言)娱乐教程
  18. SpringBoot 整合 Elasticsearch
  19. python流量监控脚本
  20. ROS2_foxy教程总结(自用)

热门文章

  1. Atitit 近年来的软件与编程与技术趋势大盘点 and 2017 未来技术趋势attilax总结
  2. Atitit java的异常exception 结构Throwable类
  3. Atitit.数据库存储引擎的原理与attilax 总结
  4. paip.数据库发邮件通知配置
  5. paip.netbeans断点调试debugger console输出乱码解决方案
  6. paip.提升用户体验---提取FLASH中图片
  7. rust: linker-link-exe-not-found
  8. 加密电子邮件是最安全高效的工作通信方式
  9. 深度复盘 | 蚂蚁集团万级规模 k8s 集群基建之路
  10. 新兴IT企业特斯拉(三)——Model S