1. CSS2.1的尺寸体系

在CSS2.1的世界中,常见的尺寸分为这几类:

2.1 充分利用可用空间。例如,一些div元素默认宽度100%父元素,这种充分利用可用空间的行为就称为“fill-available”。

2.2 收缩与包裹。典型代表就是浮动,绝对定位以及inline-block,英文称为“shrink-to-fit”,直译为“收缩到合适”,这种直译往往都是不准确的,这种行为表现确实很难描述,有些只可意会不能言传的感觉,而我自己一直以“包裹性”作为理解。在CSS3中有个专有的关键名称,fit-content

2.3 收缩到最小。这个基本上就出现在table-layout为auto的表格中,想必有经验的小伙伴一定见过下面这样一柱擎天的盛况的吧!

大家空间都不够的时候,文字能断的就断,中文是随便断的,英文单词不能断。于是乎,第一列被无情地每个字都断掉,形成一柱擎天。这种行为称之为“preferred minimum width”或者“minimum content width”,也就是本文的重点角色之一min-content,换了一个更加规范好听的名字了。

2.4 超出容器限制 上面1~3情况,除非有明确的width相关设置,否则尺寸都不会主动超过容器宽度的,但是,存在一些特殊情况,例如,连续的英文数字,好长好长;或者内联元素被设置了white-space:nowrap,则表现为一江春水向东流

例如下面:

max-content的表现与之有些类似,具有收缩特性,同时最大内容宽度

2. 理解width:fill-available

width:fill-available比较好理解,比方说,我们在页面中扔一个没有其他样式的<div>元素,则,此时,该<div>元素的width表现就是fill-available,自动填满剩余的空间。也就是我们平常所说的盒模型的margin,border,padding的尺寸填充。

出现fill-available关键字值的价值在于,我们可以让元素的100%自动填充特性不仅仅在block水平元素上,其他元素,例如,我们一直认为的包裹收缩的inline-block元素上:

此时,元素兼具了块状元素的自动填充特性以及内联元素的定位对齐等特性(vertical-align/height/line-height)。于是,(例如)我们就可以直接使用line-height让一个块状表现的元素垂直居中

3. 理解width:max-content

max-content的行为表现可以这么理解,假设我们的容器有足够的宽度,足够的空间,此时,所占据的最大宽度是就是max-content所表示的尺寸。

会发现,width:max-content表现得好像设置了white-space:nowrap一样,文字一马平川下去,元素的宽度也变成了这些文字一行显示的宽度!为什么会这么表现呢?定义就是这样的,对吧,我们对照下,首先,假设我们的容器有足够的空间,你想呀,容器足够空间,那下面的描述文字肯定会从左到右排列一行显示了,此时,上面的图片和下面的文字哪个内容宽度大?,自然是文字啦,所谓max-content就是width值采用宽度大的那个内容的宽度,也就是这里的文字的长度了

4. 理解width:min-content

min-content宽度表示的并不是内部哪个宽度小就是哪个宽度,而是,采用内部元素最小宽度值最大的那个元素的宽度作为最终容器的宽度。

首先,我们要明白这里的“最小宽度值”是什么意思。对于替换元素,例如图片的最小宽度值就是图片呈现的宽度,对于文本元素,如果全部是中文,则最小宽度值就是一个中文的宽度值;如果包含英文,因为默认英文单词不换行,所以,最小宽度可能就是里面最长的英文单词的宽度。So,大家明白的说

同样的是和display:inline-block做比较,display:inline-block虽然也具有收缩特性,但宽度随最大长度长的那一个(同时不超过可用宽度)。而width:min-content的最终宽度是图片和文字最小宽度值里面较大的那一个

5. 理解width:fit-content

width:fit-content也是应该比较好理解的,“shrink-to-fit”表现,换句话说,和CSS2.1中的float, absolute, inline-block的尺寸收缩表现是一样的

OK,然后,有小伙伴会疑问,既然跟很多CSS声明有一样的表现,那为什么还要再弄个新东西呢?

就拿水平居中效果举例,首先浮动肯定不行,因为只有左浮动和右浮动;绝对定位压根不占据空间,普通流中根本无法应用,而inline-block需要父级使用text-align:center,而本身可能还需要text-align:left略烦。

而width:fit-content可以没有这些烦恼,因为,width:fit-content可以实现元素收缩效果的同时,保持原本的元素block水平状态,于是,就可以直接使用margin:auto实现元素向内自适应同时的居中效果了。

