金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > web前端 > 18个你可能不相信是用CSS制作出来的东西,基于用

18个你可能不相信是用CSS制作出来的东西,基于用

发布时间:2019-11-26 18:20编辑:web前端浏览(50)

    CSS Modules 用法教程

    2016/06/19 · CSS · Modules

    原文出处: 阮一峰   

    学过网页开发就会知道,CSS 不能算编程语言,只是网页样式的一种描述方法。

    为了让 CSS 也能适用软件工程方法,程序员想了各种办法,让它变得像一门编程语言。从最早的Less、SASS,到后来的 PostCSS,再到最近的 CSS in JS,都是为了解决这个问题。

    图片 1

    本文介绍的 CSS Modules 有所不同。它不是将 CSS 改造成编程语言,而是功能很单纯,只加入了局部作用域和模块依赖,这恰恰是网页组件最急需的功能。

    因此,CSS Modules 很容易学,因为它的规则少,同时又非常有用,可以保证某个组件的样式,不会影响到其他组件。

    图片 2

    18个你可能不相信是用CSS制作出来的东西

    2015/08/19 · CSS · 1 评论 · CSS

    原文出处: hongkiat   译文出处:9iphp   

    图片 3

    与流行的看法相反,CSS不仅仅是用来提供一个WEB页面的基本风格,以使它看起来更有吸引力。还有很多其他的事情,CSS也可以做的很好。由于它创建动画和交互的能力,CSS集合HTML以及JavaScript给WEB开发者提供了尝试不同方法的机会。

    浏览器就像一个空的画布,WEB开发者可以在这里尽情的发挥。下面是18个人们用CSS创建的又酷又有创造性的东西的例子,从原始字符到有趣的动画,有很多激励你自己将时间花费在CSS上。

    基于用户行为的图片等资源预加载

    2016/06/04 · CSS · 预加载

    原文出处: 张鑫旭(@张鑫旭)   

    零、示例库

    我为这个教程写了一个示例库,包含六个Demo。通过它们,你可以轻松学会CSS Modules。

    首先,克隆示例库。

    JavaScript

    $ git clone

    1
    $ git clone https://github.com/ruanyf/css-modules-demos.git

    然后,安装依赖。

    JavaScript

    $ cd css-modules-demos $ npm install

    1
    2
    $ cd css-modules-demos
    $ npm install

    接着,就可以运行第一个示例了。

    JavaScript

    $ npm run demo01

    1
    $ npm run demo01

    打开浏览器,访问

    1. The Simpsons

    Chris Pattle使用纯CSS创建了Simpsons家族。他把每个角色的脸部拆分成很小的形状,然后又拼接回去。他甚至给角色的眼睛添加了动画来赋予它们生命力

    图片 4

    一、图片的懒加载和预加载

    懒加载和本文要提到的预加载实际是不同的概念。

    典型的懒加载,例如本博文章的图片,当用户滚动图片进入窗体的时候,才去加载;或者用户点击选项卡,原本隐藏的图片此时再去加载,这个也称之为懒加载。

    而预加载则是,用户还没有行为发生,资源已经加载完毕,从这一定义来讲,我们传统图片啪啪啪全部加载完毕,本质上也是预加载,好处就在于,体验好啊,没有泛白或者菊花的出现。不足也很明显,那就是资源可能白白加载了,尤其视频之类的,小明打开bilibili就是来围观广告的,结果,百兆视频巴拉拉魔仙般全加载好了,搞得好像流量不要钱的样子,也是不可取的。

    那有什么办法可以把懒加载的省资源省流量和预加载良好体验结合在一起呢?有一些比较好的案例,那就是基于用户行为的资源预加载。

    一、局部作用域

    CSS的规则都是全局的,任何一个组件的样式规则,都对整个页面有效。

    产生局部作用域的唯一方法,就是使用一个独一无二的class的名字,不会与其他选择器重名。这就是 CSS Modules 的做法。

    下面是一个React组件App.js。

    JavaScript

    import React from 'react'; import style from './App.css'; export default () => { return ( <h1 className={style.title}> Hello World </h1> ); };

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import React from 'react';
    import style from './App.css';
     
    export default () => {
      return (
        <h1 className={style.title}>
          Hello World
        </h1>
      );
    };

    上面代码中,我们将样式文件App.css输入到style对象,然后引用style.title代表一个class。

    CSS

    .title { color: red; }

    1
    2
    3
    .title {
      color: red;
    }

    构建工具会将类名style.title编译成一个哈希字符串。

    XHTML

    <h1 class="_3zyde4l1yATCOkgn-DBWEL"> Hello World </h1>

    1
    2
    3
    <h1 class="_3zyde4l1yATCOkgn-DBWEL">
      Hello World
    </h1>

    App.css也会同时被编译。

    JavaScript

    ._3zyde4l1yATCOkgn-DBWEL { color: red; }

    1
    2
    3
    ._3zyde4l1yATCOkgn-DBWEL {
      color: red;
    }

    这样一来,这个类名就变成独一无二了,只对App组件有效。

    CSS Modules 提供各种插件,支持不同的构建工具。本文使用的是 Webpack 的css-loader插件,因为它对 CSS Modules 的支持最好,而且很容易使用。顺便说一下,如果你想学 Webpack,可以阅读我的教程Webpack-Demos。

    下面是这个示例的webpack.config.js。

    JavaScript

    module.exports = { entry: __dirname + '/index.js', output: { publicPath: '/', filename: './bundle.js' }, module: { loaders: [ { test: /.jsx?$/, exclude: /node_modules/, loader: 'babel', query: { presets: ['es2015', 'stage-0', 'react'] } }, { test: /.css$/, loader: "style-loader!css-loader?modules" }, ] } };

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    module.exports = {
      entry: __dirname + '/index.js',
      output: {
        publicPath: '/',
        filename: './bundle.js'
      },
      module: {
        loaders: [
          {
            test: /.jsx?$/,
            exclude: /node_modules/,
            loader: 'babel',
            query: {
              presets: ['es2015', 'stage-0', 'react']
            }
          },
          {
            test: /.css$/,
            loader: "style-loader!css-loader?modules"
          },
        ]
      }
    };

    上面代码中,关键的一行是style-loader!css-loader?modules,它在css-loader后面加了一个查询参数modules,表示打开 CSS Modules 功能。

    现在,运行这个Demo。

    JavaScript

    $ npm run demo01

    1
    $ npm run demo01

    打开 ,可以看到结果,h1标题显示为红色。

    2. Minions With Pure CSS

    如果你看过电影《Despicable Me(神偷奶爸)》,那你一定对其中的Minion(小黄人)印象深刻。Amr Zakaria用纯CSS实现了其中的几个Minion,它们会用闪烁的眼睛和友好的手势给你打招呼。

    图片 5

    二、基于用户行为的资源预加载

    前段时间做了个俗称H5的页面,共16个分页,近乎全矢量,三五请求,秒加载,除去音乐和统计脚本,100K不到,华丽的平面设计风格,浮夸的矢量动画效果,爪机直接点击此链接围观(PC浏览器会直接跳走), 如果你是桌面浏览器访问的,拿起你的手机扫下面的码子~

    图片 6

    其中,就用到了基于用户行为的预加载。

    此H5页面近乎全矢量,但实际上还是有图片使用的,例如,2007年也就是那个有烟雾canvas效果的哪一年的那个粽子,如果大家查看数据请求,会发现首屏根本就没有图片资源的请求,但是,我们体验2007年的时候,却没有任何的因图片延时加载带来的视觉上的挫顿感,为什么呢?

    那是因为,你要查看年份,你就要必须经过一个步骤,就是长按下面的“按住探索”按钮:
    图片 7

    此时,按住就是一个用户行为,他似乎宣告着,我即将进入某一年份,一些图片资源可以预加载了。所谓预加载,就是图片不一定会被用户看到,但是加载了;基于用户行为的预加载就是,虽然在用户看不到的时候加载了,但是,用户却有更大或者说很大的概率会看到此图。算是,懒加载和传统预加载中间的一种权衡策略。

    再举个更典型,更常见,更有实用价值的例子,那就是点击事件下的选项卡切换效果的预加载。

    下图所示是一个常见的选项卡:
    图片 8

    此选项卡对应面板内容是包含图片信息的,由于,选项卡是点击行为触发的切换效果,因此,后面的“美女2”和“美女3”按钮对应的图片如果不点击,用户是永远都看不到的,此时这两位美女图片就没必要加载,因为,很可能,用户不会点这两个选项卡按钮。

    因此,选项卡2和3我们需要岁图片进行懒加载处理,也就是页面载入默认不加载的。

    然后,我们通常的处理是当用户去点击选项卡按钮的时候,在对应面板呈现的时候,我们再去加载图片内容。于是,就存在这样一个不好的体验——由于内容呈现瞬时,而图片呈现是异步的,就很容易出现选项卡主体内容切换过来了,结果是个空白,过了会儿图片才出现。

    其实,我们可以基于某些行为对此图进行不一样的预加载,来提示我们的浏览体验,怎么做呢?

    我们绝大数用户都是鼠标去点击选项卡的,而点击选项卡之前会有其他一些行为发生,例如:

    mouseover按钮的容器 → mouseover按钮 → mousedown按钮等。

    于是,就给了我们机会,在click行为发生之前去预加载图片,例如,我们鼠标hover按钮的时候。一般一个用户hover一个按钮再click行为技术,说有0.5秒的时长一点都不为过吧,因为光鼠标按下再抬起就上百毫秒了。从hover到click之间的这段时间,已经足够我们图片进行预加载了。而hover到click的行为是极大概率事件。于是乎,我们通过提前捕捉用户的其他行为实现了懒加载和预加载的完美结合!

    眼见为实,您可以狠狠地点击这里:选项卡用户hover行为下的图片预加载demo

    点击选项卡,十有八九图片瞬间就呈现了,就是因为你hover的时候,图片已经去加载了。大家有兴趣可以打开控制台观察资源的加载,就可以明白上面巴拉巴拉说的hover预加载是怎么回事了。

    二、全局作用域

    CSS Modules 允许使用:global(.className)的语法,声明一个全局规则。凡是这样声明的class,都不会被编译成哈希字符串。

    App.css加入一个全局class。

    JavaScript

    .title { color: red; } :global(.title) { color: green; }

    1
    2
    3
    4
    5
    6
    7
    .title {
      color: red;
    }
     
    :global(.title) {
      color: green;
    }

    App.js使用普通的class的写法,就会引用全局class。

    JavaScript

    import React from 'react'; import styles from './App.css'; export default () => { return ( <h1 className="title"> Hello World </h1> ); };

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import React from 'react';
    import styles from './App.css';
     
    export default () => {
      return (
        <h1 className="title">
          Hello World
        </h1>
      );
    };

    运行这个示例。

    JavaScript

    $ npm run demo02

    1
    $ npm run demo02

    打开

    CSS Modules 还提供一种显式的局部作用域语法:local(.className),等同于.className,所以上面的App.css也可以写成下面这样。

    JavaScript

    :local(.title) { color: red; } :global(.title) { color: green; }

    1
    2
    3
    4
    5
    6
    7
    :local(.title) {
      color: red;
    }
     
    :global(.title) {
      color: green;
    }

    3. Broken neon sign

    这是用CSS的 text-shadow 实现破碎的霓虹灯效果的例子。把鼠标放到单词上,注意字母“c”、“n”和“i”的变化。

    图片 9

    三、用户行为与预加载其他

    其实HTML5中有原生的预加载属性,名为prefetchprerender,例如:

    <link rel="prefetch" href="(url)"/>

    1
    <link rel="prefetch" href="(url)"/>

    如果你有很大概率会访问href指向的资源,则可以加入上面的代码,浏览器会预加载一些资源,访问就会更迅速!

    兼容性如下表:

    <link rel="prefetcher" href="(url)"/>

    1
    <link rel="prefetcher" href="(url)"/>

    prerenderprefetch多了个er,有“人”的意味在里面,表示的是预加载页面,准确点就是浏览器会在后台(页面不可见)的位置预加载和渲染我们的页面,当我们真的去访问这个页面的时候,就会倏地呈现在我们面前,相比prefetch,兼容性要差一些,目前FireFox和Android都还未支持:

    抛开HTML预加载属性不谈,实际上,Chrome浏览器本身内置了网页链接的预加载,以提高网页加载速度,在设置中可以窥见到:
    图片 10

    以前叫做“预测网络操作”,现在改为“联想查询服务”,含义更加晦涩了,但是,我确定的是,和上面的选项卡例子如出一辙,对于传统的URL链接,Chrome浏览器下,当你hover该链接的时候,页面的加载已经在执行了,所谓“预测网络操作”就有预测你即将访问该链接的意味在里面;当然,现在的预加载行为可能要更加复杂和准确了。

    三、定制哈希类名

    css-loader默认的哈希算法是[hash:base64],这会将.title编译成._3zyde4l1yATCOkgn-DBWEL这样的字符串。

    webpack.config.js里面可以定制哈希字符串的格式。

    JavaScript

    module: { loaders: [ // ... { test: /.css$/, loader: "style-loader!css-loader?modules&localIdentName=[path][name]---[local]---[hash:base64:5]" }, ] }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    module: {
      loaders: [
        // ...
        {
          test: /.css$/,
          loader: "style-loader!css-loader?modules&amp;localIdentName=[path][name]---[local]---[hash:base64:5]"
        },
      ]
    }

    运行这个示例。

    JavaScript

    $ npm run demo03

    1
    $ npm run demo03

    你会发现.title被编译成了demo03-components-App—title—GpMto。

    4. Mmm… Cheese

    这是一块奶酪还是?Hugo Giraduel用CSS制作了这个3D的奶酪。我不知道你怎么认为,但是它看起来就像某种家居用品。

    图片 11

    四、结束语

    当然,用户的行为不仅局限于手指按下,或者hover。举个其他例子,搜索行为,当你在一个搜索框里面开始输入内容的时候,其实我们就可以预测,很大可能性马上会跳到搜索结果页面,此时,我们是不是可以预加载搜索页面的一些资源,这样,一回车,页面啪地一声就出现了,岂不帅呆!

    关键要有心,在性能和体验之间找出更好地解决策略。

    欢迎提供更多预加载的精彩案例!

    感谢阅读,周末愉快!

    1 赞 2 收藏 评论

    图片 12

    四、 Class 的组合

    在 CSS Modules 中,一个选择器可以继承另一个选择器的规则,这称为”组合”(“composition”)。

    在App.css中,让.title继承.className 。

    JavaScript

    .className { background-color: blue; } .title { composes: className; color: red; }

    1
    2
    3
    4
    5
    6
    7
    8
    .className {
      background-color: blue;
    }
     
    .title {
      composes: className;
      color: red;
    }

    App.js不用修改。

    JavaScript

    import React from 'react'; import style from './App.css'; export default () => { return ( <h1 className={style.title}> Hello World </h1> ); };

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import React from 'react';
    import style from './App.css';
     
    export default () => {
      return (
        <h1 className={style.title}>
          Hello World
        </h1>
      );
    };

    运行这个示例。

    JavaScript

    $ npm run demo04

    1
    $ npm run demo04

    打开

    App.css编译成下面的代码。

    JavaScript

    ._2DHwuiHWMnKTOYG45T0x34 { color: red; } ._10B-buq6_BEOTOl9urIjf8 { background-color: blue; }

    1
    2
    3
    4
    5
    6
    7
    ._2DHwuiHWMnKTOYG45T0x34 {
      color: red;
    }
     
    ._10B-buq6_BEOTOl9urIjf8 {
      background-color: blue;
    }

    相应地, h1的class也会编译成<h1 class=”_2DHwuiHWMnKTOYG45T0x34 _10B-buq6_BEOTOl9urIjf8″>。

    5. Single Element CSS character

    Hugo Giraudel的另一个作品,这次,他只用一个元素实现了8位字符。

    图片 13

    五、输入其他模块

    选择器也可以继承其他CSS文件里面的规则。

    another.css

    JavaScript

    .className { background-color: blue; }

    1
    2
    3
    .className {
      background-color: blue;
    }

    App.css可以继承another.css里面的规则。

    JavaScript

    .title { composes: className from './another.css'; color: red; }

    1
    2
    3
    4
    .title {
      composes: className from './another.css';
      color: red;
    }

    运行这个示例。

    JavaScript

    $ npm run demo05

    1
    $ npm run demo05

    打开

    6. Viking Shield

    这个一个由 LukyVj 创建的Viking盾牌。它做的太好了,以至于你很难看出它是用CSS而不是由图形编辑器做出来的。

    图片 14

    本文由金沙国际官网发布于web前端,转载请注明出处:18个你可能不相信是用CSS制作出来的东西,基于用

    关键词: