分享几个css3里面常用的基本属性渐变,2D,动画

54 阅读7分钟

1. 图片原点

 背景图默认填充的区域是 paddingcontent 区域,我们把左上角的padding起点叫做图片的原点。

  • 图片填充整个盒子

background-size: cover;

  • 图片是否换行

background-repeat: no-repeat;

  • 设置背景图的原点为padding区域 : 默认值

background-origin: padding-box;

  • 设置背景图的原点为border区域

background-origin: border-box;

  • 设置背景图的原点为content区域

background-origin: content-box;

2. 图片裁剪

background-clip: 设置背景图的向外裁剪的区域;默认是border-box 只要超出border区域,则多余的部分会被裁减掉。

  • 默认值:超出border区域会被裁减掉:

background-clip: border-box;

  • 超出padding区域就会被裁减掉:

background-clip: padding-box;

  • 超出内容区域就会被裁减掉:

background-clip: content-box;

注意: 如果想让背景图只呈现在文本上,则需要做以下几件事情:

  1. 设置文本颜色为透明:color: transparent;
  2. 给background-clip前面加上私有前缀 -webkit-:-webkit-background-clip: text;

3. 文本属性

  1. white-space: pre;

该属性类似于pre标签,加上之后,内容会按照原来的写法来展示

  1.  white-space: nowrap;

文本不换行,使用频次相对较高

  1. text-overflow: clip;

超出部分直接被裁减掉,注意,要想生效,必须添加overflow:hidden;

  1. text-overflow: ellipsis;

 超出部分显示省略号 重点掌握

4. 渐变

4.1 线性渐变 background-image: linear-gradient();

渐变的原理其实就是一张背景图片,但是不需要引入图片的指定url的,而是使用内置的特殊的“图片”。

  1. 该属性可以实现渐变效果,默认是从上往下的渐变
background-image: linear-gradient(red, yellow, blue);
  1. 如果要改变线性渐变的方向,则需要使用关键词来处理 to
background-image: linear-gradient(to right, red, yellow, blue);
background-image: linear-gradient(to right top, red, yellow);
  1. 如果要改变线性渐变的方向,还能使用角度来处理,从中间画一条线,旋转30°。
background-image: linear-gradient( 30deg,red, yellow, blue);
background-image: linear-gradient(red, yellow, blue);
  1. 调整开始渐变的位置:这行代码意思是指:50px以前是纯红色,50px以后开始渐变,渐变到100px的时候,是纯黄色;然后继续渐变,150px及以后颜色是蓝色 。
background-image: linear-gradient(red 50px, yellow 100px, blue 150px);
  1. 重复渐变
background-image: repeating-linear-gradient(red 50px, yellow 100px, blue 150px);
4.2 径向渐变

径向渐变:多个颜色之间的渐变,默认是从圆心开始往四周扩散,通常是指圆形或者椭圆形。

  1. 径向渐变:径是值半径的意思
background-image: radial-gradient(red, yellow, green);
  1. 设置圆心在左上角
background-image: radial-gradient(at left top, red, yellow, green);
  1. 设置圆心为x轴50px,y轴100px
background-image: radial-gradient(at 50px 100px, red, yellow, green);
background-image: radial-gradient(red, yellow, green);
  1. 调整渐变形状为正圆
background-image: radial-gradient(circle, red, yellow, green);
  1. 调整渐变的位置,意义与线性渐变相同
background-image: radial-gradient(red 20px ,yellow 50px, rgba(0,0,0,.4) 100px);

5. 2D

5.1 transform(位移)

2d位移可以改变元素的位置:

  1. 先给元素加上转换属性 transform
  2. 给transform具体的值:

translateX: => 设置水平方向位移,需要指定长度,如果是百分比,则参考自身的宽度;

transform: translateX(100px);

translateY: => 设置垂直方向位移,需要指定长度,如果是百分比,则参考自身的高度;

transform: translateY(50px);

translate :   => 一个值代表水平方向, 两个值代表水平和垂直方向;

transform: translate(100px , 50px);

注意:

  1. 位移与相对定位很像,都不会脱离文档流,不会影响到其他元素
  2. 与相对定位的区别:相对定位的百分比是参照的父元素,位移是参照的自身
  3. 浏览器对位移解析的时候,性能会更好,效率会更高
  4. 位移对行内元素无效
  5. 配合定位,可以实现元素水平垂直居中

面试点:如何让一个未知宽度和高度的子盒子实现水平垂直居中?

a:使用定位配合位移

  1. 父盒子设置相对定位
  2. 子盒子设置绝对定位,且 left50%,top50%
  3. 子盒子 transform: translate(-50%,-50%)

b:使用 flex布局

  1. 父盒子设置flex
  2. 父盒子加上 justify-content: center && align-items: center;
