14, css3弹性盒子, calc计算函数, css3预处理, less语法

day 14

知识回顾

1、如何设置过渡动画

transition:需要过渡的属性 设置过渡时间 速度曲线 延迟时间;

2、水平向左移动100像素,垂直向下移动200像素,代码如何书写

transform:translate(-100px,200px)

3、如何实现盒子绝对居中(关键步骤或核心代码)

  • 子绝父相
  • left:50%;top:50%
  • transform:translate(-50%,-50%)

4、css3帧动画如何定义

@keyframes 动画名称{ }

5、css3动画如何使用

animation:动画名称 动画播放时间 速度曲线 延迟时间 播放次数 是否反向轮流播放;

6、你知道的2d变形有哪些?

  • 2d位移
transform:translate(x,y)
transform:translateX(x)
transform:translateY(y)
  • 2d旋转
transform:rotate(n deg);
  • 2d缩放
transform:scale(x,y);
transform:scaleX(x);
transform:scaleY(y);
  • 2d倾斜
transform:skew(x,y);

7、你知道的3d变形有哪些?

  • 3d位移
transform:translateZ(z);
  • 3d旋转
transform:rotateX(x);
transform:rotateY(y);
transform:rotateZ(z);
  • 3d缩放
transform:scaleZ(z);

补充:过渡效果与自定义动画的区别及适用场景

(1)过渡效果需要有js事件触发、伪类、媒体查询触发;自定义动画可以自动播放(一刷新页面就可以看到动画效果的用animation); 需要自动播放的动画适用自定义动画

(2)过渡动画播放一次就结束了,但是自定义动画可以设置播放次数; 需要多次播放或者重复播放的动画适用自定义动画

(3)复杂的动画效果使用自定义动画,因为自定义动画可以在定义时设置多个关键动画

一、css3弹性盒子

弹性盒子是 CSS3 的一种新的布局模式。

引入弹性盒布局模型的目的:是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间

兼容性:ie11+及标准浏览器最新版是支持的

1、基本概念

(1)容器

使用flex布局的元素,称为flex容器(flex container),简称容器

(2)项目

容器下面的直接子元素(亲儿子)就叫做flex项目(flex item),简称项目

(3)主轴

默认情况下,主轴是水平方向的(起始是在左边,结束是在右边)

项目是在主轴上进行排列的

(4)交叉轴

默认情况下,交叉轴是垂直方向的(起始是在上边,结束是在下方)

2、设置弹性盒子

display:flex;
display:inline-flex;
  • 任何一个容器都可以指定为弹性盒

  • 弹性容器外及弹性子元素内是正常渲染的。弹性盒子只定义了弹性子元素如何在弹性容器内布局

  • 设为Flex布局以后,子元素的float、clear和vertical-align属性将失效

3、容器属性

(1)flex-direction

决定主轴的方向

  • row(默认值):主轴为水平方向,起点在左端
  • row-reverse:主轴为水平方向,起点在右端
  • column:主轴为垂直方向,起点在上沿
  • column-reverse:主轴为垂直方向,起点在下沿

(2)justify-content

定义了项目在主轴上的对齐方式

  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等
  • space-around:每个项目两侧的间隔相等

(3)align-items

定义项目在交叉轴上如何对齐

  • flex-start:交叉轴的起点对齐
  • flex-end:交叉轴的终点对齐
  • center: 交叉轴的中点对齐
  • baseline: 项目的第一行文字的基线对齐
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度

(4)flex-wrap属性

如果一条轴线排不下,如何换行

  • nowrap(默认):不换行
  • wrap:换行,第一行在上方
  • wrap-reverse:换行,第一行在下方

4、项目属性

(1)order属性

定义项目的排列顺序

数值越小,排列越靠前,默认值为0

(2)flex-grow

定义项目的放大比例

默认是0,即如果存在剩余空间,也不放大

(3)flex-shrink

定义项目的缩小比例

默认为1,即如果空间不足,该项目将缩小

如果某个项目在主轴上排不下的情况下,这个项目不想缩小,可以设置flex-shrink:0

