《CSS世界》阅读心得

《CSS世界》是由张鑫旭所写的一本关于CSS合理使用和奇妙技巧的书,对于CSS的进阶很有帮助。目前只读了前4章,本文记录一下读书心得:
(1)盒模型和元素的分类
(2)深藏不落的width:auto
(3)外部尺寸与流体特性
(4)内部尺寸与流体特性
(5)为流体而生的min-width/max-height
(6)替换元素
(7)替换元素与非替换元素的距离

(1)盒模型和元素的分类


image.png

a. 块级元素(block):1.独占一行。 2.大多数具有流动性。 3.大多数可以手动设置width/height。
b. 内联元素(inline):1.不独占一行。2.大多数具有内聚性。3.大多数不能手动设置width/height。
c. 内联块级元素(inline-block): 不独占一行,大多数内聚,大多数可手动设置width/height。

(2)深藏不落的width:auto
a.充分利用可用空间。常见于块级元素,<div> <p> 这些元素默认为充满父元素。(尺寸由外部决定)
b.收缩与包裹。浮动,绝对定位,inline-block元素或table元素。(尺寸由内部决定)
c.收缩到最小。
https://demo.cssworld.cn/3/2-1.php

(3)外部尺寸与流体特性
a.正常流宽度

image.png

流动性并非是宽度100%于父容器,而是一种margin/border/padding和content自动分配水平空间的机制。
http://demo.cssworld.cn/3/2-3.php

b.格式化宽度。
出现在绝对定位中。默认情况下,绝对定位的元素的宽度表现为“包裹性”,但有一种情况下宽度是由外部尺寸决定:
div { position: absolute; left: 20px; right: 20px; }
假如该元素的具有定位特性的祖先元素宽度是1000,则该元素宽度为960。格式化宽度也具有流体特性。

(4)内部尺寸与流体特性
a.元素尺寸由内部元素决定,但永远小于“包含块”容器的尺寸(除非容器尺寸小于元素的“首选最小宽度”)
http://demo.cssworld.cn/3/2-5.php

b. 改变width/height作用细节的box-sizing
width/height 默认是作用在content-box上


image.png

image.png

{ box-sizing: border - box }
对于普通内联元素(非图片等替换元素),box-sizing无论是什么值,对其渲染表现都没有影响。
有些元素,如search类型的搜索框,其默认的box-sizing就是border-box(如果浏览器支持)。

box - sizing 发明的初衷
唯一离不开 box - sizing 就是原生普通文本框<input>和文本域 <textarea> 的 100%自适应父容器宽度
替换元素,width:auto的情况下,尺寸由内部元素决定,无论其display的值是inline还是block。
所以只能通过设置 width: 100%。
在浏览器还没有支持 box - sizing 的年代,是这样写的:
http://demo.cssworld.cn/3/2-9.php

上述写法也有局限性,比如无法使用:focus高亮父级的边框
box - sizing 被发明出来最大的初衷应该是解决替换元素的宽度自适应问题,这样写也许更合理
input, textarea, img, video, object {
  box-sizing: border-box;
}

(5)为流体而生的min-width/max-width
.container {
  min-width: 1200px;
  max-width: 1400px;
}

img {
  max-width: 100%;
  height: auto!important;
}

超越 !important
<img src="1.jpg" style="width:480px!important;">
img { max-width: 256px; }
超越最大
.container {
  min-width: 1400px;
  max-width: 1200px;
  }

任意高度的展开收起动画:
.element {
  height: 0;
  overflow: hidden;
  transition: height .25s;
}
.element.active {
  height: auto;  /* 没有 transition 效果,只是生硬地展开 */
}

.element {
  max-height: 0;
  overflow: hidden;
  transition: max-height .25s;
}
.element.active {
  max-height: 666px;  /* 一个足够大的最大高度值 */
}

(6)替换元素
替换元素可以说是CSS世界中的另外一个派系。
根据元素是否独占一行把元素分为内联元素和块级元素。
更具元素是否具有可替换内容,可以 把元素分为替换元素和非替换元素。
<img src=“1.jpg”>
这种通过修改某个属性值呈现的内容就可以被替换的元素就称为“替换元素”。因此,<img>、<object>、<video>、<iframe>或者表单元素<textarea>和<input>都是典型的替换元素。

替换元素的尺寸计算规则:固有尺寸,HTML尺寸,CSS尺寸

固有尺寸就是替换内容原本的尺寸。

HTML尺寸

<img width="300" height="100">
<input type="file" size="30">
<textarea cols="20" rows=“5></textarea>

image.png

img { width: 200px; }
  <img src="1.jpg">

三种尺寸都没有的情况下,会有默认的固定尺寸, 300 X 150。
这条规则<video>,<canvas>,<iframe>都符合,<img>却例外。
并且各个浏览器给<img>的默认固定尺寸不同。

image.png

image.png

image.png

CSS世界中的替换元素的固有尺寸有一个很重要的特性,那就是我们是无法改变这个替换元素内容的固有尺寸的

div:before {

content: url(1.jpg);

display: block;

width: 200px; height: 200px;

}

http://demo.cssworld.cn/4/1-1.php

为什么图片的固有尺寸不受CSS宽高控制,那为何设定width/height还是会影响到图片的尺寸?
object-fit: fill none contain cover

(7)替换元素与非替换元素的距离
a.观点1:替换元素和非替换元素之间只隔一个src属性
平时使用<img>总是会设置src属性,如果把src属性去掉会如何?
img {
  display: block;
  outline: 1px solid;
}
<img>
按照替换元素的尺寸规则,宽度应该是0,但实际上,在 Firefox 浏览器下,最终的宽度是100%自适应父容器的可用宽度的。其表现和普通的<span>类似,已经完全不是替换元素了。
Chrome 浏览器其实也有类似的表现,只是需要特定的条件触发而已,这个触发条件就是alt需要有不为空的属性值。例如:
<img alt=“任意值">
IE浏览器下,<img>会给默认的图片,所以仍然表现为替换元素

b.观点2:替换元素和非替换元素之间只隔了一个CSS content属性
替换元素之所以为替换元素,就是因为其内容可替换,利用content属性为元素设置内容(Chrome下,所有元素都支持conetnt属性)
前面已经证明了,没有src属性的<img>是非替换元素,但是,如果我们此时使用content属性给它生成一张图片呢?
http://demo.cssworld.cn/4/1-3.php

如果图片原来是有src地址的,我们也是可以使用content属性把图片内容给置换掉的
http://demo.cssworld.cn/4/1-4.php
这种情况下,图片无法右键保存

使用content属性,也可以让普通标签元素变成替换元素。
官网标志
<h1>《CSS 世界》</h1>
h1 {

width: 180px;

height: 36px;

background: url(logo.png);

/* 隐藏文字 */

text-indent: -999px;

}

h1 {
   content: url(logo.png);
}

文字被替换,但搜索引擎能抓到
http://demo.cssworld.cn/4/1-5.php

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容