5.2 缩放

2D缩放是值: 让元素放大或缩小

使用:

  1. 给元素加上transform属性
  2. 设置transform的值
    scaleX : 设置水平方向的缩放比例,值为一个数字。1表示不缩放,维持原样。大于1等于放大,小于1等于缩小
    scaleY : 设置垂直方向的缩放比例,值为一个数字。1表示不缩放,维持原样。大于1等于放大,小于1等于缩小
    scale : 同时设置水平和垂直方向
div:hover {
            transform: scale(1.5);
        }
5.3 旋转

2d旋转:让元素在二维平面内,顺时针或者逆时针渲染

方法:

  1. 给元素添加转换属性 transform
  2. 编写具体值 rotate  正数是顺时针,负数是逆时针
 transform: rotateZ(1deg);
5.4 复合写法

这是复合写法,通常如果我们要写2d效果的时候,先写位移,再写缩放,最后再写旋转。否则可能会出现旋转之后中心点位置偏移的问题。

transform: translate(100px) scale(1.3) rotate(60deg);

6. 动画

动画:

关键帧: 指在构成一段动画的若干帧中,起决定性作用的那几帧。

使用动画:

  1. 定义关键帧 (定义动画);
  2. 使用animation来调用动画 动画名字 + 持续时间 是必填的

简单定义动画

  1. @keyframes  : 声明一个动画语法;
  2. pgm : 动画名字 可以随便自定义
@keyframes pgm {
    from {
               
}

to {
   transform: scale(1.5); 
    }
}

复杂动画定义

@keyframes move2 {
            25% {
                background-color: skyblue;
            }

            50% {
                background-color: orange;
            }

            75% {
                background-color: blue;
                border-radius: 50%;
            }

            100% {
                background-color: yellowgreen;
                border-radius: 50%;
                transform: translate(100px);
        }
 }

几个必须调用动画的参数

  1. 必填: 动画名字
 animation-name: move;
  1. 必填: 持续时间
animation-duration: 2s;
  1. 设置动画的类型 ,可选
animation-timing-function: linear;
  1. 设置动画延迟时间, 可选
 animation-delay: 0s;
  1. 设置动画的播放次数 可选:值为number的时候,可以指定动画播放次数,也可以指定为infinite,无限次的意思。
animation-iteration-count: infinite;
  1. 设置动画方向, 可选  normal默认值  reverse反方向 alternate 先正常再反向 alternate-reverse 先翻转再正常。
animation-direction: normal;
  1. 设置动画结束的状态 forwards: 动画结束时,保持最终定点状态 backwards 回到最开始状态。
animation-fill-mode: backwards;
  1. 复合写法
animation: move2 3s linear infinite alternate;
  1. 设置动画播放状态, running代表播放, paused代表暂停
div:hover {
   animation-play-state: paused;
 }
6.1 练习

利用动画和2d来实现轮播图模型

核心在于控制main这个盒子的滚动,最外层wrapper还是需要保持固定;所以flex要加在mian中。

而且,滚动到最后一个盒子的时候,会有一个盒子的空白距离,所以,把第一个盒子复制一份放到最后,就刚好可以弥补这个空白距离; 当空白距离滚动结束之后,动画也完成了一次循环,所以第一张图又会从起点开始滚动,刚好能够衔接上。

<style>
.wrapper {
    margin: auto;
    width: 300px;
    height: 100px;
    border: 1px solid red;
    overflow: hidden;
           
}

.main {
     display: flex;
     animation: move 6s linear infinite;
}
.box {
   flex-shrink: 0;
   width: 300px;
   height: 100px;
}

.inner1 {
    background-image: linear-gradient(yellow,green,skyblue);
}

.inner2 {
    background-image: linear-gradient(pink,purple);
}

.inner3 {
     background-image: linear-gradient(red, orange);
}

@keyframes move {
    from {
            
}


    to {
       transform: translateX(-900px);
     }
}
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="main">
            <div class="inner1 box">盒子1</div>
            <div class="inner2 box">盒子2</div>
            <div class="inner3 box">盒子3</div>
            <div class="inner1 box">盒子1</div>
        </div>
    </div>
</body>

7. 过渡

transition:  过渡可以在不使用动画的情况下,让元素从一种样式平滑过渡到另一种样式。

特别注意: 哪个元素需要过渡,就加在哪个元素身上,而不是hover;持续时间和需要过渡的元素是必填的。

  1. 需要过渡的属性,多个值以逗号分隔。
transition-property: width,background-color;
  1. 过渡持续时间
transition-duration: 1s;
  1. 延迟时间
transition-delay: 1s;
  1. 过渡类型
transition-timing-function: linear;
  1. 复合写法
transition: all 1s;