前端相关

CSS3 文本_边框_背景 渐变_动画_3D

2017-09-13  本文已影响70人  DeeJay_Y

css3渐变生成工具

文本

text-overflow

对于省略号 还需要配合其他属性进行使用

        .panel {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }

超出部分使用省略号的方法:设置不换行,超出部分隐藏,最后设置使用省略号才能达到效果。

文本换行

word-wrap

允许长单词或url地址换行到下一行

word-break

规定自动换行的处理方法

white-space

设置如何处理元素内的空白

text-shadow

text-shadow: 颜色(color) x轴(X offset) y轴(Y offset) 模糊半径(blur)
text-shadow: x轴(X offset) y轴(Y offset) 模糊半径(blur) 颜色(color)

和box-shadow很像
可以设置偏移,颜色,阴影大小

text-shadow: 2px 2px 3px #333;

多个样式可以,隔开
结合背景颜色,通过偏移负距离,做出多种效果

border

border-radius

通过border-radius设置元素的圆角半径

border-radius: 5px;

对于正方形,border-radius设置为边长的50% ,就可以变为圆形

border-image

可以使用图片作为边框的修饰

box-shadow

box-shadow: inset x-offset y-offset blur-radius spread-radius color
多个样式的使用用,隔开

box-sizing

改变盒模型

background

background-size

规定背景图片的尺寸,如果是百分比 那么尺寸相对于父元素的宽度和高度

        .box {
            width: 180px;
            height: 120px;
            border: 1px solid red;
            background: url("https://unsplash.it/200/300/?random") 0 0 no-repeat;
            /*控制图片展示的大小*/
            /*background-size: 180px 120px;*/
            /*background-size: contain;*/
            /*background-size: cover;*/
        }

如果想让box全屏 可以这么设置:

        html,body {
            height: 100%;
        }
        .box {
            margin: 0;
            /*不设置宽度*/
            height: 100%;
            /*设置height为100% 没效果 要设置父容器也是100%height,即body html都要设置*/
            background: url("https://unsplash.it/400/600/?random") center center no-repeat;
            background-size: cover;
        }

background-origin

规定background-position属性相对于什么位置来定位

如果background-attachment 属性为fixed 则该属性没有效果

background-clip

规定背景的绘制区域

多背景

css3可以使用多张背景图片

            background: url("haoroomCSS1_s.jpg") 0 0 no-repeat,
                        url("haoroomCSS2_s.jpg") 200px 0 no-repeat,
                        url("haoroom.jpg") 400px 201px no-repeat;

Gradient

CSS3渐变分为 liner-gradient 和 radial-gradient

其语法由于每个浏览器都有不同的实现,介绍2012.04w3c推荐标准语法

线性渐变 liner-gradient

在线性渐变过程中,颜色沿着一条直线过度,从左到右,从右到左,从顶到底,从底到顶或者沿着任何轴

linear-gradient([[<angle> | to <side-or-conrner>],]?<color-stop>[,<color-stop>]+)

W3C标准线性渐变语法包括3个重要属性参数:

第一个参数指定了渐变的方向,同时决定了渐变颜色的停止位置。这个参数值可以省略,当省略不写的时候其取值为to bottom

在决定渐变的方向主要有2种方法:

第二个参数和第三个参数,表示颜色的起始点和结束点。可以在插入多个颜色值。

水平和垂直渐变举例:

            width: 200px;
            height: 50px;
            /*background: linear-gradient(red,blue); 默认从上到下 和to bottom一样*/
            /*background: linear-gradient(to right,red,blue); 从左到右*/
            /*background: linear-gradient(to right,red,blue,yellow,green);可以有多个颜色*/

对角的线性渐变 指定水平和垂直的起始位置来制作对角渐变:

            /*左上到右下 to bottom 改为 to bottom right*/
            background: linear-gradient(to bottom right, red,blue);

使用角度

如果你想要在渐变的方向上做更多的控制,你可以定义一个角度,而不用预定义方向(to bottom、to top、to right、to left、to bottom right,等等)。

角度是指水平线和渐变线之间的角度,逆时针方向计算。换句话说,0deg 将创建一个从下到上的渐变,90deg 将创建一个从左到右的渐变。

background: linear-gradient(180deg, red, blue);

径向渐变 radial-gradient

是圆形或者椭圆形渐变,颜色不再沿着一条直线轴变化,而是从一个起点朝所有方向混合。

radial-gradient([[<shape> || <size>] [at <position>]?, | at <position>,]?<color-stop>[,<color-stop>]+);

过渡和动画

过渡

在 CSS3引入 transition之前没有时间轴,所有的状态变化都是瞬间完成的。

