《CSS 揭秘》- Lea Verou 第一章

前言:
DRY 是 Don’t Repeat Yourself

第 1 章

尽量减少代码重复

绝对值虽然容易掌控,但想修改的时候会比较麻烦

  • 行高要反映出它跟字号
font-size: 20px;
line-height: 1.5;//行高是字号的 1.5 倍
  • 字号最好不要定为绝对长度值
如果我们决定把父级的字号加大,就不得不修改每一处使用绝
对值作为字体尺寸的样式。如果改用百分比或 em 单位就好多了
font-size: 125%; /* 假设父级的字号是 16px */
line-height: 1.5;

em和rem的区别
em 和 rem都是灵活、 可扩展的单位,由浏览器转换为像素值,具体取决于您的设计中的字体大小设置。

  • em的特点
    • 浏览器默认1em=16px,所以0.75em=12px;
      我们经常会在页面上看到根元素写的font-size:65%; 这样em就成了16px*62.5=10em;这是显示在页面的字体大小是10px;
    • 字体大小是根据父元素字体大小设置的
    • em 单位的主要目的应该是允许保持在一个特定的设计元素范围内的可扩展性
    • 但是如果嵌套了多个元素 要计算它的大小,是件很头疼的事情
    • 这样的情况下,就出现了rem
  • rem特点
    • rem的大小是根据html根目录下的字体大小进行计算的
    • 当我们改变根目录下的字体大小的时候,下面字体都改变
    • rem不仅可以设置字体的大小,也可以设置元素宽、高等属性
    • 根元素的字体大小 16px,10rem 将等同于 160px
    • 使用 rem 单位的主要目的应该是确保无论用户如何设置自己的浏览器,我们的布局都能调整到合适大小。

HSLA(H,S,L,A)

H:
Hue(色调)。0(或360)表示红色,120表示绿色,240表示蓝色,也可取其他数值来指定颜色。取值为:0 - 360
S:
Saturation(饱和度)。取值为:0.0% - 100.0%
L:
Lightness(亮度)。取值为:0.0% - 100.0%
A:
Alpha透明度。取值0~1之间。
推 荐 使 用 HSLA 而 不 是RGBA 来产生半透明的白色,因为它的字符长度更短,敲起来也更快。这归功于它的重复度更低

background: #58a linear-gradient(hsla(0,0%,100%,.2),transparent);

例子:https://jsfiddle.net/noyanse/o4v7mvgu/66/

image.png

currentColor

从SVG 那里借鉴来的,这个关键字并没有绑定到一个固定的颜色值,而是一直被解析为 color 。实际上,这个特性让它成为了 CSS 中有史以来的第一个变量 。如果你没有给边框指定颜色,它就会自动地从文本颜色那里得到颜色。
例子:假设我们想让所有的水平分割线(所有 hr 元素)自动与文本的颜色保持一致

hr {
height: .5em;
background: currentColor;
}

例子:
更改颜色:https://jsfiddle.net/noyanse/zb2cxLrf/5/

image.png

<style>
    .icon{
        display: inline-block;
        width: 20px;
        height: 20px;
  //图标把图标部分删除,周围用白色背景填充,可以很省事。
        background-image: url(sprite_icons.png);
        background-position: 0 0;
        background-color: currentColor;/*图标随着字体的颜色变化而变化*/
    }
    .link:hover{
        color: red;
    }
</style>
</head>
<body>
    <a href="##" class="link"><i class="icon icon1"></i>返回</a>
</body>
image.png

image.png

继承inherit

inherit 可以用在任何 CSS 属性中,而且它总是绑定到父元素的计
算值(对伪元素来说,则会取生成该伪元素的宿主元素)
如:要把表单元素的字体设定为与页面的其他部分相同,你并不需要重复指定字体属性,只需利用 inherit 的特性即可https://jsfiddle.net/noyanse/5w99qq18/2/

image.png

inherit 关键字对于背景色同样非常有用https://jsfiddle.net/noyanse/5judagt8/4/

image.png

相信你的眼睛,而不是数字

人的眼睛并不是一台完美的输入设备。有时候精准的尺度看起来并不精准,而我们的设计需要顺应这种偏差。举一个在视觉设计领域广为人知的例子吧,我们的眼睛在看到一个完美垂直居中的物体时,会感觉它并不居中。实际上,我们应该把这个物体从几何学的中心点再稍微向上挪一点才能取得理想的视觉效果。

关于响应式网页设计

比较常见的实践是用多种分辨率来测试一个网站,然后添加越来越多的媒体查询(Media Query)规则来修补网站在这些分辨率下出现的问题。然而对于今后的 CSS 改动来说,每个媒体查询都会增加成本,而这种成本是不应轻易上升的。你添加的媒体查询越多,你的 CSS代码就会变得越来越经不起折腾



