美文网首页
《CSS揭秘》笔记

《CSS揭秘》笔记

作者: Yezzle | 来源:发表于2020-04-22 10:04 被阅读0次

最近在看《CSS揭秘》一书,还没看完,想把里面比较好的一些分享出来,然后自己也可以一边看一边记边更新

  • css标准: DRY1①、可维护、灵活性、轻量级

DRY 是 Don’t Repeat Yourself 的首字母缩写,意思是不应该重复你已经做过的事。它是一种 广为流传的编程理念,旨在提升代码某方面的可维护性:在改变某个参数时,做到只改尽量 少的地方,最好是一处

.bg {
    background: -moz-linear-gradient(0deg, yellow, red);
    background: -o-linear-gradient(0deg, yellow, red);
    background: -webkit-linear-gradient(0deg, yellow, red);
    background: linear-gradient(90deg, yellow, red);
}

因为很多浏览器在当时的版本,一些css特性还是实验特性,浏览器为了提前支持实验特性并获得反馈,就在属性值前面加上自己的前缀。这就导致了上面这种意想不到的问题,所以后面新的css特性,要求开发人员需要手动从设置里面开启选项才能体验,然后提供反馈,而这些将不能用在生产环境中,因为你不可能要求用户去手动开启这个设置选项。
最常见的前缀分别是 Firefox 的 -moz-、IE 的 -ms-、Opera 的 -o- 以及 Safari 和 Chrome 的 -webkit-。

  • 自动加前缀的工具或方法:1. CSS3, Please!http://css3please.com)和 pleeeasehttp://pleee- ase.io/playground.html)2. Autoprefixer 3. 在css预处理器(LESS、Sass等)中为常用属性加前缀mixin

  • 可以通过检查css属性支持度,在根元素(<html>)添加一些辅助类来提供完善的回退机制

h1 { color: gray; } 
 
.textshadow h1 {
    color: transparent;     
    text-shadow: 0 0 .3em gray; 
}
  • 尝试灰常新的css属性,可以用@supports规则实现回退
 h1 { color: gray; } 
 
@supports (text-shadow: 0 0 .3em gray) {
    h1 {
        color: transparent;
        text-shadow: 0 0 .3em gray;
    }
}

==慎用@supports== 在上面的例子中,我们想要的文本 投影效果只会在那些支持 text-shadow 且同时支持 @supports 规则的浏览 器中生效。这个范围明显比我们所期望的要窄。

  • JavaScript检查css属性支持度并添加辅助类的方法:

核心思想就是在任意元素的element.style上检查该属性是否存在:

var root = document.documentElement;

if ('textShadow' in root.style) { 
    root.classList.add('textshadow'); 
}  else {    
    root.classList.add('no-textshadow'); 
}

或者如下封装以检测多个属性:

function testProperty(property) { 
    var root = document.documentElement; 
 
    if (property in root.style) {
        root.classList.add(property.toLowerCase());
        return true;
    } 
 
    root.classList.add('no-' + property.toLowerCase());
    return false; 
}
  • 检测属性值是否支持,并添加辅助类:

如果我们想要检测某个具体的属性值是否支持,那就需要把它赋给对应 的属性,然后再检查浏览器是不是还保存着这个值。很显然,这个过程会改 变元素的样式,因此我们需要一个隐藏元素

function testValue(id, value, property) { 
    var dummy = document.createElement('p');
    dummy.style[property] = value; 
 
    if (dummy.style[property]) {
        root.classList.add(id);
        return true;
    } 
 
    root.classList.add('no-' + id);
    return false;
}
  • css编码技巧: 1. 尽量将带数字属性的值与字体相关,比如行高应该写1.5而不是30px:
{
    font-size: 20px;
    line-height: 1.5;
}

