zoukankan      html  css  js  c++  java
  • CSS3 学习小结

    写样式时有时遇到浏览器兼容问题:
    -webkit-transition:chrome和safari
    -moz-transition:firefox
    -ms-transition:IE
    -o-transition:Opera
    但是在JS 中则不允许带前边的横杠,并且首字母大写,如WebkitTransition,MozTransition,MsTransition,OTransition
    属性选择器:
    设置样式的格式:
    表签名[属性名=value]{}
    表签名[属性名~=value]{}//属性值是一个词组用空格分隔,~=代表只要有一个value满足即可
    标签名[属性名^=value]{}//属性值必须是是以value开头的
    标签名[属性名attr$=value]//属性值必须是以value结束的
    标签名[属性名attr*=value]//属性值必须是包含value的,可以是字母等
    表签名[属性名|=value]//代表属性值是以value开始或是只有value(就是value)的
    结构性伪类:
    注意nth-child(n)和nth-of-type(n),前者是找子节点,后者是找该类型的标签
    E:nth-child(n):这句意思是从前往后找E标签父级中的第n个子元素,并且这个元素的类型还必须是E标签,这是在CSS3中,当n=1代表第一个子节点,而在JS中,则是n=0代表第一个子节点
    若是想找同一父级如body下的不同子元素,则借助body *先找到所有子元素即可。
    例:body里有p标签和h1标签,找同一父级元素下的h1标签:
    <body>
    <p></p>
    </h1></h1>
    </body>
    body *:nth-child(2){background:red;}//
    E:nth-child(odd):奇数行,或者是E:nth-child(2n-1),有时也可以利用E:nth-child(3n)可以找到第3行/个,有时也用到E:nth-child(3n+1);
    E:nth-child(even):偶数行,或者是E:nth-child(2n)
    E:nth-last-child(n):从后往前数找第n个子元素/子节点,E:nth-last-child(2n),E:nth-last-child(2n-1)等
    E:nth-of-type(n):从前往后找第n个E标签,body *:nth-type-of(n):找body下面所有标签类型的第n个的标签
    E:nth-last-of-type(n):从后往前找。。。。。。同样的2n,2n-1也适用
    E:first-child:找E元素中的第1个子元素/子节点,等同于E:nth-child(1)
    E:last-child:找E元素中的最后一个子元素/子节点,等同于E:nth-last-child(1)
    E:first-of-type:表示E父元素中的第一个子节点且节点类型是E的,等同于nth-of-type(1)
    E:last-of-type表示E父元素中的最后一个子节点且节点类型是E的,等同于nth-last-of-type(1)
    E:only-child表示E元素中只有一个子节点,注意:子节点不包含文本节点
    E:only-of-type表示E的父元素中只有一个子节点,且这个唯一的子节点的类型必须是E,注意:子节点不包含文本节点
    E:empty表示E元素中没有子节点。注意:子节点包含文本节点
    1,新增颜色样式:r ,g,b,a//红绿蓝,每个值在0-255间,0代表黑色,1代表白色,a代表透明度0-1间
    2,文本阴影:text-shadow:x y blur color;//四个参数,前两个(可以为正为负,正代表从上到下,负代表从下到上)为X轴方向,Y轴方向阴影偏移,然后是模糊距离,最后是阴影颜色,
    x ------横向偏移
    y ------纵向偏移
    blur ---模糊距离
    color---阴影颜色
    可以加多层阴影中间用逗号分隔:text-shadow:(5px -4px 6px red,-8px 4px 7px green,5px 6px 7px yellow);
    但文本阴影若是加非常多层,会很卡
    例:
    浮雕文字:字体颜色设置为白色,阴影设置为黑色即可出现这种浮雕的效果
    h1{font:100px/200px "微软雅黑"; text-align:center;color:#fff;text-shadow:2px 2px 4px #000;}
    例:文字模糊动画:
    h1{font:100px/200px "微软雅黑";text-align:center;color:#000;
    text-shadow:0 0 0 rgba(0,0,0,1); transition:1s;}
    h1:hover{color:rgba(0,0,0,0);text-shadow:0 0 100px rgba(0,0,0,0.5);}
    文字描边:是webkit内核浏览器特哟的属性,所以要加前缀webkit
    -webkit-text-stroke:宽度 颜色
    文字方向:direction,样式值由rtl,ltr,但要配合unicode-bidi样式使用,否则文字不会从右向左
    例:
    p{300px;border:1px solid #000;font:14px/30px "宋体";direction:rtl;unicode-bidi:bidi-override;}
    文本不换行:white-space:nowrap;
    Text-overflow:定义省略文本的处理方式:
    clip:无省略号
    ellipsis:省略号,注意配合overflow-hidden和white-space:nowrap一起使用,
    p{300px;border:1px solid #000; font:14px/30px "宋体"; white-space:nowrap;overflow-hidden;text-overflow:ellipsis;}
    自定义文字字体:
    1)先在画图工具中绘制想要的字体,然后保存成ttf格式文件,再到字体转换网址里转换一下再下载下来,再引用字体的css文件
    2)转换字体生成兼容代码:http://www.fontsquirrel.com/fontface/generator
    例,字体所在文件叫1,字体的css文件:
    @font-face{
    font-family: 'miaov';
    src: url('1-webfont.eot');
    src: url('1-webfont.eot?#iefix') format('embedded-opentype'),
    url('1-webfont.woff') format('woff'),
    url('1-webfont.ttf') format('truetype'),
    url('1-webfont.svg#untitledregular') format('svg');
    font-weight: normal;
    font-style : normal;
    }
    3,弹性盒模型:
    新增了两个属性:display : box/inline-box
    使用弹性盒模型的时候,父元素必须要加display:box或display:inline-box

    例:
    <style>
    .box{height : 200px;border : 10px solid #000; padding : 10px; display : -webkit-box;}//注意加前缀
    .box div{width : 100px; height : 100px; background: red; border: 1px solid #fff;}
    </style>
    <div class="box">
    <div>1</div>
    <div>1</div>
    <div>1</div>
    <div>1</div>
    </div>
    //若是不加display : box 的话,盒子们就会纵向排列,加了display:box 属性后就会横向排列
    box-orient 定义盒模型的布局方向:
    horizontal 水平显示
    vertical 垂直方向显示
    box-direction:定义元素排列顺序,normal和reverse,正序和倒序
    box-ordinal-group:设置元素的具体位置
    例:
    .box div:nth-of-type(1){box-ordinal-group:2;}//有时需要注意加前缀-webkit
    .box div:nth-of-type(2){box-ordinal-group:4;}
    .box div:nth-of-type(3){box-ordinal-group:1;}
    .box div:nth-of-type(4){box-ordinal-group:5;}
    .box div:nth-of-type(5){box-ordinal-group:3;}
    2)box-flex:定义盒子的弹性空间:
    子元素的尺寸=盒子的尺寸*子元素的box-flex的属性值/所有子元素box-flex的属性值的和
    .box div:nth-of-type(1){box-flex:1;}//有时要加前缀webkit
    .box div:nth-of-type(2){box-flex:2;}
    .box div:nth-of-type(3){box-flex:3;}
    3)box-pack对盒子富裕的空间进行管理(在水平方向上对元素位置进行管理)
    start:所有子元素在盒子左侧显示,富裕空间在右侧
    end:所有子元素在盒子右侧显示,富裕控件在左侧
    center:所有子元素居中(水平居中,横向)
    justify:赋予空间在子元素之间平均分布
    4)box-align:在垂直方向上对元素的位置进行管理
    start:所有子元素居顶
    end:所有子元素居底
    center:所有子元素居中(垂直居中,纵向)
    4,box-shadow:盒子阴影,也是四个参数,X轴偏移,Y轴偏移,模糊距离,颜色,但是增加了几个可选的样式
    box-shadow:[inset] x y blur [spread] color
    参数:
    ----inset :投影方式
    1)inset:内投影
    2)不给:外投影
    ---spread:扩展阴影半径(先扩展原有形状(像素为单位),再开始画阴影)
    例:
    .box{box-shadow:inset 10px 10px 30px red,20px 20px 20px blue;}//可以叠加
    box-reflect::倒影
    1)direction 方向 包括:above|below|left|right;//分别为上下左右
    2)距离
    3)渐变(可选)
    resize:自由缩放
    both:水平垂直都可以缩放,但是要加上overflow:auto;
    horizontal:只有水平可以缩放
    vertical:只有垂直可以缩放
    注意:一定要配合overflow:auto一起使用
    其他盒模型新增属性
    box-sizing:盒模型解析模式:
    content-box:标准盒模型
    width/height=border+padding+content
    border-box :怪异盒模型
    width/height=content,//去掉border和padding
    分栏布局:
    column-width:栏目宽度
    column-count:栏目列数
    column-gap:栏目距离
    column-rule:栏目间隔线
    分栏有两种方法:
    1)指定分栏的宽度即可,浏览器便自行分栏了
    2)指定分栏的列数即可,
    响应式布局:
    1)横屏时:
    <link rel="stylesheet" media="all and (orientation:portrait)" href="portrait.css">//portrait代表竖屏,portrait.css是竖屏时的样式
    2)竖屏时:
    <link rel="stylesheet" media="all and (orientation.landscape)"href="landscape.css">//landscape代表横屏,landscape.css代表横屏时的样式
    或者是直接在style样式里控制响应式布局
    @media screen and (min-400px) and (max-500px) { //此处写样式} //括号外边是限制条件
    3)有时也需要 在style里引入外部文件:
    @import url("外部文件位置") screen and (min-400px) and (max-800px)//宽度这样的限制条件及外部文件位置需要自己设置,
    例:<link rel=“stylesheet”type="text/css" href="styleA.css" media="screen and (min-600px) and (max-800px)">//代表宽度在600-800之间时的样式
    <link rel=“stylesheet”type="text/css" href="styleB.css" media="screen and (min-800px) and (max-800px)">//代表宽度在800以上之间时的样式
    <link rel=“stylesheet”type="text/css" href="styleC.css" media="screen and (max-600px)">//代表宽度在600以下之间时的样式
    1,圆角:
    一个值的情况:代表四个角,都一样
    两个值的情况:对角,前边的代表左上角和右下角,后边的代表右上角和左下角。
    border-radius:20px 40px;
    三个值的情况:左上角,右上角和左下角,右下角
    border-radius:20px 40px 60px;
    四个值的情况:顺时针,
    椭圆的情况:
    1)border-radius:100px/150px;x轴半径/y轴半径,斜线前边代表(水平)x轴半径,后边代表(垂直)y轴半径
    不给斜线,则水平垂直一样
    参数:各种长度单位都可以:px,%;%有时很方便
    2)border-radius:20px 40px 60px 80px/10px 20px 30px 40px;斜线前边代表4个角的x轴半径,后边代表4个角的y轴半径
    3)border-radius:50%//是一个椭圆
    box-sizing:border-box;//???????????????
    2,边框
    边框图片border-image
    border-image-sourceg :引入图片
    border-image-slice:切割图片 如:27 27 ,并且不加单位,切割后悔根据边框大小自动缩放
    border-image-width:边框宽度
    border-image-repeat:图片的排列方式,round平铺,repeat重复,stretch拉伸,round和repeat的效果一样
    Chrome浏览器会将中间空的地方填充,只要在前面加上前缀-webkit即可:-webkit-border-image:url(border.png) 27 27 round round;
    边框颜色:border-colors,注意colors有个s,
    border-left-colors:red blue yellow;//注意colors有个s,此处样式是左边框由外到内三种颜色,这种多边框颜色值在火狐下实现了
    线性渐变格式:
    linear-gradient:起点,起始样式 ,结束样式;
    只能用在背景上,
    IE上兼容渐变的方法:
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='red',endColorstr='blue',GradientType='0');//0是从上到下,1是从左到右
    参数:
    --起点:从什么方向开始渐变 默认:top
    left, top ,left top
    --角度:从什么角度开始渐变
    xxx deg的格式
    --点:渐变点的颜色和位置
    black 50%,位置可选
    例:-webkit-linear-gradient(60deg,red 0,blue 50%,green 100%);//开始是红到蓝色,到一半的时候是就蓝色了,到最后变成绿色
    渐变实现平铺:repeating-linear-gradient
    -webkit-repeating-linear-gradient(60deg,red 0,blue 30px);
    加点的位置:
    ---top,red 40%,green 60%(也可以用px)
    ---top,red 50%,green 50%
    同一个位置两个点-----直接跳变,没有渐变了
    配合rgba
    ---top,rgba(255,255,255,1),rgba(255,255,255,0)//0代表透明(光斑),1代表不透明(原样)
    加入背景图片
    ---background:-webkit-linear-gradient(top,rgba(255,255,255,1)30%,rgba(255,255,255,0)),url(a.gif)
    多背景效果:
    .box{background:url(b.png) no-repeat,url(a.png) repeat-y right 0;}//写在前边的是在上面的背景,写在后面的就是下面的背景, right 0是紧靠右侧
    实现光斑,背景移动:
    .box:hover{background-position:300px 0,-100px -100px;}//逗号前边的是上边的图片变化方向,逗号后边的是下边的图片变化方向,x轴方向,y轴方向
    h1{display: inline-block;color: rgba(0,0,0,0.5);background:-webkit-linear-gradient(-30deg,rgba(255,255,255,0) 100px,rgba(255,255,255,1) 120px,rgba(255,255,255,1) 140px,rgba(255,255,255,0) 160px) no-repeat -200px 0;-webkit-bakcground-clip:text;/*只在文字上显示光斑*/
    transition:8s;} //或者是不在此处加时间和hover动作,而是在JS中使用定时器
    body:hover h1{background-position: 500px 0;}
    径向渐变:,
    radial-gradient([起点]?[形状||大小]?<点>,<点>);
    起点:可以是关键字(left,top,right,bottom)具体数值或百分比
    形状:ellipsis(椭圆),circle
    大小:具体数值或百分比,也可以是关键字(最近端,最近角,最远端,最远角,包含或覆盖(closest-side,closest-corner,farthest-side,farthest-corner,contain or cover));
    -注意firefox目前只支持关键字
    背景:
    多背景:
    ---逗号分开,:
    ----background:url(a.jpg)0 0,url(b.jpg) 0 100%;
    背景尺寸:
    background-size:x y
    --background-size:100% 100%//正好填充满边框大小
    --Cover 放大(覆盖)
    --Contain 缩小(包含)
    若是有两张图的情况下:
    background-size:contain,100px 100px;//前边是第一张图大小设置,后边是第二张图大小设置
    background-origin:border|padding|content
    border-box:从border区域开始显示背景
    padding-box:从padding区域开始显示背景
    content-box:从content区域开始显示背景
    background-clip:
    border:从border区域向外裁剪背景
    padding:从padding区域向外裁剪背景
    content:从content区域向外裁剪背景
    no-clip:从border区域向外裁剪背景
    webkit内核新增属性:text
    -webkit-background-clip:text;//只在文字形状上面显示背景
    遮罩:只在webkit内核下实现了
    Mask-image:图片来源
    Mask-position:位置
    Mask-repeat:平铺方式,如no-repeat
    -webkit-mask:url(mask.png) no-repeat right 0;//mask.png为表示遮罩尺寸的图片(可以是自己在PS上画的),位置在最右边
    2D转换:
    rotate:旋转,单位是角度,-webkit-transform:rotate();
    skew:倾斜,单位也是角度
    例:倾斜的导航链接菜单,但是文字不能倾斜
    ul{margin : 0; padding : 0;list-style : none;}
    li{float : left; width : 100px; text-align : center; height : 30px; border : 1px solid #fff; background : red; font : 12px/30px "宋体"; -webkit-transform : skewX(30deg);}//此时背景连带文字都倾斜了
    a{text-decoration : none ; -webkit-transform : skewX(-30deg); display : block;}//将链接再倾斜回来30度即可保证文字不倾斜了
    scale:缩放,两个参数下,X,Y,scale(num),将原始图形X方向和Y方向同时放大或缩小num倍,num小于1即为缩小,大于1即为扩大,scaleX(),scaleY()为将X方向和Y方向分别放大和缩小
    -webkit-transform:scale();scaleX();scaleY();
    translate()位移函数
    translateX():-webkit-transform:translateX();
    translateY():-webkit-transform:translateY();
    transform:translate();
    变换基点:
    -webkit-transform-origin:关键字可以是left ,right,right top(右上角) ,right bottom(右下角),也可以是数值如:200px 200px
    例:可以绕右下角边旋转,边缩放,
    .box:hover{-webkit-transform:rotate(360deg) scale(0.2);}
    transform:执行顺序问题-----后写的先执行
    例如:
    .box1{-webkit-transform : translateX(100px) scale(0.5);}//先缩小一半再向前移动100px
    .box2{-webkit-transform : scale(0.5) translateX(100px);}//先移动100px 再缩小一半,100px也会被缩小一半,实际只移动50px,会比box1移动距离小
    过度事件:transition
    .box{width : 100px; height : 100px;background : red; transition : 1s;}
    .box : hover{background : blue; width : 200px; height : 200px;}
    transition : 必要的一个参数就是过度时间,此外在后面可以添加可选参数(需要过度的属性,如宽度)
    transition : 1s width;
    还可以加可选参数:(transition-timing-function)运动形式:逐渐变慢(ease)默认值,匀速(linear),加速(ease-in),减速(ease-out),先加后减(ease-in-out)
    transition : 1s width ease;
    另外的可选参数:贝塞尔曲线cubic-bezier(x1,y1,x2,y2)
    http://matthewlein.com/ceaser/
    注意:多种样式都需要过度,但过度时间不一样,用逗号分隔
    .box{width : 100px; height : 100px;background : red; transition : 1s width , 2s height , 3s background;}
    .box : hover{background : blue; width : 300px; height : 200px;}
    另外的可选参数就是延迟:该参数放在过渡时间后面
    .box{width : 100px; height : 100px;background : red; transition : 1s 2s width , 2s 3s height , }
    过度完成事件:
    1)webkit内核:
    obj.addEventListener('webkitTransitionEnd' , function(){} , false);
    2)firefox:
    obj.addEventListener('transitionEnd' , function(){} , false);
    例:
    var oBox=document.getElementById("box");
    oBox.onclick=function(){
    this.style.width=this.offsetWidth+100+"px";//将当前宽度增加100px;
    this.style.height=this.offsetHeight+100+"px";
    }
    addEnd(oBox , function(){
    this.style.width=this.offsetWidth+100+"px";//会出现宽度一直增加不会停的问题
    });
    function addEnd(obj , fn){
    obj.addEventListener('WebkitTransitionEnd' , fn , faslse);
    obj.addEventListener('transitionEnd' , fn , false);
    }
    注意:上例中直接添加addEnd()方法增加宽度时会出现宽度一直增加停不下来的问题,因此要增加removeEnd()方法
    function removeEnd(obj,fn){
    obj.removeEventListener('WebkitTransitionEnd' , fn ,false);
    obj.removeEventLIstener('transitionEnd' , fn ,false);
    }
    并且将宽度增加的方法重新命名:
    function end(){
    this.style.width=this.offsetWidth+100+"px";
    removeEnd(this , end); //并且要增加这一句,先改变样式,再取消事件
    }
    然后调用addEnd(obj , end);
    注意:有时script脚本需要写在body里面,因为若是直接写在head里面,浏览器可能找不到脚本里的相关元素而报错(某些元素为空)
    6,有时候,元素执行完动作后立即变回原样,是因为添加了end事件:
    addEnd(obj , fn);
    removeEnd(obj , fn);
    3D转换:
    首先要加这句:
    -webkit-transform-style:preserve-3d;//代表是3d空间
    还要加景深:-webkit-perspective:100px; //翻转时会呈现近大远小,代表站在100个元素之外看它
    perspective-origin:景深基点(视线是从哪个方向看的),如left bottom
    translate-Z:沿着Z轴平移,-webkit-transform:translateZ(-100px);//向前平移
    旋转幻灯片:

    动画:
    animation:与以往不同,写法加上keyframes(关键帧)并且调用时要加浏览器的前缀-webkit,-moz,-ms,-o,参数还有动画时长,最后再加一个标准的不带前缀的调用;可选参数还有运动形式(linear ,ease,ease-in,ease-out),运动形式名写在关键帧名后边,可选参数延迟时间写在正常动画时长后边;可选参数重复次数写在运动形式后边(infinite为无限次),
    让动画暂停:-webkit-animation-play-state : paused; //默认是running播放
    @-webkit-keyframes move{ //move为自定义的关键帧 的名字
    0% {
    width : 1000px; //不写0%也可以,就是直接从style中的已规定样式开始
    }
    100%{
    500px;
    }
    }
    .box{-moz-animation : 2s move; animation : 2s move; }
    播放前重置:animation-direction:normal和alternate
    normal:动画第二次直接跳到0%的状态开始执行
    alternate:动画直接从上一次停止的位置开始执行
    想让动画执行到某种程度后结束的位置可以使用添加class的方法:
    .box{100px; height:100px; background:red;}
    .move{-webkit-animation:2s move; 500px;}
    <script>
    document.getElementById("oBox").onclick=function()
    { this.className="box move";
    }
    </script>
    transition有事件:transitionEnd;
    animation也有结束结束事件animationEnd
    function addEnd(obj , fn){
    obj.addEventListener('webkitAnimationEnd' , function(){} , false);
    obj.addEventListener('animationEnd' , function(){} , false);
    }
    幻灯片实例中:层级的使用???Z-index
    z-index:代表元素的堆叠顺序,属性值为number或是inherit(和父元素相同)或者是auto(默认),

    使用javascript的语法:obj.style.zIndex="1";
    number:可为正,可为负,正为离用户越近,负为离用户越远
    text-indent:缩进元素的首行

  • 相关阅读:
    adodb.stream文件操作类详解
    Html中Label标记的作用和使用介绍
    正则表达式的威力轻松消除HTML代码
    只需一行代码就能让IE 6崩溃
    码农干货系列【17】Wind.js与Promise.js
    码农干货系列【3】割绳子(cut the rope)制作点滴:旋转(rotation)
    HTML5 Canvas开发者和读者的福音
    码农干货系列【8】世界上最简单的3D渲染(no webgl)
    码农干货系列【18】getting started with Promise.js(总)
    ProgressForm
  • 原文地址:https://www.cnblogs.com/RitaLee/p/6118187.html
Copyright © 2011-2022 走看看