transition的作用在于,指定状态变化所需要的时间

transition: all 1s;

另外transition 一般加在元素本体上,而不是伪类上,虽然加到伪类上也能用,但是多个伪类状态的时候,只需要在本体上写一个transition就可以了

指定属性

如果不想写all 想针对特定的属性进行过渡的动画变化,例如针对height属性,可以写成
transition: 1s height;
这样的话,只有height是过渡的,其他属性比如宽度还是瞬间完成的。
另外同一行transition中,可以分别制定多个属性
transition: 1s height,1s width;

delay

对于上面的例子transition: 1s height,1s width;,height和width的变化是同时进行的。如果我们希望height先发生变化,然后width再发生变化。就可以为width指定一个delay参数:
transition: 1s height,1s 1s width;
上面代码指定,width在1s之后,再开始变化

delay的意义在于它指定了动画发生的顺序,使得多个不同的transition可以连在一起,形成复杂的效果。

transition-timing-function

缓动函数,状态变化速度,默认不是匀速的,而是逐渐放慢,叫做ease;
transition: 1s ease;

除了ease还有:

目前,包括IE10在内的各大浏览器都已经支持无前缀的transition
transition需要明确的知道,开始的状态和结束的状态的具体数值,才能计算出中间状态,什么none到block之类的是不行的
transition是一次性的,不能重复发生,除非一再触发

animation

transition比较简单,animation可以实现复杂的动画,使用animation我们需要定义动画过程,也就是关键帧

