CSS CORE2

作者: fastwe | 来源:发表于2018-11-26 22:03 被阅读0次

    ____________________________________________________________________________________

    动画:使得元素从一种样式逐渐变化为另一种样式(多个样式之间的平缓变化的过程)

    过渡:属性的一个值到另外一个值的变换,简单的动画

    动画可以通过 "关键帧" 控制动画的每一步,可以使元素从 "一种样式" 逐渐变化为另一种 "样式"

    注意:动画操作有浏览器兼容性

             -moz-    -webkit-    -o-    -ms-

             元素必须是行内块元素或块级元素

    使用动画步骤:① 声明动画:指定动画名称以及创建动画中的每个状态(关键帧)

                          ② 为元素调用动画:指定调用的动画名称,时长,播放次数…

    1、声明动画:为动画指定名称及定义关键帧

        关键帧:当前元素状态的时间点及样式,由动作(样式)和时间组成

    @keyframes  动画名称{                 /*动画名称不可使用关键字*/

      0% / from{ 动画开始时的样式 }        /*声明关键帧*/

      ……

      50%{动画执行到一半的时候的样式}       ...

      ……

      100% / to{ 动画结束时的样式 }        ...

    }

    使用:animation:动画名 .8s linear infinite

    两段时间设置相同的帧,可以使之停顿一段时间

    注意:尽量用 %,而不用 from...to(Android2.3的需要以0%开始,以100%结束)

    浏览器兼容性:

    @-moz-keyframes  动画名称{}

    @-ms-keyframes  动画名称{}

    @-o-keyframes  动画名称{}

    @-webkit-keyframes  动画名称{

      0% / from{ 动画开始时的样式 }

      ...

      100% / to{ 动画结束时的样式 }

    }

    @keyframes  动画名称{}

    使用:

    -moz-animation:动画名称 .8s linear infinite;

    -ms-animation:动画名称 .8s linear infinite;

    -o-animation:动画名称 .8s linear infinite;

    -webkit-animation:动画名称 .8s linear infinite;

    animation:动画名称 .8s linear infinite;

    注意: 动画名称建议使用2个单词,否则易出错

    2、为元素调用动画

    ① 作用:指定调用的动画名称

        属性:animation-name:

                 -webkit-animation-name:

    ② 作用:动画完成一个周期的执行时长

        属性:animation-duration:

        取值:s / ms

    ③ 作用:指定动画执行的速率

        属性:animation-timing-function:

        取值:ease,linear,ease-in,ease-out,ease-in-out

    ④ 作用:指定动画播放之前的延迟时长

        属性:animation-delay:

        取值:s / ms

        注意:当播放多次时,延迟只是指播放之前的一次延迟,下次播放不再延迟

    ⑤ 作用:指定动画的播放次数

        属性:animation-iteration-count:

        取值:1、具体数字

                  2、关键字:infinite(无限次播放)

    ⑥ 作用:指定动画播放方向

        属性:animation-direction

        取值:1、normal       默认值,正向播放:0% ~ 100%

                  2、reverse      逆向播放:100% ~ 0%

                  3、alternate    轮流播放,奇数次时,正向播放;偶数次时,逆向播放(大于1时才有效)

    ⑦ 缩写:animation   下面的⑧、⑨不能简写

    animation:name(必给)  duration(必给)  timing-function    delay    iteration-count    direction;

    ⑧ animation-fill-mode

        作用:指定动画在播放前或播放后的填充状态

        取值:1、none           不改变默认行为

                 2、forwards      动画完成后,状态将保持在最后一帧状态上

                 3、backwards    动画在播放前(延迟时间内)状态显示在第一帧上(只有在延迟(delay)时间内才会显示效果)

                 4、both            播放前后,分别放在第一帧和最后一帧上

    ⑨ animation-play-state

        作用:指定动画的播放状态(运行还是暂停)

        取值:1、paused     动画暂停

                  2、running    动画播放

    动画声明在激发操作的属性中,网页加载完后动画运行;动画声明在声明属性中,网页加载时就开始运行

    加载中动画:

    .loading{

      white-space: nowrap;

      width: 60%;

      height: 50px;

      margin: 2rem auto 0;

      text-align: center;

      display: flex;

      align-items: center;

      justify-content: center;

    }

    .loading>div{

      width: 20px;

      height: 20px;

      border-radius: 50%;

      border: 2px solid #666;

      border-bottom-color: transparent;

      margin-right: 10%;

      -webkit-animation: loadding .8s linear infinite;

      animation: loadding .8s linear infinite;

    }

    @-webkit-keyframes loadding{

      0%{ -webkit-transform:rotate(0deg); transform:rotate(0deg) }

      50%{ -webkit-transform:rotate(180deg); transform:rotate(180deg) }

      100%{ -webkit-transform:rotate(360deg); transform:rotate(360deg) }

    }

    @keyframes loadding{

      0%{ -webkit-transform:rotate(0deg); transform:rotate(0deg)}

      50%{ -webkit-transform:rotate(180deg); transform:rotate(180deg)}

      100%{ -webkit-transform:rotate(360deg); transform:rotate(360deg)}

    }

    js动画和css3动画的差异性:

    ① 功能涵盖面,js比css大

    ② 实现/重构难度不一,css3比js更简单,性能调优方向固定

    ③ 对帧速表现不好的低版本浏览器,css3可以做到自然降级

    ④ css动画有天然事件支持

    ⑤ css3有兼容性问题

    进阶********************************************************************************

    Web动画性能比较:GPU硬件加速css动画 > 非硬件加速css动画 > JavaScript动画

    现代浏览器在完成以下4种属性的动画时,消耗成本较低:

    ① position:transform: translate(Xpx, Ypx)

    ② scale:    transform: scale(value)

    ③ rotation:transform: rotate(*deg)

    ④ opacity: transform: 0 ... 1

    开启GPU加速:

    div{

      will-change: transform;

      transform: translateZ(0);    /*Safari和一些旧浏览器无法识别will-change,做的兼容性*/

    }

    会使声明了该样式属性的元素生成一个图形层,相当于提前告诉浏览器将会进行transform变换,让浏览器提前做好准备

    但是也不要将其应用在太多的元素上,过度使用会导致页面响应缓慢或者消耗非常多的资源

    _______________________________________________________________________________________

    CSS3 Filter 改变模糊度、亮度、透明度...

    CSS3 Filter (滤镜)属性提供了模糊和改变元素颜色的功能,常用于调整图像的渲染、背景、边框的显示效果

    -webkit-filter 是css3的一个属性,Webkit率先支持了这几个功能,效果很不错

    现在规范中支持的效果有:

    ①  blur            模糊         值为length

    ②  brightness   亮度         值为0-1之间的小数

    ③  contrast      对比度      值为num

    ④  grayscale     灰度        值为0-1之间的小数

    ⑤  hue-rotate   色相旋转  值为angle

    ⑥  invert          反色        值为0-1之间的小数

    ⑦  opacity        透明度     值为0-1之间的小数

    ⑧  saturate       饱和度     值为num

    ⑨  sepia           褐色        值为0-1之间的小数

    ⑩  drop-shadow  阴影

    无效果    -webkit-filter: none;

    ①  模糊

    -webkit-filter: blur(9px);

    filter: blur(9px);

    ②  亮度

    -webkit-filter: brightness(2.3);

    filter: brightness(2.3);

    ③  对比度

    -webkit-filter: contrast(4.4);

    filter: contrast(4.4);

    ④  灰度

    -webkit-filter: grayscale(1);

    filter: grayscale(1);

    ⑤  色相旋转

    -webkit-filter: hue-rotate(185deg);

    filter: hue-rotate(185deg);

    ⑥  反色

    -webkit-filter: invert(1);

    filter: invert(1);

    ⑦  透明度

    -webkit-filter: opacity(55%);

    filter: opacity(55%);

    ⑧  饱和度

    -webkit-filter: saturate(3.6);

    filter: saturate(3.6);

    ⑨  褐色

    -webkit-filter: sepia(0.77);

    filter: sepia(0.77);

    ⑩  阴影

    -webkit-filter: drop-shadow(0px 0px 5px #000);

    filter: drop-shadow(0px 0px 5px #000);

    ____________________________________________________________________________________

    在CSS3中,background-clip属性规定背景的绘制区域

    它的值有3个:

    border-box      背景绘制在边框方框内(border上),裁切成边框方框(默认值),最大

    padding-box    背景绘制在衬距方框内(padding上),剪切成衬距方框

    content-box     背景绘制在内容方框内(padding内),剪切成内容方框,最小

    ____________________________________________________________________________________

    用户可否选中

    属性:-ms-user-select   -moz-user-select   -o-user-select    -webkit-user-select   user-select

    取值:① text      可以选择文本(默认值)

             ②none   文本不能被选择

             ③ all        当所有内容作为一个整体时可以被选择。如果双击或者在上下文上点击子元素,那么被选择的部分将是以该子元素向上回溯的最高祖先元素

             ④ element   可以选取文本,但选择范围受元素边界的约束

    是否阻止元素成为鼠标事件目标

    属性:pointer-events

    取值:auto     默认,不阻止

             none    元素永远不会成为鼠标事件的target,但是,当其后代元素的pointer-events属性指定其它值时,鼠标事件可以指向其后代元素,此时,鼠标事件将在捕获/冒泡阶段触发父元素的事件监听器

    _______________________________________________________________________________________

    input[type=text]::-ms-clear,

    input[type=tel]::-ms-clear,

    input[type=number]::-ms-clear{

      display:none;                           //禁用PC端表单输入框默认清除按钮

    }

    ____________________________________________________________________________________

    resize  指定一个元素是否允许用户调整大小

    取值:① none        用户无法调整元素的尺寸

             ② both         用户可调整元素的高度和宽度

             ③ horizontal 用户可调整元素的宽度

             ④ vertical     用户可调整元素的高度

    注意:只有当溢出值(overflow)不为visible时才生效

    ____________________________________________________________________________________

    text-overflow属性,规定当文本溢出包含元素时发生的事情

    取值:① clip       修剪文本

             ② ellipsis    显示省略符号来代表被修剪的文本

             ③ string     使用给定的字符串来代表被修剪的文本

    条件:

    ① 设置overflow:hidden

    ② 不能设置为display:inline-flex或flex

    ③ 强制文本在一行内显示(white-space:nowrap)

    溢出显示省略号,当手指按住元素时显示全部文本

    div{

      white-space:nowrap;

      text-overflow:ellipsis;

      overflow:hidden;

    }

    div:active{

      text-overflow:inherit;

      overflow:visible;

    }

    ____________________________________________________________________________________

    calc()    用于动态计算

    注意:运算符前后各需要保留一个空格,例如:width: calc(100% - 10px)

    使用:①任何长度值都可以使用calc()函数进行计算

             ② calc()函数支持 + - * /

             ③ calc()函数使用标准的数学运算优先级规则

    兼容性:

    -moz-calc(...);           /*Firefox*/

    -webkit-calc(...);        /*chrome safari*/

    calc();

    $("div").css('width', 'calc(100% - 20px)');        //在jQuery中使用calc,运算符两边需要加空格

    ____________________________________________________________________________________

    -webkit-font-smoothing    字体抗锯齿属性

    对字体进行抗锯齿渲染可以使字体看起来会更清晰舒服

    font-smoothing是非标准的CSS定义,它被列入标准规范的草案中,后由于某些原因从web标准中被移除了,

    但可以用以下两种定义进行抗锯齿渲染

    -moz-osx-font-smoothing:grayscale;        /*firefox*/

    -webkit-font-smoothing:antialiased;         /*chrome、safari*/

    它有三个属性值

    none                         对低像素的文本比较好

    subpixel-antialiased    默认值

    antialiased                 抗锯齿很好

    ____________________________________________________________________________________

    修改 overflow:auto 产生的滚动条

    ::-webkit-scrollbar{        /*滚动条整体*/

      width: 0;

      height: 0;

    }

    ::-webkit-scrollbar-track{        /*滚动条的滑轨*/

      background-color: transparent;

      opacity: 0;

    }

    ::-webkit-scrollbar-thumb{        /*滚动条的滑块*/

      background-color: transparent;

      opacity: 0;

    }

    ::-webkit-scrollbar-button{        /*滚动条轨道两头的按钮*/

      background-color: transparent;

      opacity: 0;

    }

    ::-webkit-scrollbar-track-piece{        /*内层轨道*/

      background-color: transparent;

      opacity: 0;

    }

    ::-webkit-scrollbar-corner{        /*横向滚动条和纵向滚动条相交处的尖角*/

      background-color: transparent;

      opacity: 0;

    }

    ::-webkit-resizer{        /*两个滚动条的交汇处用于调整元素大小的控件*/

      background-color: transparent;

      opacity: 0;

    }

    隐藏浏览器自带的滚动条:

    父元素设置overflow:hidden,高为100vh,滚动元素大于父元素的width,并设置overflow:auto

    section{ width:100%; height:100vh;overflow:hidden; }            /*父元素*/

    section>div{ width:200%; height:100%; overflow:auto; }        /*滚动元素*/

    section>div>div{ width:50%; }                                             /*存放内容的元素*/

    _______________________________________________________________________________________

    网格布局(Grid)

    创建网格布局: ① display: grid;

                         ② display: inline-grid;

    属性:

    ① 定义轨道宽高:

    grid-template-rows: 50px 100px;    定义2个行轨道(可以是任何非负的长度值: px、%、rem等)

    grid-template-columns: 90px 50px 120px;    定义3个列轨道

    grid-template-columns: 1fr 1fr 2fr;              定义轨道尺寸配额,表示按配额比例分配可用空间

    grid-template-columns: 3rem 25% 1fr 2fr;   fr和其它长度单位混合使用时,fr的计算基于其它单位分配后剩余的空间

    grid-template-columns: minmax(auto, 50%) 1fr 3rem;   minmax()接收2个参数(第1个最小,第2个最大)

    grid-template-columns: repeat(3, 1fr) 10px;   repeat()接收2个参数(第1个是重复次数,第2个轨道尺寸)

    ② 定义网格间隙:

    grid-column-gap: 20px;    定义网格间隙(只创建在行列之间,项目与边界之间无间隙)

    grid-row-gap: 5rem;

    简写: grid-gap: 100px 1rem;    若只有一个值,其即表示行间隙,也表示列间隙

    ③ 用网格线编号定位项目:

    grid-row-start:2; grid-row-end:3; grid-column-start:2; grid-column-end:3;    编号从1开始,以1为步长

    简写: grid-row:2; grid-column:3/4;    若只指定一个值,则只表示开始,两个值用 / 分隔

    简写: grid-area: 2/2/3/3;  分别是grid-row-start、grid-column-start、grid-row-end、grid-column-end的简写

    ④ 网格项目跨越行列:

    网格项目默认占用一行和一列,但可以定位项目的属性来指定项目跨越多行或多列:

    grid-column-start:1; grid-column-end:4;    网格项目跨越多列

    grid-row:2/span 3; grid-column:span 2;    关键字span可以用来指定跨越行或列的数量

    ⑤ 层叠网格项目:

    通过项目定位可以使多个项目层叠在一起,属性z-index可以改变层叠项目的层次

    例: .item-1, .item-2{ grid-row-start:1; grid-column-end:span 2; }

         .item-1{ grid-column-start:1;z-index:1; }    .item-2{ grid-column-start:2; }

    ⑥ 网格项目的对齐方式:

    justify-items和justify-self以行轴为参照对齐项目

    align-items和align-self    以列轴为参照对齐项目

    支持的值:

    1、aoto

    2、normal

    3、start            在轴线起点处对齐

    4、end             在轴线的终点处对齐

    5、center         在轴线的中心处对齐

    6、stretch        在轴线的方向延伸并填满整个区域

    7、baseline

    8、first baseline

    9、last baseline

    ⑦ 网格轨道的对齐方式:

    align-content    定义网格轨道延着行的轴线的对齐方式

    justify-content  定义网格轨道延着列的轴线的对齐方式

    1、normal

    2、start

    3、end

    4、center

    5、stretch

    6、space-around      在每一列的两侧平均分配额外空间

    7、space-between    在列与列之间平均分配额外的空间

    8、space-evenly       在列与列之间及列与边界之间平均分配额外空间

    9、baseline

    10、first baseline

    11、last baseline

    _______________________________________________________________________________________

    自定义属性:

    a{ --focus-color1:blue; }                                   /*自定义变量focus-color,设定颜色值、应用元素*/

    :root{ --focus-color2:yellow; }                           /*定义在:root伪类中,全局可用*/

    a:hover{ --focus-color1:red; }                           /*hover时修改自定义的值*/

    a{ background-color: var(--focus-color1); }        /*应用此自定义变量*/

    a{ background-color: var(--focus-color2, #333) }    /*设置回退值#333,自定义属性无效或未设置时使用*/

    注意:自定义属性区分大小写

    使用js操作css自定义属性:

    var elem = document.querySelector('a');

    var cssStyle = getComputedStyle( elem );        //获取a标签的样式

    var cssVal = String( cssStyle.getPropertyValue('--focus-color1') ).trim();    //获取css自定义属性的值

    elem.style.setProperty('--focus-color1', '#999');        //修改css自定义属性

    _______________________________________________________________________________________

    display: contents  该元素会导致自身的盒子不生成,但所有的子元素照常生成(对于选择器没有影响),可用于弹性布局或网格布局的非直接子元素能应用这些布局

    position: sticky粘性定位,让元素在页面滚动时不脱离文档流,如同在正常流中,但当其滚动到相对于视口的某个特定位置(阈值)时,会固定在屏幕上,如同fixed一样。但兼容性差,在不兼容的浏览器中会被忽略并退到设置的滚动方式(或relative)

    例: {position:-webkit-sticky; position:sticky; top:0; left:0; right:0;}  此阈值为top=0

    注意:

    ① 必须指定top,left,right,bottom四个阈值中的一个,才可使粘性定位生效

    ② 必须设置(或默认)  body{ overflow:visible; }

    _______________________________________________________________________________________

    css3混合模式:

    mix-blend-mode: difference;    将文本的颜色与背景颜色互换

    mix-blend-mode 定义元素与背景的混合模式,可以是元素与背景图片的混合,也可以是元素与背景色的混合

    background-blend-mode  定义背景的混合模式,可以是背景图片与背景图片的混合,也可以是背景图片与背景色的混合

    _______________________________________________________________________________________

    clip-path 裁剪路径

    clip-path: none;    不使用裁剪路径

    clip-path: circle(50px at 50px 50px);  在元素的(50px, 50px)处,裁剪生成一个半径为50px的圆

    clip-path: polygon(50% 0%, 80% 10%, 100% 35%, 100% 70%, 80% 90%,

                               50% 100%, 20% 90%, 0% 70%, 0% 35%, 20% 10%);    裁剪生成一个十边形

    clip-path可以进行transtion过渡与animation动画切换,但进行过渡的两个状态的坐标顶点数量必须一致(但可以使其中n个坐标点重合)

    shape-outside 图文混排,只能和float浮动一起使用

    取值:

    shape-outside:none;

    shape-outside:margin-box;

    shape-outside:content-box;

    shape-outside:border-box;

    shape-outside:padding-box;

    shape-outside:circle(80px at 80px 80px);    在元素的(80px, 80px)坐标处生成一个80px半径的圆

    shape-outside:ellipse();

    shape-outside:inset(10px 10px 10px 10px);

    shape-outside:polygon(10px 10px, 20px 20px, 30px 30px);

    _______________________________________________________________________________________

    伪类选择器 :focus-within

    表示一个元素或该元素的后代获得焦点,都会触发 :focus-within,类似于js的冒泡

    兼容性: 只有最新版浏览器支持该属性

    writing-mode 改变排版规则

    语法:

    -ms-writing-mode: lr-tb;

    writing-mode: horizontal-tb;    默认值,文本流按水平方向排列

    -ms-writing-mode: tb-rl;

    writing-mode: vertical-rl;        文本按垂直方向排列,阅读顺序从右向左

    -ms-writing-mode: tb-lr;

    writing-mode: vertical-lr;        文本按垂直方向排列,阅读顺序从左到右

    注意:可设置margin:auto;用于水平方向垂直居中

             除中文外,英文、数字、字体符号会自动旋转90°

    _______________________________________________________________________________________

    css mask可以让蒙版区域透过去,不透明区域保留出来

    用法与background基本一致

    如:

    img{

      -webkit-mask-image: url(图片地址);

      mask-image: url(图片地址);        图片支持svg、png、gif等

    }

    @supports not (mask-size: cover){

      不支持mask-image的样式

    }

    ________________________________________________________________________________________________

    浏览器平滑滚动

    html, body{ scroll-behavior:smooth }    设置平滑滚动

      <a href="#">返回顶部</a>              点击可平滑滚动到顶部

    _______________________________________________________________________________________

    使div看上去像一个按钮(设置为none可去掉效果)

    div{

      -moz-appearance: button;

      -webkit-appearance: button;

      appearance: button;

    }

    _______________________________________________________________________________________

    根据用户设备的分辨率匹配合适的图像

    div{

      background-image: image-set( url('test.png') 1x, url('test@2x.png') 2x, url('test@3x.png') 3x );

    }

    相关文章

      网友评论

          本文标题:CSS CORE2

          本文链接:https://www.haomeiwen.com/subject/pkpbqqtx.html