这并不是说媒体查询是一种不良实践。只要用对了,它就是利器。但是,你只应该把它作为最后的手段
媒体查询的断点不应该由具体的设备来决定,而应该根据设计自身来决定。这不仅是因为我们的网站需要面向的设备太多了(尤其是考虑到未来的设备时),还因为一个网站在桌面端可能会以任意尺寸的窗口来显示。如果你有信心自己的设计在任何可能出现的视口尺寸下都能良好工作,谁关心这些设备的分辨率具体是多少呢?

下面还有一些建议,可能会帮你避免不必要的媒体查询:
  • 使用百分比长度来取代固定长度。如果实在做不到这一点,也应该
    尝试使用与视口相关的单位( vw 、 vh 、 vmin 和 vmax ),它们的值解析为视口宽度或高度的百分比。
  • 当你需要在较大分辨率下得到固定宽度时,使用** max-width** 而不是width ,因为它可以适应较小的分辨率,而无需使用媒体查询。
  • 不要忘记为替换元素(比如 img 、 object 、 video 、 iframe 等)设置一个 max-width ,值为 100% 。
  • 假如背景图片需要完整地铺满一个容器,不管容器的尺寸如何变化,background-size: cover 这个属性都可以做到。但是,我们也要时刻牢记——带宽并不是无限的,因此在移动网页中通过 CSS 把一张大图缩小显示往往是不太明智的。
  • 当图片(或其他元素)以行列式进行布局时,让视口的宽度来决定
    列的数量。弹性盒布局(即 Flexbox)或者 display: inline-block加上常规的文本折行行为,都可以实现这一点。
  • 在使用多列文本时,指定 column-width (列宽)而不是指定column-count (列数),这样它就可以在较小的屏幕上自动显示为单列布局。

尽最大努力实现弹性可伸缩的布局,并在媒体查询的各个断点区间内指定相应的尺寸。
如果你发现自己需要一大堆媒体查询才能让设计适应大大小小的屏幕,那么不妨后退一步,重新审视你的代码结构。因为在所有的情况下,响应式都不是唯一需要考虑的问题。

合理使用简写

不要害怕使用简写属性。合理使用简写是一种良好的防卫性编码方式,可以抵御未来的风险。

(/)分割是为了消除歧义, 
top right 显然是 background-position ,而 2em 2em 是background-size ,
不管它们的顺序如何。但是,请设想一下 50% 50% 这样的值,它到底是 background-size 还是background-position 呢?
当你在使用展开式属性时,CSS 解析器明白你的意图;
而当你使用简写属性时,解析器需要在没有属性名提示的情况下
弄清楚 50% 50% 到底指什么。这就是需要引入斜杠的原因。
background: url(tr.png) no-repeat top right / 2em 2em,
             url(br.png) no-repeat bottom right / 2em 2em,
             url(bl.png) no-repeat bottom left / 2em 2em;
-------------------------------------------------------------------------------------------
background: url(tr.png) top right,
              url(br.png) bottom right,
              url(bl.png) bottom left;
background-size: 2em 2em;
background-repeat: no-repeat;

我应该使用预处理器吗

如果使用得当,它们在大型项目中可以让代码更加灵活
但也有缺点。

很多受预处理器启发的特性都已经以各种方式融入到原生 CSS 中了。

这些原生特性通常比预处理器提供的版本要强大得多,因为它们是动态的。

  • CSS 值与单位(第三版)中的 calc() 函数,不仅在处理运算时非常
    强大,而且已经得到了广泛的支持,当下可用。
  • CSS 颜色(第四版)(http://dev.w3.org/csswg/css-color)引入的 color()函数会提供颜色运算方法。
    举个例子,预处理器完全不知道如何完成100% - 50px 这样的计算,因为在页面真正被渲染之前,百分比值是无法解析的。但是,原生CSS 的 calc() 在计算这样的表达式时没有任何压力。
    变量玩法:
ul { --accent-color: #ccc; }
ol { --accent-color: rebeccapurple; }
li { background: var(--accent-color); }
image.png

建议是,在每个项目开始时使用纯 CSS,只有当代码开始变得无法保持 DRY 时,才切换到预处理器的方案。为了避免可能发生的“依赖”或“滥用”,在引入预处理器的问题上需要冷静决策,不应该在每个项目一开始时就不动脑筋顺着惯性来。

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

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,322评论 0 10
  • 尽量减少代码重复 在软件开发中,保持代码的DRY 和可维护性是最大的挑战之一,而这句话对CSS 也是适用的。在实践...
    图灵教育阅读 1,200评论 0 14
  • 我的青春是一段腐朽的木偶,是拥有与幻想被包容的一切无法定义的浪漫旅程,是自己制造的黑暗吞噬了自己的灵魂。被自己麻木...
    美人鱼的海洋阅读 355评论 0 3
  • 以前写作文总想写“故乡”这个词,小学一般的年级,十一二岁,用喜欢模仿台湾的作家怀念小时候在大陆的生活。总觉得以后自...
    喜树街阅读 82评论 0 1
  • 小时候,幸福是一颗糖;长大后,幸福是一次玩耍;现在,幸福是一种感觉。闭上眼,听风拂过耳畔,才恍然大悟,幸福原来那么...
    执笔溢情阅读 532评论 0 3