理解CSS3 max/min-content及fit-content等width值相关推荐

  1. 理解 Math.max(min).apply 获取数组中的最大(小)值机制

    前言- 阿姆斯特朗回旋加速喷气式阿姆斯特朗炮, 还原度还真高呢 >-< 了解 apply 传入参数机制 //模拟 Math.max 方法 function Math_max(num1, n ...

  2. 函数f的上确界/下确界(sup/inf)的通俗理解,及其与最大值/最小值(max/min)的区别

    [定义] 上确界sup 的定义:一个函数/集合最小的上界 下确界inf 的定义:一个函数/集合最大的下界 [实例] 例如,给定函数f(x)=x,x∈(2,8).由于这个函数的定义域是个开区间(2,8) ...

  3. 半深入理解CSS3 object-position/object-fit属性

    半深入理解CSS3 object-position/object-fit属性 转载:https://www.zhangxinxu.com/wordpress/2015/03/css3-object-p ...

  4. 基础篇:7.Content provider与Content Resolver实现数据共享

    前言: 文件数据.数据库数据以及一些其它类型的数据在android中都是私有的,在android中,并没有提供所有应用共同访问的公共储存区域.但各应用程序间通常需要进行数据共享,如联系人信息等. 在a ...

  5. Python 内建函数 max/min的高级用法

    max/min 函数 Python 中的 max/min函数是用来获取传入参数的最大值或最小值的,其运行机制都一样,所以这里主要描述 max 的运行机制以及使用方法. 最简单的用法,就是直接传入两个要 ...

  6. SQL极致优化案例:利用索引特性进行max/min优化

    不要错过更多干货文章,点击上方蓝字关注我们 IS NOT NULL的优化 1. 问题提出 客户系统有这样一条SQL,脱敏后如下: SELECT NVL(MAX(T1.CREATED),SYSDATE) ...

  7. Large函数和Small函数 Max Min

    Large和Small,相对于Max Min更灵活. 因为可以返回用户指定的特定大小顺序的数值. 用法: Small(array,k) Large(array,k) 其中array可以使用数值或单元格 ...

  8. Setup和Hold(Max/Min)分析

    Setup和Hold(Max/Min)分析 Vivado时序分析概念setup time, hold time reference What is Setup and hold time in an ...

  9. 只有20%的iOS程序员能看懂:详解intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance

    在了解intrinsicContentSize之前,我们需要先了解2个概念: AutoLayout在做什么 约束优先级是什么意思. 如果不了解这两个概念,看intinsic content size没 ...

最新文章

  1. 对sigma pix 的理解
  2. 算法---------数组-----------翻转单链表
  3. caffe python接口_ubuntu配置caffe的python接口pycaffe
  4. asp.net权限设置可能导致应用程序无法正常运行(转)
  5. android app 主界面,android ViewPager实现App主界面Tab菜单页面切换和点击事件
  6. wireshark rto_RTO的完整形式是什么?
  7. 打不开网页但QQ能上网的解决办法
  8. mysql学习资料_PHP程序员2020学习方向:高并发、性能调优、分布式、微服务...
  9. Java常用中间件---SpringBoot整合ActivityMQ
  10. 选修了两门课的学生学号MySQL语句_SQL 语句:在sc表中查询至少选修了两门课的学生学号的语句...
  11. while用法小简介(涉及EOF用法)
  12. win10u盘被写保护怎么解除_win10系统U盘被写保护解除的操作方法
  13. FineReport制作报表讲解(基本操作以及网络报表)
  14. 怎么把蓝狐上的代码转为html,Ajax动态调用用户控件输出html
  15. 超标量处理器设计 姚永斌 第7章 寄存器重命名 摘录
  16. 使用科大讯飞SDK实现语音功能
  17. AT89S52与AT89c51的区别
  18. C语言小游戏解决生活中的数学问题
  19. maters鸿蒙系统,华为MateRS保时捷设计4月12日国内发布
  20. unity 2019 点击脚本启动不了VS_蚂蚁森林能量脚本,无需ROOT+支持模拟器

热门文章

  1. linux中initrd的含义,Linux2.6 内核的 Initrd 机制解析
  2. idead断点调试_IDEA---断点调试Debug
  3. 注释工具_苹果已购丨Notability丨功能强大而简单易用的笔记及PDF注释工具
  4. wamserver怎么把mysql找回来_将php连接wampserver自带的MySQL数据库 所遇到各种问题解决办法...
  5. java tcp 监听端口_【TCP/IP】端口未监听,还能访问成功?
  6. JavaScript将负数转换为正数
  7. 关于gcc、glibc和binutils模块之间的关系
  8. 深入了解scanf() getchar()和gets()等函数之间的区别
  9. Fedora 17删除旧内核的操作
  10. ant中的loading按钮使用