澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

特性检测,CSS3学习笔记之linear

2019-10-01 作者:澳门新萄京赌场网址   |   浏览(78)

深切研究 CSS 性子检查测量试验 @supports 与 Modernizr

2017/03/01 · CSS · Modernizr

正文小编: 伯乐在线 - chokcoco 。未经我许可,防止转发!
应接参预伯乐在线 专辑撰稿人。

怎么是 CSS 本性检查实验?我们了然,前端工夫人欢马叫的今天,各类新才能新属性家常便饭。在 CSS 层面亦不例外。

一对新属品质不小提高客户体验以及收缩技术员的职业量,况且在及时的前端空气下:

  • 成都百货上千实验性意义未成为行业内部却被大批量选拔;
  • 内需协作多终端,多浏览器,而各浏览器对某一新功用的兑现表现的绝分裂;

就此有了优雅降级和按部就班加强的传教,在这种背景下,又想选用新的技巧给客户提供更加好的体会,又想办好回落机制确认保证低版本终端客户的中坚经验,CSS 特性检查实验就应时而生了。

CSS 性情检查评定便是针对性区别浏览器终端,判别当前浏览器对某些特性是还是不是协助。运用 CSS 本性检测,大家能够在支撑当前特色的浏览器蒙受下使用新的手艺,而不帮助的则做出一点回降机制。

正文将主要介绍二种 CSS 脾性检查实验的章程:

  1. @supports
  2. modernizr

CSS Gradient详解

2016/03/06 · CSS · Gradient

初稿出处: AlloyTeam   

初稿链接:http://www.fx114.net/qa-264-77177.aspx
自家觉着CSS3很准确,本身也略微看过,并且尝试过一些属性。对自己自身来说,笔者未有勇气说自家学过CSS3,我感到任何自己看来比相当小的作业,也只是站在温馨的角度来评定。纵然的是“轻松的”HTML以小编之见也是很值得钻探的,独有每一日保持二个谦逊的千姿百态,技巧够看得更远,走得更稳。
在这里要感激一下网址:
w3cplus,W3School ,W3C 等等一些网络的课程啊博客什么的(还恐怕有比很多就不一一列举了),作者终于从这几个地点开始接触传说中的CSS3和HTML5,而团结的上学笔记自然也会从中借鉴。
提出:抢先二分一CSS3的性质尚在草案之中,使用的时候最棒还是都加上各自浏览器的私人商品房前缀
eg:
{
-webkit-border-radius:10px;
-moz-border-radius:10px;
-o-border-radius:10px;
border-radius:10px;
}

CSS @supports

价值观的 CSS 天性检查实验都以透过 javascript 实现的,可是以往,原生 CSS 就能够完毕。

CSS @supports 通过 CSS 语法来实现特性检查测验,并在当中 CSS 区块中写入假使个性检查测验通过希望达成的 CSS 语句。

前言

明天设计员同学越来越高大上了,纯色背景已经不能够满足人民民众日益增长的物质文化须求了,必需整渐变背景o(╯□╰)o。怎么回复呢,设计员直接丢过来二个几十K的图片,那怎么行。。。

幸亏大家有CSS第三代!本次就来唠唠CSS3 Gradient(/ˈgreɪdɪənt/)的用法。

 

前几日介绍的是CSS3的渐变 :linear-gradient
渐变在网页上应该算是很广阔的一种效应。不过在CSS3油然则生以前,渐变效果必需运用图片技巧到位。那就能现出难题了,就好像从前说的圆角和阴影同样,因为使用了图片,在大势所趋程度上海电影制片厂响网页的质量是必然的,同期还或许有网址早先时期维护和修改的难题。CSS3的渐变诞生相当久了,到近日截至,只借使支撑该属性的浏览器,除了它们的个体前缀之外,别的写法都是一样的。
在刚开端的时候,在webkit下使用的是:
-webkit-gradient(<type>, <point> [, <radius>]?, <point> [, <radius>]? [, <stop>]*) //老式语法书写准则

语法:

CSS

@supports <supports_condition> { /* specific rules */ }

1
2
3
@supports <supports_condition> {
    /* specific rules */
}

举个例证:

Sass

{ position: fixed; } @supports (position:sticky) { div { position:sticky; } }

1
2
3
4
5
6
7
8
9
{
    position: fixed;
}
@supports (position:sticky) {
    div {
        position:sticky;
    }
}