定义一个动画 rainbow:

        @keyframes rainbow {
            0% {background: #c00;}
            50% {background: orange;}
            100% {background: yellowgreen;}
        }

使用@keyframes 定义动画,上述rainbow分为3个状态,值是每个状态下的属性值,如果有需要还可以插入更多状态。

定义好关键帧之后,就可以给DOM元素绑定动画了,类似于事件:

        .box1:hover {
            animation: 1s rainbow;
        }

当hover时,会进行动画效果,默认只播放一次,加入infinite关键字,可以让动画无限次播放。

        .box1:hover {
            animation: 1s rainbow infinite;
        }

也可以指定具体循环的次数,比如说循环3次:

        .box1:hover {
            animation: 1s rainbow 3;
        }

animation-fill-mode

动画结束后会立即从结束跳回起始状态。如果想让动画保持在结束状态,需要使用animation-fill-mode属性:

        .box1:hover {
            animation: 1s rainbow forwards;
        }

有如下属性值:

animation-direction

动画循环播放时,每次都是从结束状态跳回到起始状态,再开始播放。animation-direction属性,可以改变这种行为。
比如说可以让动画从100%到0%开始播放

另外还有取值为:

语法

同transition一样,animation也是一个简写形式

div:hover {
  animation: 1s 1s rainbow linear 3 forwards normal;
}

这是一个简写形式,可以分解成各个单独的属性

div:hover {
  animation-name: rainbow;
  animation-duration: 1s;
  animation-timing-function: linear;
  animation-delay: 1s;
  animation-fill-mode:forwards;
  animation-direction: normal;
  animation-iteration-count: 3;
}

@keyframes关键字用来定义动画的各个状态,它的写法相当自由:

        @keyframes rainbow {
            0% {background: #c00;}
            50% {background: orange;}
            100% {background: yellowgreen;}
        }

其中0%可以用from代表,100%可以用to代表,所以也可以写成:

        @keyframes rainbow {
            from {background: #c00;}
            50% {background: orange;}
            to {background: yellowgreen;}
        }

如果省略某个状态,浏览器会自动推算中间状态,所以下面都是合法的写法。

@keyframes rainbow {
  50% { background: orange }
  to { background: yellowgreen }
}
@keyframes rainbow {
  to { background: yellowgreen }
}

甚至,可以把多个状态写在一行。

@keyframes pound {
  from,to { transform: none; }
  50% { transform: scale(1.2); }
}

另外一点需要注意的是,浏览器从一个状态向另一个状态过渡,是平滑过渡。steps函数可以实现分步过渡。

div:hover {
  animation: 1s rainbow infinite steps(10);
}

animation-play-state

有时,动画播放过程中,会突然停止。这时,默认行为是跳回到动画的开始状态,如果想让动画保持突然终止时的状态,就要使用animation-play-state属性。
比如说页面上有个滚动的div,一直在循环滚动,hover时设置停止,那么就可以设置为

    <style>
        @keyframes scroll {
            from {left: 0;}
            to {left: 100%;}
        }
        .box1 {
            width: 200px;
            height: 200px;
            border: 1px solid red;
            position: relative;
            animation-play-state: running; 
            animation: 10s scroll infinite;
        }
        .box1:hover {
            animation-play-state: paused;
        }
    </style>
</head>
<body>
<div class="box1">我在滚动,hover我就停下来了</div>

注意animation-play-state的用法,hover时停下来,所以hover时设置paused.

变形

CSS3中可以通过transform属性修改元素的变形、旋转、缩放、倾斜特性,在CSS3中transform主要包括以下几种:旋转rotate、扭曲skew、缩放scale和移动translate以及矩阵变形matrix

transform : none | <transform-function> [ <transform-function> ]*

transform中使用多个属性时却需要有空格隔开,可用于内联(inline)元素和块级(block)元素

旋转 rotate

可以通过rotate使元素旋转一定的度数

transform:rotate(30deg);

旋转是顺时针
旋转之后元素仍占据原来位置,实际上所有的transform都是这样,缩放、位移等都不会改变元素占据的位置

元素旋转的的基点默认是中心,可以通过transform-origin属性改变

transform:rotate(30deg); transform-origin: 0% 0%;

transform-origin的取值可以是:

transform-origin属性对下面介绍的transform都有作用

位移

可以通过translate使元素平移

transform:translate(x,y);

transform:translate(200px,150px);

也可以简单只移动一个坐标

transform:translateX(100px);
transform:translateY(100px);

translate可以写成百分比,在绝对居中写负margin的时候可以写成-50%,-50%,即 transform: translate(-50%,-50%)

缩放

可以通过scale使元素缩放一定的比例,和translate类似,也有三个方法

对于scale只设置一个参数,一相同的比例缩放两个方向

transform:scale(2, 0.5);
transform:scaleY(0.3);
transform:scaleY(2);
transform:scale(3);

扭曲

可以通过skew使元素扭曲一定的度数,和上面一样也有三中类似的用法

transform:skew(10deg, 20deg);
transform:skewX(10deg);
transform:skewY(10deg);
transform:skew(10deg);
1 2 3

矩阵

matrix(<number>, <number>, <number>, <number>, <number>, <number>)
以一个含六值的(a,b,c,d,e,f)变换矩阵的形式指定一个2D变换,相当于直接应用一个[a b c d e f]变换矩阵。

就是基于水平方向(X轴)和垂直方向(Y轴)重新定位元素,此属性值使用涉及到数学中的矩阵,可以参考css3-transform-matrix-矩阵

3D

CSS3带来了DOM的3D效果,元素需要设置需要设置perspective来激活3D效果,可以通过两种方式实现

perspective属性的值决定了3D效果的强烈程度,可以认为是观察者到页面的距离。值越大距离越远,视觉上的3D效果就会相应的减弱。perspective: 2000px; 会产生一个好像我们使用望远镜看远方物体的3D效果,perspective: 100px;会产生一个小昆虫看大象的效果。

看个例子

<style>
    .container {
        width: 200px;
        height: 200px;
        border: 1px solid #CCC;
        margin: 0 auto 40px;
    }
    .box {
        width: 100%;
        height: 100%;
    }
    #red1 .box {
      background-color: red;
      transform: perspective( 600px ) rotateY( 45deg );
    }
</style>
<section id="red1" class="container">
    <div class="box red"></div>
</section>
red
<style>
    #blue1{
        perspective: 600px;
    }
    #blue1 .box {
      background-color: blue;
      transform: rotateY( 45deg );
    }
</style>

<section id="blue1" class="container">
    <div class="box blue1"></div>
</section>
blue

这两种方式都会触发3D效果,但是有一点不同:第一种方式直接在一个元素上触发3D变形,但是当多个元素的时候变形效果和预期会有所不同,如果使用同样的方法作用于不同位置的元素的时候,每个元素会有自己的轴心,为了解决这个问题,需要在父元素使用perspective属性,这样每个子元素都共享相同的3D空间

3D变形方法

作为一个web者,可能很熟悉两个方向:X & Y,表示元素的水平方向和垂直方向,在perspective激活的3D空间中我们可以在X、Y、Z三个坐标轴上对元素进行变形处理。3D变形使用的变形方法和2D变形一样,如果熟悉2D变形方法很容易掌握3D变形.

坐标系

rotateX( angle )
rotateY( angle )
rotateZ( angle )
translateZ( tz )
scaleZ( sz )
translateX()方法使元素延X轴移动,translateZ()使元素延Z轴(在3D空间中方向从前到后)移动。正值使元素离观察者更近,负值使元素变远。

1 2
上一篇下一篇

猜你喜欢

热点阅读