前言

我们在现代 CSS 中所面临的挑战已经不在于如何绕过这些转瞬即逝的浏览器 bug。如今的挑战是,在保证 DRY ① 、可维护、灵活性、轻量级并且尽可能符合标准的前提下,把我们手中的这些CSS特性转化为网页中的各种创意。这正是这本书将要呈现的内容。——引用自前言

①DRY 是 Don’t Repeat Yourself 的首字母缩写,意思是不应该重复你已经做过的事。它是一种广为流传的编程理念,旨在提升代码某方面的可维护性:在改变某个参数时,做到只改尽量少的地方,最好是一处。强调 CSS 代码的 DRY 原则是一个贯穿本书的主题。DRY 的反面是 WET,它的意思是 We Enjoy Typing(我们喜欢敲键盘)或 Write Everything Twice(同样的代码写两次)。

全书都是以前言这段话为基础,根据不同场景下的各种问题给出更有创意的实现方案,一共包含了47篇攻略,按主题分为 7 章,每篇攻略至少会附上一个在线示例,在线示例一定不能错过,对案例的理解有很大帮助。

虽然建议是作为进阶阅读,但是每篇攻略都贴心的提供了背景知识提示,不管能否完全看懂,仍然可以开阔思路

ps:有兴趣想看这本书的可以联系我分享pdf电子版(仅供学习使用,还是呼吁大家支持正版书籍),笔记基本就是摘要==巩固知识,阅读完整书籍才能达到更好的学习效果。

第一章 引言

Web 标准:是敌还是友

