10-CSS3新特性

2017-09-05  本文已影响52人  magic_pill

CSS3简介

CSS3的现状

  1. 浏览器支持程度差,需要添加<a href="#abc">私有前缀</a>;
  2. 移动端支持优于PC端;
  3. 不断改进中;
  4. 应用相对广泛,-webkit-border-radius(radius 半径)。

准备工作

环境准备

如何使用手册

基础知识

选择器

属性选择器:[]
伪类选择器
//第三个元素
div>ul>li:nth-child(3){
        color: deeppink;
}
div>ul>li:last-child(2){
        color: deeppink;
}
- n遵循`线性变化`,其取值0、1、2、3、4、... 但是当n<=0时,选取无效。
- 选中所有的奇数的li:`括号中的表达式形式必须是n在前`
li:nth-child(2n-1){
        color: red;
}
- 选中所有的7的倍数的li:
li:nth-child(7n){
        color: red;
}
- 选中前面五个:
li:nth-child(-1n+5){
        color: red;
}
li:nth-last-child(-1n+5){
        color: red;
}
li:nth-child(even){
        color:red
}
li:nth-child(odd){
        color:blue;
}
- n可是多种形式:nth-child(2n)、nth-child(2n+1)、nth-child(-1n+5)等;
- 案例:日历图。
<li><a href="#title1">CSS (层叠样式表)</a></li>
<h2 id="title1">CSS (层叠样式表)</h2>
h2:target{
    color:red;
}
伪元素选择器
.box::before{
    content:"今天";
}
.box::after{
    content:"真好";
}

颜色

.out{
        width: 200px;
        height: 200px;
        background: green;
        border: 1px solid darkgreen;
        margin: 40px auto;
        opacity: 0.3;
}

子盒子也出现透明

.out .inner{
        width: 100px;
        height: 100px;
        background-color: yellow;
}

文本 (shadow阴影)

text-shadow,可分别设置偏移量、模糊度、颜色(可设透明度)。
// 3px,水平偏移量。正值向右  负值向左
//5px,垂直偏移量,正值向下 负值向上
//5px,模糊度,模糊度不能为负值,值越大越模糊
//#ccc,设置对象阴影的颜色。可以有多个影子.
ul>li{
    margin: 20px;
    font-size: 24px;
}
ul>li:nth-child(1){
    text-shadow: 5px 5px 2px #ccc;
}
ul>li:nth-child(2){
     text-shadow: -5px  -5px 2px #ccc;
}
ul>li:nth-child(3){
    text-shadow: 5px 5px 2px #ccc, -5px  -5px 2px #ccc;
}
/*设置背景色.*/
body {
    background-color: gray;
    font: bold 6em "microsoft yahei";
}
div {
    margin: 30px;
    color: #808080;
    text-align: center;
}
/*设置水平向左1px 向上1 px   向右1px 向下1px */
.to{
    text-shadow: -1px -1px 1px #000,1px 1px 1px #fff;
}
.ao{
    text-shadow: -1px -1px 1px #000,1px 1px 1px #fff;
}

盒模型

<span id="abc">浏览器私有化前缀:</span>
.box{
    width:200px;
    height:200px;
    border:1px solid #000;
    /*background:linear-gradient(left,red,blue);*/
    /*以上属性,一般的浏览器都不支持,加上对应的前缀即可被相应的浏览器识别,如下*/
    background:-webkit-linear-gradient(left,red,blue);
    background:-moz-linear-gradient(left,red,blue);
    background:-ms-linear-gradient(left,red,blue);
    background:-o-linear-gradient(left,red,blue);
}

边框