但是border-width属性慎重考虑

  1. 利用展开属性合并和合并属性复写,这样可以提高该代码的可维护性:
{
    border: 10px 10px 10px 0;
}
/*拆分为下面的写法虽然增加了代码量,但是提高了可读性和维护性:*/
{
    border: 10px;
    border-left-width:0;
}
  1. 利用颜色关键字currentColor, 他将会被解析为一个颜色值,虽然功能很有限,但它真的是个变量
hr {
   height: .5em;
   background: currentColor;
}

currentColor 本身就是很多 CSS 颜色属性的初始值,比如 border-color 和 outline-color,以及 text-shadow 和 box-shadow 的颜 色值,等等。

  1. 利用inherit关键字继承属性从而不需要重复指定:
input, select, button { font: inherit; }
  • 试觉错觉放到你的设计中:左边是完美居中的,而右边稍微上移一点儿,但在人类眼睛看来恰好居中
  • 关于响应式的建议:避免媒体查询
  1. 使用百分比长度取代固定长度. 如果实在做不到,可以尝试使用与视口相关的单位(vw、vh、vmin 和 vmax),它们的值解析为视口宽度或高度的百分比
  2. 当你需要在较大分辨率下得到固定宽度时,使用 max-width 而不是width,因为它可以适应较小的分辨率,而无需使用媒体查询
  • css预处理器缺点:1. CSS 的文件体积和复杂度可能会失控。 2. 调试难度会增加。 3. 预处理器编译解析阶段耗时,虽然通常很快。 4. 增加团队学习成本。 5. 抽象遗漏法则::“所有重大的抽象机制在某种程度 上都存在泄漏的情况。预处理器有它们自己的bug

  • css自定义变量:申明的时候使用‘--’开头,使用的时候使用var():

ul { --accent-color: purple; }
ol { --accent-color: rebeccapurple; }
li { background: var(--accent-color); }

因为自定义变量有自己的作用域,上面的写法可以做的不同的列表li颜色自动变化。这是预处理器做不到的

  • 实现半透明边框:
{
  border: 10px solid hsla(0,0%,100%,.5); 
  background: white; 
  background-clip: padding-box; /*调整背景区域为padding-box, 默认是border-box(边框的外边缘)*/
}
  • box-shadow实现多重投影:
{
  background: yellowgreen; 
  box-shadow: 0 0 0 10px #655,  0 0 0 15px deeppink,  0 2px 5px 15px rgba(0,0,0,.6);

相关文章

  • css 毛玻璃实现效果

    参考《css揭秘》

  • 前端书单

    HTML 《Head First HTML与CSS》 CSS 《CSS揭秘》《CSS世界》 JS 《JavaScr...

  • 《CSS揭秘》笔记

    最近在看《CSS揭秘》一书,还没看完,想把里面比较好的一些分享出来,然后自己也可以一边看一边记边更新 css标准:...

  • 前端学习计划

    数据结构和算法 书籍阅读《剑指offer》 CSS 书籍阅读:《CSS 权威指南》、《精通 CSS》、《CSS揭秘...

  • 前端推荐书单

    CSS css世界 css揭秘 JavaScript JavaScript高级程序设计 你不知道的JavaScri...

  • CSS揭秘笔记--(1)

    1、CSS某个特性是否被支持原理:在任意元素element.style对象上检查该属性是否存在。代码: 2、CSS...

  • 《CSS揭秘》阅读笔记

    我还记得国外某位大牛在一篇文章中写道,CSS is fine, it's just really hard。读完他...

  • CSS揭秘学习笔记

    第二章 背景与边框 半透明边框background-clip属性设置为padding-box可以使背景不侵入边框,...

  • 你不知道的CSS(二)——颜色

    参考资料: w3cschool 《CSS揭秘》 【CSS进阶】CSS 颜色体系详解——Coco 请注意,如果你了解...

  • CSS开发

    【译】CSS 十六进制颜色揭秘 原文地址:CSS Hex Colors Demystified 原文作者:Dave...

网友评论

      本文标题:《CSS揭秘》笔记

      本文链接:https://www.haomeiwen.com/subject/wrubihtx.html