美文网首页
《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揭秘》笔记

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