CSS笔记

225 阅读5分钟

css权重等级

  1. !important
  2. 行内样式
  3. ID选择器,权重100
  4. class选择器,属性选择器和伪类选择器,权重10
// 属性选择器:根据元素的属性及属性值来选择元素,例button[type="submit"]
// 伪类选择器: a:active, a:focus
  1. 标签选择器,伪元素选择器,权重为1
伪元素选择器: :before, :after

transition和animation

transition(过渡)

transition是一个CSS模块,定义了如何创建一个平滑地变换CSS属性值的方法。它不仅允许创建变换方法,同时也可以通过定时函数来控制变换方法。

CSS支持两种定时函数:

  1. cubic-bezier() 定时函数,定义了一条立方贝塞尔曲线,一般用于动画的平滑变换,也被称为缓动函数。
  2. steps()阶梯函数
// transition:指定过渡动画的属性名称, 过渡动画的时间时间, 定时函数, 执行过渡动画需要等待的时间
transition: transition-property, transition-duration, transition-timing-function, transition-delay;

// example
transition: margin-left 1s ease-in-out 1.5s;

transition案例:

上箭头旋转135度变成下箭头同时伴随颜色变化,有动画效果

// html
<i class="arrow-icon"></i>
<button>开始</button>

// css
.arrow-icon {
    display: inline-block;
    width: 10px;
    height: 10px;
    padding: 2px;
    border-top: 2px solid #979797;
    border-right: 2px solid #979797;
    cursor: pointer;
    transform: rotate(-45deg);
    transtion: transform 0.3s linear, border-color 0.3s ease-in-out;
}
.arrow-up {
    transform: rotate(135deg);
    border-color: red;
}

// jquery
$('button').class(function() {
    $('.arrow-icon').toggleClass('arrow-up'); 
});

animation(动画)

animation是css的一个模块,它定义了如何用关键帧来随时间推移对css属性的值进行动画处理。

@keyframes

@keyframes规则通过在动画序列中定义关键帧的样式来控制css动画序列的中间步骤。这比transition(变换) 更能控制动画序列的中间步骤。

@keyframes slidein {
    from {
        margin-left: 100%;
        width: 30%;
    }
    50% {
        margin-left: 60%;
        width: 60%;
    }
    to {
        margin-left: 0%;
        width: 100%;
    }
}

from 其实就是 0% 表示起始状态, to 其实就是 100% 表示结束状态

animation: 
    animation-name,                 // 动画名称
    animation-duration,             // 一个动画周期时长
    animation-timing-function,      // 一个动画执行的节奏
    animation-delay,                // 动画何时开始
    animation-iteration-count,      // 动画结束前运行的次数
    animation-direction,            // 动画是否反向播放
    animation-fill-mode,            // 动画执行之前和之后如何将样式应用于其目标
    animation-play-state;           // 定义一个动画是否运行或则暂停

animation案例(引用MDN):

// html
<div class="view_port">
    <div class="polling_message">Listening for dispatches</div>
    <div class="cylon_eye"></div>
</div>

// css
.polling_message {
    margin-right: 2%;
    float: left;
    color: white;
}
.view_port {
    width: 100%;
    height: 25px;
    overflow: hidden;
    background-color: black;
}
.cylon_eye {
    width: 20%;
    height: 100%;
    color: white;
    background-color: red;
    background-image: linear-gradient(to right,
        rgba(0, 0, 0, .9) 25%,
        rgba(0, 0, 0, .1) 50%,
        rgba(0, 0, 0, .9) 75%;
    )
    animation: move_eye 4s linear 0s infinite alternate;
}
@keyframes move_eye {
    from {
        margin-left: -20%;
    }
    to {
        margin-left: 100%;
    }

Sass和SCSS的区别

css预编译器

  • Sass 一种缩进语法
  • SCSS 一种css-like语法(视图弥合Sass和css之间的鸿沟,更加贴近css语法)

从新的语法规则Sass 3开始被称为 “SCSS”(时髦的css(Sassy CSS)),它是css3语法的扩展级,就是说每一个正确的css3文件也是合法的SCSS文件。

Sass写法

.element-a
    color: hotpink
    .element-b
        float: left

SCSS写法

.element-a {
    color: hotpink;
    .element-b{
        float: left;
    }
}

=> 转化为css

.element-a {
    color: hotpink
}
.element-a .element-b {
    float: left
}

  1. .scss是sass 3开始的,css3语法的扩展级。易于阅读

  2. .sass是受Haml简洁启发,没有括号和分号,使用缩进。

  3. 实际项目开发中更倾向于使用scss,推荐使用scss

scss和less的区别

  1. 编译环境不一样,scss需要ruby环境,在服务端处理,而less需要引入less.js来处理输出为css
  2. 变量符号不一样,scss采用的是'$',less采用的'@'
  3. 实际开发中更倾向于使用scss,scss相对于less功能更加齐全。

let和var的区别

  1. var 语句声明一个变量,并可选地将其初始化为一个值
  2. let 语句声明一个块级作用域的本地变量,并可选地将其初始化为一个值
/*
    1. var声明的变量只能是全局或则整个函数块的,let声明的变量是被限制在块级中的
    2. var的变量提升: 由于变量声明总是在任意代码执行之前处理,所以代码中的任意位置声明的总是等效于在代码开头声明。
    3. let的暂时性死区
    4. let不可以重复声明会直接报错
*/

// 暂时性死区
function do_something() {
    console.log(bar);  // undefined
    console.log(foo); // ReferenceError  直接报错
    var bar = 1;
    let foo = 2;
}

// 暂时性死区更好的例子
var a = 1;
function test() {
    console.log(a); // ReferenceError 直接报错
    let a = 2;
}
test();

一张图片解决img图片切换效果

// css
img {
    transtion: filter 0.4s linear;
    filter: grayscale(100%);
}
img:hover {
    filter: none;
}

<img src="logo.png" />

filter: grayscale(100%);将图片转换为灰度图像。值定义转换的比例。值为100%则完全转换为灰度图像。 值0%图片无变化。取值范围0%-100%;

@import和link标签区别

  1. @import 告诉CSS引擎引入一个外部样式表
  2. 加载页面时,link标签引入的css被同时加载;@import引入的css将在页面加载完毕后被加载
  3. 浏览器渲染的动作一般会执行多次的。下一次渲染一定是基于之前加载过的样式整合后绘制页面的,已经被渲染过的页面元素,也会被重新渲染。

@import虽然会晚加载,但是却会在加载完毕后置于样式表顶部,最终渲染时自然会被下面的同名样式层叠