CSS3 maxmin-content及fit-content等width值理解

html-css011

CSS3 maxmin-content及fit-content等width值理解,第1张

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实现元素向内自适应同时的居中效果了。

什么是html5呢?

html5最先由WHATWG(Web 超文本应用技术工作组)命名的一种超文本标记语言,随后和W3C的xhtml2.0(标准)相结合,产生现在最新一代的超文本标记语言。可以简单点理解成:HTML 5 ≈ HTML4.0+CSS3+JS+API。

hmtl5和html的区别在哪里?

在文档类型声明上

html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

<html xmlns="

html5

 <!DOCTYPE html>

2.在结构语义上

html4.0:没有体现结构语义化的标签,我们通常都是这样来命名的

<div id="header"></div>

html5:在语义上却有很大的优势。提供了一些新的html5标签,比如:

<header> 、<nav>、<article>、<aside>、<footer>..

3.强大的HTML5的新功能

(1)强大的绘图功能

可能有些动画,或者图片,在html5可以通过强大的绘画功能,加上JS可以实现。而在html4.0却不行。

在HTML5中,有两个东西,是可以进行绘图的,我们一起来看看是哪两个神奇的玩意。

1.Canvas标签

Canvas 通过 JavaScript 来绘制 2D 图形,Canvas 是逐像素进行渲染的。

在 canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。

2.SVG

SVG 是一种使用 XML 描述 2D 图形的语言,SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。

与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于:

(1)SVG 图像可通过文本编辑器来创建和修改

(2)SVG 图像可被搜索、索引、脚本化或压缩

(3)SVG 是可伸缩的

(4)SVG 图像可在任何的分辨率下被高质量地打印

(5)SVG 可在图像质量不下降的情况下被放大

那么都两者都可以用于绘图,我们一起来看看他们之间有何区别:

Canvas

1.依赖分辨率

2.不支持事件处理器

3.弱的文本渲染能力

4.能够以 .png 或 .jpg 格式保存结果图像

5.最适合图像密集型的游戏,其中的许多对象会被频繁重绘

SVG

1.不依赖分辨率

2.支持事件处理器

3.最适合带有大型渲染区域的应用程序(比如谷歌地图)

4.复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)

5.不适合游戏应用

(2)新增视频标签

可能在html4.0的时候,我们想要插入一段视频,还需要引用一长段的代码。但是在html5的情况下。我们只需要用于一个video标签即可。

 <videosrc="视频地址"></video>

提供这样的标签有什么样的好处呢?

第一:节省程序员写代码的时间。

第二:我觉得最主要还是在SEO的优化上。

不管是我们自己来对网页模块命名,还是有这样的标签。因为做网站最终的目的只有一个,那就是盈利。想盈利的话,就只有通过SEO优化的技术,把你网站排名做上来,这样你的网站才有价值,且正是这一点,html5符合了这一点。为什么这么说呢?因为他定义的这些标签,更加有利于优化,蜘蛛能识别你。

CSS3 对于 CSS2.1 有很多的修改和补充。

css3是CSS2技术的升级版本,CSS3语言开发是朝着模块化发展的。以前的规范作为一个模块实在太过庞大且比较复杂,所以,把它分解为一些小的模块。更多新的模块也被加入进来,这些模块包括:盒子模块,列表模块,超链接模块,语言模块,背景和边框,文字特效,多栏布局等.