边框圆角

  1. border-top-radius:每个角可以设置两个值,第一个值x值是水平方向上的值,第二个y值是垂直方向上的值;
  2. border-radius:可以有一个值、两个值、三个值、四个值,还可以用“/”分割横坐标和纵坐标的值;赋值顺序,从左上顺时针进行赋值,如果没有值就取对角的值;
  3. 边框圆角处理、正方形、扇形;
  4. 椭圆,圆角处理时,脑中要形成圆、圆心、横轴、纵轴的概念,正圆是椭圆的一种特殊情况。
  5. 以“/”进行分隔,可分别设置长、短半径,遵循顺时针规则,左上角为1,“/”前面的1~4个用来设置横轴半径(分别对应横轴1、2、3、4位置 ),“/”后面1~4个参数用来设置纵轴半径(分别对应纵轴1、2、3、4位置 )
border-radius:40px 50px 20px 40px / 10px 10px 10px 10px;

边框阴影

box-shadowtext-shadow用法差不多.

  1. 水平偏移量,正值向右,负值向左;
  2. 垂直偏移量,正值向下,负值向上;
.box{
        box-shadow: 5px 5px 5px 27px red, -5px -5px 5px -5px green;
}
  1. 模糊度是不能为负值;
  2. 阴影大小;
  3. 阴影颜色;
  4. inset可以设置内阴影;
.box{
    box-shadow:inset 5px 5px 5px 5px red,inset -5px -5px 5px -5px green;
}

7 :设置边框阴影不会改变盒子的大小,即不会影响其兄弟元素的布局。
可以设置多重边框阴影,实现更好的效果,增强立体感。

边框图片(了解)

  1. border-image:设置边框的背景图片;
border-image: url("images/border.png") 27/20px round
  1. border-image-source:url(""):设置边框图片的地址;
  2. border-image-slice:27,27,27,27:裁剪图片,如何去裁切图片,浏览器会自动去裁剪图片;
  3. border-image-width:20px;:指定边框的宽度;
  4. 边框平铺的样式:border-image-repeat: stretch;
  5. stretch,拉升;
  6. round:平铺,会自动调整缩放比例(如果谷歌版本很高可能会出现问题);
  7. repeat(重复):正常平铺,但是可能会显示不完整。
  1. “切割”完成后生成虚拟的9块图形,然后按对应位置设置背景,
  2. 其中四个角位置、形状保持不变,中心位置水平垂直两个方向平铺;
background-slice: 34 36 27 27

渐变

线性渐变 (gradient 变化,属于背景图片里)