上面包车型地铁事例中,position: sticky 是 position 的四个新属性,用于落到实处黏性布局,能够轻巧完成部分陈年供给 javascript 才具落到实处的布局(戳小编打听详细情况),不过近日唯有在 -webkit- 内核下才拿走帮助。

地点的写法,首先定义了 div 的 position: fixed ,紧接着上面一句 @supports (position:sticky) 则是特色检查测验括号内的从头到尾的经过,就算当前浏览器援救 @supports 语法,并且帮助 position:sticky 语法,那么 div 的 则会被设置为 position:sticky 。

咱俩得以看见,@supports 语法的骨干就在于这一句:@supports (...) { } ,括号内是三个CSS 表明式,借使浏览器判别括号内的表明式合法,那么接下去就能够去渲染括号内的 CSS 表明式。除了这种最健康的用法,还足以宽容其余多少个器重字:

兼容性

从Can I use上看,当代浏览器扶助程度一流,特别移动端,对于不辅助的浏览器,下文少禽提供一种采用纯色的降级方案。

澳门新萄京官方网站 1

可是各类包容性难题确定免不了,Gradient和Flex box同样eggache,总共有三种语法则则,何况距离比很大。。。

此间为了讨论轻松,大家只提到最新的语法(基本能隐讳一大波新浏览器了)。老旧语法则则和IE等各浏览器的相称方法请见参考作品的2、3有详实的介绍,也能够应用Gradient Generator或者autoprefixer自动生成代码。

而到明天,在webkit下利用的是:
-webkit-linear-gradient( [<point> || <angle>,]? <stop>, <stop> [, <stop>]* )//最新书写语法

@supports not && @supports and && @supports or

内置知识

1、绘制区域,也正是正统中所谓的gradient box(为了知道无歧义,下文不再翻译该术语),跟所波及DOM的其实尺寸有关,比方,设定background的话,绘制区域就是DOM的padding box,除非用backgroud-size内定大小;固然是设定list-style-image,绘制区域正是1em的纺锤形。

2、从特性检测,CSS3学习笔记之linear。W3C的描述中得以驾驭,浏览器实际是依据Gradient内定的语法来扭转对应的图样

        A gradient is an image that smoothly fades from one color to another.

再便是不止background能够用,譬喻

CSS