标准的制定过程

  1. 编辑草案(ED)
  2. 首个公开工作草案(FPWD)
  3. 工作草案(WD)
  4. 候选推荐规范(CR
  5. 提名推荐规范(PR)
  6. 正式推荐规范(REC)

浏览器兼容性

推荐以下网站查证浏览器对CSS属性的支持情况:

  • Can I Use ... ?
  • WebPlatform.org
  • Mozilla Developer Network
  • 维基百科上的“浏览器排版引擎对比(CSS兼容性)”词条

浏览器前缀

通过在名称前面加上浏览器特有的前缀,就可以自由地尝试使用不同浏览器实现的一些实验性的(甚至是私有的、非标准的)特性,工作组会将收到的反馈吸收到规范之中,并且逐渐完善该项特性的设计。然而这种方式产生了很多弊端,例如随着规范的修改要来回打补丁修改,代码冗余不利于维护等。

最近,浏览器厂商已经很少以前缀的方式来实验性地实现新特性了。取而代之的是,这些实验性特性需要通过配置开关来启用,这可以有效防止开发者在生产环境中使用它们,因为你不能要求用户为了正确地浏览你的网站而去修改浏览器设置。当然,这会导致一个后果:尝试这些实验性特性的开发者会减少;但我们仍然会得到足够多的反馈,甚至是更高质量的反馈(你可能会质疑),同时还避免了浏览器前缀的所有缺点。不过我们还需要很长的时间,才能从浏览器前缀所引发的涟漪效应中解脱出来。

CSS 编码技巧

尽量减少代码重复

代码可维护性的最大要素是尽量减少改动时要编辑的地方,当某些值相互依赖时,应该把它们的相互关系用代码表达出来。例:line-height: 1.5;

代码易维护 vs. 代码量少。

currentColor:它是从SVG 那里借鉴来的一个特殊的颜色关键字。它没有绑定到一个固定的颜色值,而是一直被解析为 color,这个特性让它成为了 CSS 中有史以来的第一个变量。

inherit (继承):很容易被遗忘,可以用在任何 CSS 属性中,而且它总是绑定到父元素的计算值(对伪元素来说,则会取生成该伪元素的宿主元素)。

tips:推荐使用 HSLA 而不是 RGBA 产生半透明的白色,因为它的字符长度更短,敲起来也更快,这归功于它的重复度更低。

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

人的眼睛并不是一台完美的输入设备,有时候精准的尺度看起来并不精准,而我们的设计需要顺应这种偏差。

在视觉设计领域广为人知的例子:我们的眼睛在看到一个完美垂直居中的物体时,会感觉它并不居中,实际上,我们应该把这个物体从几何学的中心点再稍微向上挪一点,才能取得理想的视觉效果。

关于响应式网页设计

每个媒体查询都会增加成本,用对了它就是利器。

我们的思路是尽最大努力实现弹性可伸缩的布局,并在媒体查询的各个断点区间内指定相应的尺寸。当网页本身的设计足够灵活时,让它变成响应式应该只需要用到一些简短的媒体查询代码。

如果你发现自己需要一大堆媒体查询才能让设计适应大大小小的屏幕,那么不妨后退一步,重新审视你的代码结构。因为在所有的情况下,响应式都不是唯一需要考虑的问题。

以下建议可能会帮你避免不必要的媒体查询:

  • 使用百分比长度来取代固定长度。如果实在做不到这一点,也应该尝试使用与视口相关的单位( vw 、 vh 、 vmin 和 vmax ),它们的值解析为视口宽度或高度的百分比。
  1. em:相对于当前对象内文本的字体大小。

  2. rem:r是"root"的缩写,意思是 1rem 等于根元素的字体大小;大部分情况下,根元素就是<html>元素。rem 也可以用基于 html 根元素字体大小的 rem 作为整个网格布局或者UI库的大小单位.container { width: 70rem; // 70 * 14px = 980px}

  3. vw:1vw 等于 1/100 的视口宽度。

  4. vh:1vh 等于 1/100 的视口高度。

  5. vmin 和 vmax:是 vw 和 vh(视口高度和宽度)两者的最小或者最大值。

  6. ch:单位通常被定义为数字 0 的宽度。

  7. ex:定义为当前字体的小写x字母的高度或者 1/2 的 1em。 很多时候,它是字体的中间标志。

  8. pc:1pc 等于 12 点。

  9. pt:1pt 等于 1/72 英寸。

  • 当你需要在较大分辨率下得到固定宽度时,使用 max-width 而不是 width,因为它可以适应较小的分辨率,而无需使用媒体查询。

  • 不要忘记为替换元素(比如 img 、 object 、 video 、 iframe 等)设置一个 max-width,值为 100%。

  • 假如背景图片需要完整地铺满一个容器,不管容器的尺寸如何变化,background-size: cover 这个属性都可以做到。但是,我们也要时刻牢记——带宽并不是无限的,因此在移动网页中通过 CSS 把一张大图缩小显示往往是不太明智的。

  • 当图片(或其他元素)以行列式进行布局时,让视口的宽度来决定列的数量。弹性盒布局(即 Flexbox)或者 display: inline-block 加上常规的文本折行行为,都可以实现这一点。

  • 在使用多列文本时,指定 column-width (列宽)而不是指定 column-count(列数),这样它就可以在较小的屏幕上自动显示为单列布局。

合理使用简写

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

当我们要明确地去覆盖某个具体的展开式属性并保留其他相关样式,那就需要用展开式属性。

展开式属性与简写属性的配合使用,可以让代码更加 DRY。

我应该使用预处理器吗

预处理器为 CSS 的编写提供了一些便利,比如变量、mixin、函数、规则嵌套、颜色处理等。如果使用得当,它们在大型项目中可以让代码更加灵活,而 CSS 自身在这方面确实有很大局限。只要我们在代码健壮性、灵活性和 DRY 方面有追求,就会感受到 CSS 在这方面的局限。不过,预处理器也不是完美无缺:

  • CSS 的文件体积和复杂度可能会失控。即使是简洁明了的源代码,编译后也可能会变成一头巨兽。

  • 调试难度会增加,因为你在开发工具中看到的 CSS 代码并不是你写的源代码。不过这个问题已经大大好转了,因为已经有越来越多的调试工具开始支持 SourceMap。

  • 预处理器在开发过程中引入了一定程度的延时。尽管它们通常很快,但仍然需要差不多一秒钟的时间来把你的源代码编译成 CSS,而你不得不等待这段时间才能预览到代码的效果。

  • 每次抽象都必然会带来更高的学习成本,每当有新人加入到我们的代码库中,这个问题都会重演。

  • 抽象泄漏法则:“所有重大的抽象机制在某种程度上都存在泄漏的情况。”预处理器是由人类写出来的,就像所有由人类写出来的大型程序一样,它们有它们自己的 bug。这些 bug 可能会潜伏很久,因为我们很少会怀疑预处理器的某个 bug 才是我们 CSS 出错的幕后元凶。

  • 还可能导致不自觉地“依赖”和“滥用”。在某些时候,预处理器并不必要,比如在小型项目中;或者在未来,说不定预处理器最受欢迎的那些特性都被加入了原生 CSS 中。为了避免可能发生的“依赖”或“滥用”,在引入预处理器的问题上需要冷静决策,不应该在每个项目一开始时就不动脑筋顺着惯性来

已经有很多受预处理器启发的特性都已经以各种方式融入到原生 CSS 中了,原生特性通常比预处理器提供的版本要强大得多,例如:calc() 函数和 color() 函数。

掘金:《CSS揭秘》笔记(一)

博客园:《CSS揭秘》笔记(一)

《CSS揭秘》笔记(一)相关推荐

  1. 【经济学】【综合篇】经济机器是怎样运行的

    原视频:经济机器是怎样运行的 (时长30分钟) Ray Dalio 前言:经济与我们每一个人息息相关,经济社会的一些变革或举措也会直接或间接的反映到我们每个个体身上.了解经济,提高自己的认知,可以帮助 ...

  2. 经济机器是怎样运行的

    经济机器是怎样运行的 经济机器是怎样运行的是桥水基金创始人/<原则>作者-瑞·达里奥,制作的一部30m的视频,如下是他的简单经济学观点原文所述: 经济就像一部简单的机器那样运行,由几个简单 ...

  3. 经济机器是怎么运行的

    近年来,随着全球化和信息技术的蓬勃发展,经济机器已经成为了社会发展必不可少的组成部分.那么,经济机器是如何运转的呢? 首先,我们需要了解经济机器的基本构成要素.经济机器由供求关系.产业链和市场三大要素 ...

  4. 《经济机器是怎样运行的》笔记(三)

    19:20-31:00 19:20 去杠杆化导致债务过重,减轻债务有四种办法: 削减支出:个人.企业.政府削减支出(紧缩) 减少债务:通过债务违约或重组(萧条) 财富再分配:将财富从富人转给穷人 发行 ...

  5. 《经济机器如何运转》笔记

    视频链接:[Ray Dalio]三十分钟看懂经济机器如何运转(比尔盖茨推荐) 影响经济的三要素 生产率的提高 短期债务周期 长期债务周期 理解交易 每次交易中:买方使用 货币/信用 向卖方获取 商品. ...

  6. arm-linux 程序开发入门(QT窗口应用程序、编码、交叉编译、调试)(三机器和双机器搭建方法)(笔记)

    Linux及Arm-Linux程序开发笔记(零基础入门篇) 文章目录 前言 一.Arm-Linux程序开发平台简要介绍 1.1程序开发所需系统及开发语言 1.2系统平台搭建方式 二.Linux开发平台 ...

  7. 《基于小型训练集的深度学习迁移的食用毒蘑菇机器视觉识别系统》论文笔记

    <基于小型训练集的深度学习迁移的食用毒蘑菇机器视觉识别系统>论文笔记 链接:Machine Vision Recognition System of Edible and Poisonou ...

  8. 让VC编译的Release版本程序在其他机器上顺利运行

    让VC编译的Release版本程序在其他机器上顺利运行 Posted on 2011-07-29 15:06 单鱼游弋 阅读(939) 评论(0) 编辑 收藏 链接的时候分静态链接和动态链接两种. 静 ...

  9. Qt5.5-msvc2013-x64编译的程序在其它机器上无法运行,提示0xc000007b错误

    问题描述:在win7系统上,使用Qt5.5+msvc2013-x64编译的程序在其它机器上无法运行,提示0xc000007b错误. 解决过程: 在网上查看解决方案,一度受到误导,看到大量的说需要安装D ...

  10. 基于神经网络的机器阅读理解综述学习笔记

    基于神经网络的机器阅读理解综述学习笔记 一.机器阅读理解的任务定义 1.问题描述 机器阅读理解任务可以形式化成一个有监督的学习问题:给出三元组形式的训练数据(C,Q,A),其中,C 表示段落,Q 表示 ...

最新文章

  1. 一起睡了四年的大学舍友
  2. Karpathy更新深度学习开源框架排名:TensorFlow第一,PyTorch第二
  3. 使用帮助   history 用法   echo输出闪烁作业
  4. ExecutorService框架
  5. Debian下Cannot set LC_CTYPE to default locale: No such file or directory解决方法
  6. 【ARM-Linux开发】Wi-Fi 应用工具wpa_supplicant
  7. FLEX4中的Panel如何实现带自定义图标和按钮
  8. 前百度主任架构师创业,两年融资千万美元,他说 AI 新药研发将迎来黄金十年...
  9. mysql数据表设计 对应成二维数组_结果集数据怎么转换成二维数组
  10. 保持皮肤水嫩有光泽,让皮肤保湿的土办法 - 生活至上,美容至尚!
  11. P5057 [CQOI2006]简单题
  12. MongoDB 在windows shell环境下的基本操作和命令的使用示例(四)
  13. matlab rf建模实例,[程序源代码]MATLAB在射频电路设计中的应用
  14. 基于大数据技术推荐系统算法案例实战教程
  15. Mybatis 插件(plugins)
  16. 汇编指令:CLD STD MOVS LODS STOS
  17. 10个物联网应用的案例
  18. Axure rp9 中继器新建表格
  19. android 文件管理器
  20. 如何用css实现一段文字的两端对齐和分散对齐

热门文章

  1. shelve 之VS. pickle
  2. Android的Framework分析---4硬件抽象HAL
  3. android studio转载文章
  4. XamarinAndroid组件教程RecylerView动画组件使用动画(2)
  5. AFP溢出攻击模块afp/loginext
  6. 虚拟多Mac地址工具Multimac
  7. 分享Kali Linux 2016.2第47周镜像
  8. hibernate c3p0 mysql_hibernate-使用c3p0数据库连接池,以及其它配置
  9. android 保存崩溃信息,Android保存每次运行崩溃报告的日志
  10. 右边补0 润乾报表_关于润乾报表的补充说明 -