不能设置负值

(4)align-self

定义弹性容器内被选中项目的对齐方式,和弹性容器的align-items属性作用相同,此属性用于项目

  • auto 默认值,元素继承了它的父容器的align-items属性,如果没有父容器则为“stretch”

  • stretch 占满整个父级的高度

  • flex-start 交叉轴的起点对齐

  • flex-end 交叉轴的终点对齐

  • center 交叉轴的中点对齐

  • baseline 项目的第一行文字的基线对齐

  • inherit 从父元素继承该属性

二、calc()函数

calc() 函数用于动态计算长度值,是css3的一个新增的功能,用来指定元素的长度

使用标准的数学运算优先级规则

注意:运算符前后需要空格

语法:

.box {
     calc(expression);
}

兼容性:ie9+及标准浏览器最新版是支持的,移动端仅支持”firefox for android 14.0“支持

1、calc()实现两栏自适应

 <div class="wrap">
    <div class="left">左侧盒子</div>
    <div class="right">右侧盒子</div>
</div>
<style>
    .left {
        float: left;
         300px;
        min-height: 200px;
        background-color: pink;
    }
    .right {
        float: left;
         calc(100% - 300px);
        min-height: 200px;
        background-color: yellow;
    }
</style>

三、css3预处理

1、什么是css3预处理

CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。

使用CSS预处理器语言,可以有让CSS更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。

2、什么是less?less的好处

Less 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件,只有在被编译后才能够被浏览器识别使用。

less的好处:

  • 结构清晰,便于扩展
  • 可以方便的屏蔽浏览器私有语法差异
  • 可以方便的实现多重继承
  • 完全兼容css代码,可以方便的应用到之前的老项目中去

3、预处理编译工具

koala是一个前端预处理器语言图形编译工具,支持Less、Sass、Compass、CoffeeScript,帮助web开发者更高效地使用它们进行开发。跨平台运行,完美兼容windows、linux、mac。

官网下载地址:http://koala-app.com/index-zh.html

4、less语法

(1)注释

less共有两种注释风格。

标准的CSS注释,多行注释 /* comment */ ,会保留到编译后的文件。

单行注释 // comment,只保留在less源文件中,编译后被省略。

// 注释
/*这也是一段注释,这段注释是能被编译到css中的*/

(2)导入

@import "文件路径";

如果导入的是css文件,不能省略.css后缀

如果导入的less文件则.less这个后缀名可以省略的

(3)变量

变量以@开头,变量名与变量值之间用【冒号】分隔

如果变量需要镶嵌在字符串之中,就必须需要写在@{}之中

// 变量
// @变量名:变量值;
@w : 300px;
@t : top;
.box1 {
     @w;
    height: @w;
    // 变量镶嵌在字符串中,需要@{变量名}
    border-@{t} : 1px solid red;
}

(4)混入/混合

  • 将一个定义好的class A引入到另一个class B中
.box1 {
     @w;
    height: @w;
    // 变量镶嵌在字符串中,需要@{变量名}
    border-@{t} : 1px solid red;
}

// 将一个定义好的class A引入到另一个class B中
.box2 {
    .box1;
}
  • 混入参数但未设置默认值
//混入参数但未设置默认值
.box3(@r) {
    border-radius: @r;
}

.box4 {
    // 调用的时候必须得传递值是多少
    .box3(10px);
}
  • 混入参数并且设置了默认值
// 混入参数并且设置了默认值
.box5(@ra:5px) {
    border-radius: @ra;
}

.box6 {
    // 如果调用时没有传参,使用默认值
    .box5;
}
.box7 {
    // 调用时如果传参了,就使用传递的值
    .box5(20px);
}
  • 使用@arguments来引用所有传入的变量
.box8(@h:5px,@v:5px,@b:10px,@c:red) {
    box-shadow: @arguments;
}
.box9 {
    .box8(10px,30px);
}
.box10 {
    .box8(@c:rgba(0,0,0,0.2));
}
原文地址:https://www.cnblogs.com/bnzw/p/13608835.html