background: linear-gradient(white, gray); list-style-image: radial-gradient(circle, #006, #00a 90%, #0000af 100%, white 100%);

1
2
background: linear-gradient(white, gray);
list-style-image: radial-gradient(circle, #006, #00a 90%, #0000af 100%, white 100%);

3、由于是image,所以用于background时,实际是设置在background-image上,倘若只是单纯的渐变颜色,能够用以下的样式来对不补助的老旧浏览器做降级管理

CSS

.gradient { /* can be treated like a fallback */ background-color: red; /* will be "on top", if browser supports it */ background-image: linear-gradient(red, orange); }

1
2
3
4
5
6
.gradient {
/* can be treated like a fallback */
  background-color: red;
/* will be "on top", if browser supports it */
  background-image: linear-gradient(red, orange);
}

原理就借出慕课网的一张图:

澳门新萄京官方网站 2

Gradient有多少个子个性,上面一一列出。

方今,新式语法与其它浏览器,包罗firefox,opera的语法书写统一(以往的opera已经运用了webkit内核);

@supports not — 非

not 操作符能够献身别的表明式的日前来发出一个新的表明式,新的表明式为原表达式的值的否认。看个例证:

Sass

@supports not (background: linear-gradient(90deg, red, yellow)) { div { background: red; } }

1
2
3
4
5
@supports not (background: linear-gradient(90deg, red, yellow)) {
    div {
        background: red;
    }
}

因为增加了 not 关键字,所以与地点第贰个例子相反,这里就算检查评定到浏览器不援救线性渐变 background: linear-gradient(90deg, red, yellow) 的语法,则将 div 的水彩设置为大青 background: red 。

h3>@supports and — 与

本条能够理解,多种剖断,类似 javascript 的 && 运算符符。用 and 操作符连接七个原始的表明式。唯有八个原始表明式的值都为真,生成的表明式才为真,反之为假。

本来,and 能够三番五次放肆八个表明式看个例证:

Sass

p { overflow: hidden; text-overflow: ellipsis; } @supports (display:-webkit-box) and (-webkit-line-clamp:2) and (-webkit-box-orient:vertical) { p { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } }

1
2
3
4
5
6
7
8
9
10
11
p {
    overflow: hidden;
    text-overflow: ellipsis;
}
@supports (display:-webkit-box) and (-webkit-line-clamp:2) and (-webkit-box-orient:vertical) {
    p {
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
}

下面同时,检验 @supports (display:-webkit-box) and (-webkit-line-clamp:2) and (-webkit-box-orient:vertical) 了八个语法,假诺还要帮衬,则设定多少个CSS 法规。那七个语法必须同一时间获取浏览器的帮忙,假如表达式为真,则足以用来落实多行省略效果:

Demo戳我

See the Pen @supportAnd by Chokcoco (@Chokcoco) on 特性检测,CSS3学习笔记之linear。CodePen.

线性渐变(linear-gradient)

语法如下:

CSS

linear-gradient() = linear-gradient( [ | to ]?, <color-stop-list> ) <side-or-corner> = [left | right] || [top | bottom]

1
2
3
4
5
linear-gradient() = linear-gradient(
  [ | to ]?,
  <color-stop-list>
)
<side-or-corner> = [left | right] || [top | bottom]

率先个参数指明了颜色渐变的大势:

  • 能够是角度,比如0deg,表示正上方向,90deg表示向右(顺时针)
  • 也能够是注重词,比如to top, to right, to bottom, to left, 分别对应了0deg, 90deg, 180deg, 270deg。当然也得以不点名,默许值是to bottom

第三个参数指明了颜色断点(即color-stop)。位置能够大致,第贰个默以为0%,最终三个暗许为百分之百,假设中间的值未有一点点名,则按颜色数目求均值,比如

CSS

linear-gradient(red 40%, white, black, blue) /*等价于*/ linear-gradient(red 40%, white 60%, black 80%, blue 100%)

1
2
3
linear-gradient(red 40%, white, black, blue)
/*等价于*/
linear-gradient(red 40%, white 60%, black 80%, blue 100%)

更加的多边界情形可以参照W3C规范,建议地方都利用相同的单位,幸免发出意料之外情状。

实质上gradient,分成两种一种是线性渐变(linear-gradient),另一种是径向渐变(radial-gradient)。大家能够将linear-gradient和radial-gradient增多到其余能够承受图片的属性,比如:backgorund-images,list-style-image等等。后天我要介绍的正是标题上的linear-gradient。
线性渐变

@supports or — 或

理解了 @supports and,就很好理解 @supports or 了,与 javascript 的 || 运算符类似,表明式中一经有三个为真,则调换表明式表达式为真。看例子:

Sass

@supports (background:-webkit-linear-gradient(0deg, yellow, red)) or (background:linear-gradient(90deg, yellow, red)){ div { background:-webkit-linear-gradient(0deg, yellow, red); background:linear-gradient(90deg, yellow, red) } }

1
2
3
4
5
6
@supports (background:-webkit-linear-gradient(0deg, yellow, red)) or (background:linear-gradient(90deg, yellow, red)){
    div {
        background:-webkit-linear-gradient(0deg, yellow, red);
        background:linear-gradient(90deg, yellow, red)
    }
}

下面的例子中,独有检验到浏览器协理 background:-webkit-linear-gradient(0deg, yellow, red) 或者(or) background:linear-gradient(90deg, yellow, red) 当中三个,则给 div 成分加多渐变。

Demo戳我

See the Pen @supports or by Chokcoco (@Chokcoco) on CodePen.

当然,关键字 not 还足以和 and 或者 or 混合使用。感兴趣的能够品尝一下。

浏览器是怎么着绘制渐变线的吗?

日常来讲图,从gradient box的着力(对角线交点)开始以CSS中内定的角度向两侧延伸,终点是gradient box的一个近乎顶点到gradient line垂线的垂足,源点也是近乎的求法,两点间的相距便是gradient line的尺寸(浓浓的初级中学几何味~)。

澳门新萄京官方网站 3

就此,gradient line的尺寸总计公式是:

CSS

abs(W * sin(A)) abs(H * cos(A)) A是角度,W是gradient box的宽,H为高

1
2
abs(W * sin(A)) abs(H * cos(A))
A是角度,W是gradient box的宽,H为高

是或不是看完有种然并卵的认为:前端程序员哪儿需求掌握这一个鬼啊。

非也非也,在开垦UI的时候,清楚的接头浏览器原理,才干在脑中依照视觉稿正确的解构出CSS代码,不然只好在那边傻傻的试了又试。

栗子一

以下的写法效果其实都平等

CSS

kground-image: linear-gradient(yellow, green); // 暗中同意方向为to bottom background-image: linear-gradient(to bottom, yellow, green); // 使用首要字钦点方向 background-image: linear-gradient(180deg, yellow, green); // 使用角度钦命方向 background-image: linear-gradient(to top, green, yellow); background-image: linear-gradient(to bottom, yellow 0%, green 百分之百); // 钦命颜色断点

1
2
3
4
5
kground-image: linear-gradient(yellow, green); // 默认方向为to bottom
  background-image: linear-gradient(to bottom, yellow, green); // 使用关键字指定方向
  background-image: linear-gradient(180deg, yellow, green); // 使用角度指定方向
  background-image: linear-gradient(to top, green, yellow);
  background-image: linear-gradient(to bottom, yellow 0%, green 100%); // 指定颜色断点

澳门新萄京官方网站 4

栗子二

自然五个颜色断点也足以:

CSS

background-image: linear-gradient(to bottom, #FF0000 14.28%, #FFA500 14.28%, #FFA500 28.57%, #FFFF00 28.57%, #FFFF00 42.85%, #008000 42.85%, #008000 57.14%, #0000FF 57.14%, #0000FF 71.42%, #4B0082 71.42%, #4B0082 85.71%, #800880 85.71%, #800880 100%);

1
background-image: linear-gradient(to bottom, #FF0000 14.28%, #FFA500 14.28%, #FFA500 28.57%, #FFFF00 28.57%, #FFFF00 42.85%, #008000 42.85%, #008000 57.14%, #0000FF 57.14%, #0000FF 71.42%, #4B0082 71.42%, #4B0082 85.71%, #800880 85.71%, #800880 100%);

澳门新萄京官方网站 5

澳门新萄京官方网站,那么些事例还应该有个小技能,Gradient中多少个不等颜色间暗许是潜濡默化的,但只要大家须求做出图中这种颜色醒目调换的作用(锐变),就可以用同一个任务区别颜色的法子完毕。

栗子三

在颜色上设置光滑度渐变

CSS

gradient-1 { background-image:url(); background-size: 100% 100%; } .gradient-2 { background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1)), url() no-repeat; background-size: 100% 100%; }

1
2
3
4
5
6
7
8
9
gradient-1 {
  background-image: url(http://a57.foxnews.com/global.fncstatic.com/static/managed/img/fn2/876/493/EmmaWatsonBrown.jpg);
  background-size: 100% 100%;
}
 
.gradient-2 {
  background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1)), url(http://a57.foxnews.com/global.fncstatic.com/static/managed/img/fn2/876/493/EmmaWatsonBrown.jpg) no-repeat;
  background-size: 100% 100%;
}

效率如下,侧面原图,左侧扩展了一层遮罩,那一个成效实在是应用了CSS3的多背景语法

澳门新萄京官方网站 6

越来越多例子能够在这边看 

以作者之见渐变的参数风云万变,有一点点复杂,所以先从轻便的启幕讲起
linear-gradient最简便的语法:
linear-gradient(起源,初步颜色,停止颜色);

Can i use?

宽容性来看,先看看 Can i use 吧:

澳门新萄京官方网站 7

这仍是贰个尝试中的功用,固然超过半数浏览器皆已扶助了,可是当前看来,就是在运动端想要全部十一分仍急需静观其变一段时间。

可是大家已经能够起始选取起来了,使用 @supports 实现渐进巩固的法力。

渐进加强(progressive enhancement):针对低版本浏览器进行创设页面,保证最宗旨的作用,然后再针对高端浏览器实行职能、交互等改良和扩展功效到达更加好的顾客体验:

向阳渐变(radial-gradient)

radial gradient其实就是颜色从多个点以同心圆只怕椭圆向外渐变。

澳门新萄京官方网站 8

简化版语法如下:

CSS

radial-gradient() = radial-gradient( [ || ]? [ at ]? , <color-stop-list> )

1
2
3
4
radial-gradient() = radial-gradient(
  [ || ]? [ at ]? ,
  <color-stop-list>
)
  • position用来钦命渐变圆心的任务,暗中认可为center,赋值准绳与background-positon的类似;
  • ending-shape能够是circle大概elipse,如若简单,则私下认可值与size相关,size钦点二个值便是圈子,否则是椭圆;
  • size能够是切实的值,也足以用关键字钦赐,默许值是farthest-corner。借使是具体值,圆形要求一个数值,椭圆要求八个。关键字则囊括:
    • closest-side 指gradient box某单方面到盒子宗旨那二日的相距;
    • farthest-side 指gradient box某单方面到盒子宗旨最远的距离;
    • closest-corner 指gradient box某一顶点到盒子大旨日前的离开;
    • farthest-corner 指gradient box某一顶点到盒子主旨最远的偏离;
  • color-stop-list与linear-gradient类似

注意:

  • size的数值不能是负数
  • W3C规范规定,百分比的数值只好用来椭圆,不可能用来圆形。
  • position的值能够是负数

由此,复杂版语法如下:

CSS

radial-gradient() = radial-gradient( [ [ circle || ] [ at ]? , | [ ellipse || [ | ]{2} ] [ at ]? , | [ [ circle | ellipse ] || ] [ at ]? , | at <position> , ]? <color-stop> [ , ] ) <extent-keyword> = closest-corner | closest-side | farthest-corner | farthest-side

1
2
3
4
5
6
7
8
9
10
radial-gradient() = radial-gradient(
  [ [ circle               || ]                          [ at ]? , |
    [ ellipse              || [ | ]{2} ]    [ at ]? , |
    [ [ circle | ellipse ] || ]                  [ at ]? , |
    at <position> ,
  ]?
  <color-stop> [ ,
]
)
<extent-keyword> = closest-corner | closest-side | farthest-corner | farthest-side

栗子一

以下二种写法是等价的

CSS

.gradient-1 { background-image: radial-gradient(yellow, green); } .gradient-2 { background-image: radial-gradient(ellipse at center, yellow 0%, green 100%); } .gradient-3 { background-image: radial-gradient(farthest-corner at 50% 50%, yellow, green); } .gradient-4 { background-image: radial-gradient(ellipse farthest-corner at 50% 50%, yellow, green); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.gradient-1 {
  background-image: radial-gradient(yellow, green);
}
 
.gradient-2 {
  background-image: radial-gradient(ellipse at center, yellow 0%, green 100%);
}
 
.gradient-3 {
  background-image: radial-gradient(farthest-corner at 50% 50%, yellow, green);
}
 
.gradient-4 {
  background-image: radial-gradient(ellipse farthest-corner at 50% 50%, yellow, green);
}

澳门新萄京官方网站 9

栗子二

看下size各样关键字的效用

CSS

.gradient-1 { background-image: radial-gradient(circle closest-side at 30% 50%, yellow, green); } .gradient-2 { background-image: radial-gradient(circle farthest-side at 30% 50%, yellow, green); } .gradient-3 { background-image: radial-gradient(circle closest-corner at 30% 50%, yellow, green); } .gradient-4 { background-image: radial-gradient(circle farthest-corner at 30% 50%, yellow, green); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.gradient-1 {
  background-image: radial-gradient(circle closest-side at 30% 50%, yellow, green);
}
 
.gradient-2 {
  background-image: radial-gradient(circle farthest-side at 30% 50%, yellow, green);
}
 
.gradient-3 {
  background-image: radial-gradient(circle closest-corner at 30% 50%, yellow, green);
}
 
.gradient-4 {
  background-image: radial-gradient(circle farthest-corner at 30% 50%, yellow, green);
}

澳门新萄京官方网站 10

圆心没安装在大旨是因为矩形的对角线相等且平均,所以closest-corner = farthest-corner,就没办法相当差距了。

起源表示渐变开端的岗位,颜色是从起先颜色渐变到甘休颜色。
渐变源点有非常多种写法:
1、使用top,right,bottom,left中的叁个来钦赐渐变的源点
.test{

CSS.supports()

谈到了 @supports,就有须求加以说 CSS.supports() 。

它是作为 @supports 的另一种样式出现的,大家得以行使 javascript 的法子来获得 CSS 属性的支持景况。

可以张开调控台,输入 CSS.supports 试试:

澳门新萄京官方网站 11

假若未有本人达成 CSS.supports 那个方法,输出上述音信,表示浏览器是扶助 @supports 语法的,使用如下:

JavaScript

CSS.supports('display', 'flex') // true CSS.supports('position', 'sticky') // true

1
2
CSS.supports('display', 'flex')  // true
CSS.supports('position', 'sticky')  // true

澳门新萄京官方网站 12

那它有何样用啊?借令你的页面供给动态增进一些您不鲜明什么浏览器帮衬的新的个性,那它也许会派上用场。以及,它能够相称大家下文将在在讲的 modernizr 。

再也渐变(Repeating Gradients)

主导语法与地点的线性渐变和向阳渐变类似,便是加多了再一次的风味。

从Can I use的数码看脚下帮助程度不乐观,PC除了IE都还不易,移动端Android4.0以下都红o(╯□╰)o。。

但是精晓下只怕不能缺少的

澳门新萄京官方网站 13

 

再次的条条框框轻巧说正是用最后二个颜色断点的岗位减去第三个颜色断点地点的偏离作为距离长度,不断的再一次。举例repeating-linear-gradient(red 10px, blue 50px) 就一定于linear-gradient(…, red -30px, blue 10px, red 10px, blue 50px, red 50px, blue 90px, …)

关于首尾颜色距离为0等特别情状,这里就不细说 了,能够到W3C规范机关钻研。

栗子

CSS

div { width: 100px; height: 100px; margin: 10px; border: 1px solid blue; float: left; } .repeat-linear { background-image: repeating-linear-gradient( 45deg, white, white 10px, red 10px, red 20px); } .repeat-radial { background: repeating-radial-gradient( circle at bottom left, white, white 10px, red 10px, red 20px); }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
div {
  width: 100px;
  height: 100px;
  margin: 10px;
  border: 1px solid blue;
  float: left;
}
 
.repeat-linear {
  background-image: repeating-linear-gradient( 45deg, white, white 10px, red 10px, red 20px);
}
 
.repeat-radial {
  background: repeating-radial-gradient( circle at bottom left, white, white 10px, red 10px, red 20px);
}

澳门新萄京官方网站 14

传说地点说的条条框框,那么些事例里的间隔长度是全进度颜色的岗位之差,是20px。

咱俩得以表明下,两张图里都有约7个红白条,矩形宽高均100px,对角线则是约140px,140px/7=20px,bingo!

注:本文例子的代码在codepen能够查阅

background:-webkit-linear-gradient(top,#fff,#000);

modernizr

上边介绍了 CSS 格局的特点检查测量试验,在从前,平日是采取 javascript 来进行特色检查测量检验的,在那之中 modernizr 正是里面最为了不起的佼佼者。

modernizr(戳小编查看 Github )是八个开源的 javascript 库。有着近乎 2W 的 star ,其能够水平知秋一叶。

简易看看使用方式,尽管页面已经援用了 modernizr ,语法如下:

JavaScript

// Listen to a test, give it a callback Modernizr.on('testname', function( result ) { if (result) { console.log('The test passed!'); } else { console.log('The test failed!'); } }); // 只怕是看似 CSS.supports() Modernizr.testAllProps('background', 'linear-gradient(90deg, #888, #ccc)'); // true

1
2
3
4
5
6
7
8
9
10
11
12
// Listen to a test, give it a callback
Modernizr.on('testname', function( result ) {
  if (result) {
    console.log('The test passed!');
  }
  else {
    console.log('The test failed!');
  }
});
// 或者是类似 CSS.supports()
Modernizr.testAllProps('background', 'linear-gradient(90deg, #888, #ccc)');  // true

举个实在的例子,假使我们意在对是还是不是支持渐变那个样式浏览器下的二个 div 分裂对待,有如下 CSS:

CSS

div { background: #aaa; } .linear-gradient div{ background: linear-gradient(90deg, #888, #ccc); }

1
2
3
4
5
6
7
div {
    background: #aaa;
}
.linear-gradient div{
    background: linear-gradient(90deg, #888, #ccc);
}

使用 Modernizr 进行判定,假诺扶助渐变,则在根成分增多多少个 .linear-gradient 样式,方便示例,使用了 jquery 语法:

JavaScript

if (Modernizr.testAllProps('background', 'linear-gradient(90deg, #888, #ccc)')) { $('html').addClass('linear-gradient'); }

1
2
3
if (Modernizr.testAllProps('background', 'linear-gradient(90deg, #888, #ccc)')) {
    $('html').addClass('linear-gradient');
}

Demo戳我

See the Pen modernizr by Chokcoco (@Chokcoco) on CodePen.

自然,Modernizr 还大概有非常的多别样的功能,能够去翻翻它的 API 。

参照小说

  1. W3C: Gradients
  2. CSS-Tricks: CSS Gradients
  3. 大漠:CSS3 Gradient
  4. MDN: CSS linear-graient(), radial-gradient(), Using CSS gradients

    1 赞 2 收藏 评论

澳门新萄京官方网站 15

background:-moz-linear-gradient(top,#fff,#000);

特点检查测验原理

倘诺嫌引进整多少个 Modernizr 库太大,页面又不支持 @supports ,其实大家相濡以沫用简单的 javascript 实现也十三分有利轻松。

想要知道浏览器支持多少 CSS 属性,能够在调解窗口试试:

JavaScript

var root = document.documentElement; //HTML for(var key in root.style) { console.log(key); }

1
2
3
4
5
var root = document.documentElement; //HTML
for(var key in root.style) {
    console.log(key);
}

澳门新萄京官方网站 16

地方图片截取的只是打字与印刷出来的一小部分。假使我们要检查实验有个别属性样式是或不是被帮助,在大肆的 element.style 检查实验它是否存在就可以,即上边代码示例的 root 能够替换到大肆成分。

当然,成分也许有 background 属性,不过不援救具体的 linear-gradinet() 属性值。今年该怎么检查测量检验呢?只要求将现实的值赋值给某一要素,再查询那一个属性值能不可能被读取。

JavaScript

var root = document.documentElement; root.style.backgroundImage = 'linear-gradient(90deg, #888, #ccc)'; if(root.style.backgroundImage) { // 支持 } else { // 不支持 }

1
2
3
4
5
6
7
8
9
var root = document.documentElement;
root.style.backgroundImage = 'linear-gradient(90deg, #888, #ccc)';
if(root.style.backgroundImage) {
  // 支持
} else {
  // 不支持
}

于是地点 Modernizr 的事例里,javascript 代码能够改成:

JavaScript

var root = document.documentElement; root.style.backgroundImage = 'linear-gradient(90deg, #888, #ccc)'; if(root.style.backgroundImage) { $('html').addClass('linear-gradient'); }

1
2
3
4
5
6
var root = document.documentElement;
root.style.backgroundImage = 'linear-gradient(90deg, #888, #ccc)';
if(root.style.backgroundImage) {
  $('html').addClass('linear-gradient');
}

理所必然,做这种特定属性值推断的时候是因为有个 CSS 赋值操作,所以大家挑选择于剖断的要素应该是二个遮盖在页面上的成分。

background:-o-linear-gradient(top,#fff,#000);

种种方法间的好坏

  • 原生的 @supports 的属性鲜明是最佳的,而且没有需求引进外界 javascript ,主推这么些,不过没办法兼容难题,近日来看不是最佳的取舍。
  • Modernizr 功效强大,包容性好,不过急需引入外部 javascript,多三个http 恳求,假诺只是举办多少个特征检测,有一点杀鸡用牛刀的认为。
  • 针对须要的特色检验,使用 javascript 完毕贰个简便的函数,再把上面用到的法门封装一下:

JavaScript

/** * 用于简单的 CSS 天性检查实验 * @param [String] property 须求检查测量检验的 CSS 属性名 * @param [String] value 样式的切实可行性质值 * @return [Boolean] 是还是不是由此检查 */ function cssTest(property, value) { // 用于测量试验的要素,遮盖在页面上 var ele = document.getElementById('test-display-none'); // 独有四个参数的场馆if(arguments.length === 1) { if(property in ele.style) { return true; } // 八个参数的气象 }else if(arguments.length === 2){ ele.style[property] = value; if(ele.style[property]) { return true; } } return false; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* 用于简单的 CSS 特性检测
* @param [String] property 需要检测的 CSS 属性名
* @param [String] value 样式的具体属性值
* @return [Boolean] 是否通过检查
*/
function cssTest(property, value) {
    // 用于测试的元素,隐藏在页面上
    var ele = document.getElementById('test-display-none');
    // 只有一个参数的情况
    if(arguments.length === 1) {
        if(property in ele.style) {
            return true;
        }
    // 两个参数的情况
    }else if(arguments.length === 2){
        ele.style[property] = value;
        if(ele.style[property]) {
            return true;
        }
    }
    return false;
}

差不离测验一下:

澳门新萄京官方网站 17

软件工程未有银弹,所以无论哪一类办法,都有符合的景观,大家要做的便是调控驾驭它们的法规,依据分裂的气象灵活运用就可以。

多种 CSS 文章汇总在自家的 Github 。

到此本文甘休,要是还恐怕有何样疑难还是建议,能够多多交换,原创作品,文笔有限,才疏学浅,文中若有不正之处,万望告知。

打赏匡助本身写出越来越多好小说,感谢!

打赏笔者

background:linear-gradient(top,#fff,#000);

打赏援救自个儿写出越来越多好小说,谢谢!

任选一种支付形式

澳门新萄京官方网站 18 澳门新萄京官方网站 19

2 赞 收藏 评论

}

至于小编:chokcoco

澳门新萄京官方网站 20

经不住大运似水,逃但是此间少年。 个人主页 · 作者的小说 · 63 ·    

澳门新萄京官方网站 21

image

2、稍微复杂一点,能够使用top与left或然right组合,也能够应用bottom与left只怕

right组合来改动渐变起源。不过切记:top不能够和bottom组合,left无法和right组合

.test{
background:-webkit-linear-gradient(top right,#fff,#000);
background:-moz-linear-gradient(top right,#fff,#000);
background:-o-linear-gradient(top right,#fff,#000);
background:linear-gradient(top right,#fff,#000);
}

image

.test{
background:-webkit-linear-gradient(bottom left,#fff,#000);
background:-moz-linear-gradient(bottom left,#fff,#000);
background:-o-linear-gradient(bottom left,#fff,#000);
background:linear-gradient(bottom left,#fff,#000);
}

image

3、上边三种写法只可以够画出些许的两种渐变。我们得以采纳角度来设置渐变的起源。
以下边包车型地铁代码为模板,将“0deg”修改成你想要的角度
.deg0{
background:-webkit-linear-gradient(0deg,#fff,#000);
background:-moz-linear-gradient(0deg,#fff,#000);
background:-o-linear-gradient(0deg,#fff,#000);
background:linear-gradient(0deg,#fff,#000);
}

自家加多了11个div,以30deg为差值。

image

基于结果,小编又画出了那张图

image

能够看看,在行使角度设定渐变起源的时候,0deg对应botton,90deg对应left,180deg对应top,360deg对应right。整个进度正是以bottom为源点逆时针转动。
关于源点的剧情笔者一时只询问到那样多,未来假如草案做了改造,笔者询问之后会即时更新。

耳熏目染颜色设置也能够花样比相当多:
潜移默化的水彩能够不断两种,在起源颜色和顶峰颜色之间能够加上更多颜色。
.test{
background:-webkit-linear-gradient(top,#fff,red,#000,red);
background:-moz-linear-gradient(top,#fff,red,#000,red);
background:-o-linear-gradient(top,#fff,red,#000,red);
background:linear-gradient(top,#fff,red,#000,red);
}

image

或者:
.test{
background:-webkit-linear-gradient(top,red,yellow,blue,green,purple,orange);
background:-moz-linear-gradient(top,red,yellow,blue,green,purple,orange);
background:-o-linear-gradient(top,red,yellow,blue,green,purple,orange);
background:linear-gradient(top,red,yellow,blue,green,purple,orange);
}

image

上边的例子中,颜色的渐变都以均匀的,大家也足以给各样颜色引导渐变的岗位,进而使渐变不是独自的均匀变化,这么些也很简单,只要在您想修改的颜色前边加上渐变的文职就能够了。为了轻松直观,作者只用三种颜色。
均匀变化
.test{
background:-webkit-linear-gradient(red ,green,blue);
background:-moz-linear-gradient(red ,green,blue);
background:-o-linear-gradient(red ,green,blue);
background:linear-gradient(red ,green,blue);
}

image

加多了地方后
.test{
background:-webkit-linear-gradient(red 50% ,green,blue);
background:-moz-linear-gradient(red 50% ,green,blue);
background:-o-linear-gradient(red 50% ,green,blue);
background:linear-gradient(red 50% ,green,blue);
}

image

当然,要是颜色格式使用CSS3中的rgba格式,那么渐变将会是透明的。

本文由澳门新萄京官方网站发布于澳门新萄京赌场网址,转载请注明出处:特性检测,CSS3学习笔记之linear

关键词: