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

css3渐变生成工具

文本

text-overflow

  • clip 隐藏超出文本
  • ellipsis 超出部分使用省略号

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

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

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

文本换行

word-wrap

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

  • normal 只在允许的断字点换行
  • break-word 在长单词或url地址内部进行换行

word-break

规定自动换行的处理方法

  • normal 使用浏览器默认的换行规则
  • break-all 允许在单词内换行
  • keep-all 只能在半角空格或连字符处换行

white-space

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

  • normal 连续空白会被忽略
  • pre 空白会被浏览器保留,其行为类似html中的标签
  • nowrap 文本不会换行,文本会在同一行上继续,直到遇到标签为止
  • pre-wrap 保留空白符序列,但是正常的进行换行
  • pre-line 合并空白符序列,但是保留换行符
  • inherit 规定从父元素继承属性值

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

改变盒模型

  • content-box 标准盒模型
  • border-box

background

background-size

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

  • length: 设置背景图像的高度和宽度,第一个值为宽度,第二个为高度,如果只设置一个,第二个值会被设为auto
  • percentage: 以父元素的百分比来设置背景图像的宽度和高度,第一个值为宽度,第二个为高度,如果只设置一个,第二个值会被设为auto
  • cover: 把背景图像扩展到足够大,以使背景图像完全覆盖背景区域,背景图像的某些部分也许无法显示在背景定位区域中。
  • contain: 把图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域。
        .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属性相对于什么位置来定位

  • padding-box 相对于内边距来定位
  • border-box 相对于边框盒
  • content-box 相对于内容框来定位

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

background-clip

规定背景的绘制区域

  • padding-box 背景被裁剪到内边距
  • border-box 背景被裁剪到边框盒
  • content-box 背景被裁剪到内容框

多背景

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种方法:

  • angle:通过角度来确定渐变的方向,0度表示渐变方向从下往上,90度表示渐变方向从左到右,如果取值为下值,其角度按顺时针方向旋转。
  • 关键词: 通过关键词来确定渐变的方向。比如 to top, to right,to bottom, to left.
    这些关键词对应的角度值,除了使用to top, top left之外,还可以使用top left左上角到右下角,top right左上角到右下角等。

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

水平和垂直渐变举例:

            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还有:

  • linear: 匀速;
  • ease-in: 加速;
  • ease-out:减速;
  • cubic-bezier函数: 自定义速度演示,例如:transition: 1s height cubic-bezier(.83,.97.05,1.44);

目前,包括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;
        }

有如下属性值:

  • none 默认 回到动画没开始的状态
  • forwards: 让动画停留在结束状态
  • backwards: 让动画回到第一帧
  • both: 根据animation-direction轮流应用forwards和backwards

animation-direction

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

另外还有取值为:

  • alternate
  • reverse
  • alternate-reverse
    等值,最常用的就是normal和reverse,其他属性浏览器兼容不佳,慎用。

语法

同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的取值可以是:

  • top, bottom, left, right, center
  • 百分数

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(x,y):使元素水平方向和垂直方向同时缩放
  • scaleX(x):元素仅水平方向缩放
  • scaleY(y):元素仅垂直方向缩放

对于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效果,可以通过两种方式实现

  • 在transform属性中使用perspective方法
    transform: perspective( 600px );

  • 直接使用perspective属性
    perspective: 600px;

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,301评论 0 11
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,727评论 0 2
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,614评论 0 7
  • 一、HTML5 1.1 认识HTML5 HTML5并不仅仅只是作为HTML标记语言的一个最新版本,更重要的是它制定...
    福尔摩鸡阅读 15,740评论 14 51
  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 1,854评论 0 4