background-image:linear-gradient(
    to right, 表示方向 (left,top,right,left ,也可以使用度数)
    Yellow,  渐变起始颜色
    Green   渐变终止颜色
)
background:linear-gradient(
      to right,
      red 0%, red 25% ,
      blue 25%,blue 50%,
      green 50%,green 75%,
      pink 75% ,pink 100%
);  //前一个是起始颜色,后一个是终止颜色,百分比为占总长度的百分比
.box6{
    width: 600px;
    height: 150px;
    background: linear-gradient(135deg,#000 0%, #000 10%, #fff 10%, #fff 20%,#000 20%, #000 30%, #fff 30%, #fff 40%,#000 40%, #000 50%, #fff 50%, #fff 60%,#000 60%, #000 70%, #fff 70%, #fff 80%,#000 80%, #000 90%, #fff 90%, #fff 100%);
    animation: gun 5s linear infinite;
    background-size: 100px 150px;
}
@keyframes gun {
    from{

    }
    to{
        background-position: 100px 0px;
    }
}
  1. 必要的元素:

径向渐变 (radial 径向)

background: radial-gradient(
    150px  at  center,
    yellow,
    green
);
background: radial-gradient(
        150px  at left center,
        yellow,
        green
);

以左上角为圆的中心点

background: radial-gradient(
        150px  at 0px  0px,
        yellow,
        green
);
div{
     width: 300px;
     height: 300px;
     margin:100px auto;
     background: radial-gradient(
         250px  at 0px 0px,
         yellow,
         green
     );
     border-radius: 150px;
}

背景

background-size设置背景图片的尺寸

background-origin(原点,起点)设置背景定位的原点

background-clip设置背景区域clip(裁切)

以逗号分隔可以设置多背景,可用于自适应局

案例:
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>相框</title>

    <style>
        .album{
            width: 623px;
            height: 417px;
            border: 1px solid #000;
            background:
                url("images/bg1.png") no-repeat,
                url("images/bg2.png") no-repeat right top,
                url("images/bg3.png") no-repeat right bottom,
                url("images/bg4.png") no-repeat bottom left,
                url("images/bg5.png") no-repeat center;
            font: 700 60px/400px "Microsoft Yahei";
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="album">永垂不朽</div>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>相框</title>

    <style>
        .phone{
            width: 639px;
            height: 800px;
            border: 1px solid #000;
            margin: 20px auto;
            background: url("images/head.jpg") no-repeat top,url("images/foot.jpg") no-repeat bottom,rgb(45,0,130);
        }
    </style>
</head>
<body>
        <div class="phone"></div>
</body>
</html>

过渡(transition)重点

案例:
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>气泡</title>

    <style>
        .paopao{
            width: 350px;
            height: 150px;
            border: 1px solid #000;
            margin: 20px auto;

            background: url("images/paopao.png") no-repeat top left,url("images/paopao.png") no-repeat right bottom;
            background-color: #000;

            transition: 3s linear;
        }

        .paopao:hover{
            background-position: bottom left,right top;
        }
    </style>
</head>
<body>
    <div class="paopao"></div>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>边框阴影</title>

    <style>
        body{
            background-color: #ddd;
        }
        .items{
            margin: 30px auto;
            width: 1250px;
            height: 300px;
        }

        .item{
            float: left;
            width: 230px;
            height: 300px;
            margin-right: 20px;
            text-align: center;
            background-color: #fff;
            position: relative;
            overflow: hidden;

            transition: 0.5s linear;
        }
        .pic{
            margin-top: 30px;
        }
        .desc{
            height: 60px;
            width: 100%;
            background-color: #f90;
            bottom: -60px;
            position: absolute;
            transition: 0.5s linear;
        }

        .item:hover{
            box-shadow: 0 0 18px #999;
            top: -5px;
        }
        .item:hover .desc{
            bottom: 0;
        }
    </style>
</head>
<body>
    <div class="items">
        <div class="item">
            ![](images/1.jpg)
        </div>
        <div class="item">
            ![](images/2.jpg)
            <div class="desc"></div>
        </div>
        <div class="item">
            ![](images/3.jpg)
            <div class="desc"></div>
        </div>
        <div class="item">
            ![](images/4.jpg)
            <div class="desc"></div>
        </div>
        <div class="item">
            ![](images/5.jpg)
            <div class="desc"></div>
        </div>
    </div>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>手风琴</title>

    <style>
        .accordion{
            margin: 60px auto;
            width: 400px;

        }
        .sec{
            border-bottom: 1px solid #00f;
            background-color: #993;
            transition: 0.5s linear;
        }
        .title{
            height: 30px;
            line-height: 30px;
            margin-left: 20px;
        }
        .con{
            height: 0;
            background-color: transparent;
            transition: 0.5s linear;
        }
        .sec:last-child{
            border-bottom: none;
        }

        .sec:hover{
            background-color: #9f3;
        }
        .sec:hover .con{
            height: 200px;
            background-color: pink;
        }

    </style>
</head>
<body>
    <div class="accordion">
        <div class="sec">
            <div class="title">新闻标题</div>
            <div class="con"></div>
        </div>
        <div class="sec">
            <div class="title">新闻标题</div>
            <div class="con"></div>
        </div>
        <div class="sec">
            <div class="title">新闻标题</div>
            <div class="con"></div>
        </div>
        <div class="sec">
            <div class="title">新闻标题</div>
            <div class="con"></div>
        </div>
    </div>
</body>
</html>

2D转换重点

案例
.box{
    //距父盒子左侧距离为父盒子宽度一半
    margin-left:50%;
    //往左侧移动自身宽度的一般
    transform:translate(-50%);
}
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>小火箭</title>

    <style>
        html,body{
            width: 100%;
            height: 100%;
        }
        body{
            background-color: rgb(229,175,97);
        }

        img{
            position: absolute;
            left: 100px;
            bottom: 0;
            width: 80px;
            border: 1px solid #000;
            transform: translate(0px,150px) rotate(45deg);
            transition: all 1s;
        }
        body:hover img{
            transform: translate(600px,-300px) rotate(90deg);
        }
    </style>
</head>
<body>
    ![](images/rocket.png)
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>盾牌</title>

    <style>
        body{
            background-color: #000;
        }
        .shield{
            margin:60px auto;
            width: 420px;
        }

        img{
            transition: 0.3s;
        }
        img:nth-child(1){
            transform: translate(-184px,-52px) rotate(45deg);
        }
        img:nth-child(2){
            transform: translate(0px,-50px) rotate(0deg);
        }
        img:nth-child(3){
            transform: translate(52px,30px) rotate(45deg);
        }
        img:nth-child(4){
            transform: translate(-52px,30px) rotate(-45deg);
        }
        img:nth-child(6){
            transform: translate(152px,30px) rotate(45deg);
        }
        img:nth-child(7){
            transform: translate(-72px,30px) rotate(45deg);
        }
        img:nth-child(8){
            transform: translate(0px,50px) rotate(0deg);
        }
        img:nth-child(9){
            transform: translate(40px,50px) rotate(-30deg);
        }

        .shield:hover img{
            transform: none;
        }
    </style>
</head>
<body>
    <div class="shield">
        ![](images/shield_1_01.png)
        ![](images/shield_1_02.png)
        ![](images/shield_1_03.png)
        ![](images/shield_1_04.png)
        ![](images/shield_1_05.png)
        ![](images/shield_1_06.png)
        ![](images/shield_1_07.png)
        ![](images/shield_1_08.png)
        ![](images/shield_1_09.png)
    </div>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对话框</title>

    <style>
        div{
            /*border: 1px solid #000;*/
            background-color: pink;
        }

        .bigBox{
            width: 200px;
            height: 60px;
            margin-top: 40px;
            position: relative;
        }
        .smallBox{
            width: 40px;
            height: 40px;
            position: absolute;
        }

        .sBox1{
            left: 50%;
            transform: translate(-50%);
            transform: rotate(45deg);
            transform-origin: left top;
            top: -10px;
        }
        .sBox2{
            right: 0;
            top: 10px;

            transform: translateY(-50%);
            transform: rotate(45deg);
        }
        .sBox3{
            left: 50%;
            transform: translate(-50%);
            transform: rotate(45deg);
            transform-origin: left top;
            bottom: 10px;
        }
        .sBox4{
            top: 10px;
            transform: rotate(45deg);
        }
    </style>
</head>
<body>

    <div class="box1 bigBox">
        <div class="sBox1 smallBox"></div>
    </div>
    <div class="box2 bigBox">
        <div class="sBox2 smallBox"></div>
    </div>
    <div class="box3 bigBox">
        <div class="sBox3 smallBox"></div>
    </div>
    <div class="box4 bigBox">
        <div class="sBox4 smallBox"></div>
    </div>
</body>
</html>

3D转换

左手坐标系

左手法则

透视(perspective)

  1. 作为一个属性,设置给父元素,作用于所有3D转换的子元素;
  2. 作为transform属性的一个值,做用于元素自身(使用较少)。
<div class="b1" transform="perspective:30px">
案例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>3D</title>

    <style>
        body{
            background: #ccc;
        }
        div:nth-child(1){
            width: 300px;
            height: 300px;
            margin: 40px auto;

            position: relative;
        }

        div:nth-child(1)::before,div:nth-child(1)::after{
            content: "";
            width: 300px;
            height: 300px;
            position: absolute;
            left: 0;
            top: 0;
            background: url("images-3D/musict.jpg") no-repeat;
            border-radius: 50%;
            transition: all 3s;
            transform-origin: bottom;
        }

        div:nth-child(1)::before{
            background: url("images-3D/musicb.jpg");
        }

        div:nth-child(1):hover::after{
            transform: rotateX(180deg);
        }
    </style>
</head>
<body>
    <div></div>
    <audio src="images-3D/style.mp3" loop></audio>

    <script>
        var open = document.querySelector("div:nth-child(1)");
        var music = document.querySelector("audio");
        open.onmousemove = function () {
            music.play();
        };
        open.onmouseleave = function () {
            music.pause();
        }
    </script>
</body>
</html>

3D呈现(transform-style)

案例:

动画

@keyframes 动画名{
        from{初始状态}
        to{结束状态}
}
@keyframes move{
        0%{}
        25%{}
        50%{}
        75%{}
        100%{}
}
animation: 动画名称 持续时间 (执行次数:3,infinite);
  1. animation-name:设置动画序列名称;
案例

伸缩布局

各属性详解
  1. flex-direction调整主轴方向(默认为水平方向)该属性通过定义flex容器的主轴方向来决定felx子项在flex容器中的位置:
案例

多列布局

/* 分几列*/
-webkit-column-count:3;
/* 分割线*/
-webkit-column-rule:1px dashed red;
/*设置列间距*/
-webkit-column-gap:60px;
/* 列宽度*/
-webkit-column-width: 400px;
-webkit-column-span:all;
text-align:center;
案例

Web字体

字体格式(认识字体)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>web字体使用</title>

    <style>
        /*声明字体*/
        @font-face {font-family: 'webfont';
            src: url('font/webfont.eot'); /* IE9*/
            src: url('font/webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
            url('font/webfont.woff') format('woff'), /* chrome、firefox */
            url('font/webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
            url('font/webfont.svg#webfont') format('svg'); /* iOS 4.1- */
        }

        /*定义对应的字体类*/
        .webfont{
            font-family:"webfont" !important;
            font-size:16px;font-style:normal;
            -webkit-font-smoothing: antialiased;
            -webkit-text-stroke-width: 0.2px;
            -moz-osx-font-smoothing: grayscale;}

    </style>
</head>
<body>

    <p class="webfont">寻寻觅觅,在无声无息中消失。。。</p>
    <p>寻寻觅觅,在无声无息中消失。。。</p>
</body>
</html>

字体图标

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>web字体使用</title>

    <style>
        /*声明字体*/
        @font-face {font-family: 'iconfont';
            src: url('iconfont/iconfont.eot'); /* IE9*/
            src: url('iconfont/iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
            url('iconfont/iconfont.woff') format('woff'), /* chrome、firefox */
            url('iconfont/iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
            url('iconfont/iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
        }

        /*定义对应的字体类*/
        .iconfont{
            font-family:"iconfont" !important;
            font-size:16px;font-style:normal;
            -webkit-font-smoothing: antialiased;
            -webkit-text-stroke-width: 0.2px;
            -moz-osx-font-smoothing: grayscale;
        }

        span::before{
            content: "\e628";
            font-family: iconfont;
            color: red;
        }
    </style>
</head>
<body>
    <span>扫码取件</span>
    <p class="iconfont">&#xe628;</p>
</body>
</html>

兼容性

高级应用

360 案例:

document.onmousewheel=function(){}
sectionsColor:['#0da5d6', '#2AB561', '#DE8910', '#16BA9D', '#0DA5D6']
$(function(){
    $('#dowebok').fullpage({
        sectionsColor:['#0da5d6', '#2AB561', '#DE8910', '#16BA9D', '#0DA5D6'],
        loopTop:true,
        afterLoad:function( anchorLink ,index){
            console.log(index);

            $('.section').removeClass('current');
            setTimeout(function(){
                $('.section').eq(index-1).addClass('current');
            },100);
        }
    });
});
上一篇下一篇

猜你喜欢

热点阅读