热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【前端知识体系CSS相关】CSS工程化方案

1.如何解决CSS的模块化问题?1.使用Less,Sass等CSS预处理器2.使用PostCSS插件(postcssimportprecss)3.使用webpac

1.如何解决CSS的模块化问题?

  1. 使用Less,Sass等CSS预处理器
  2. 使用PostCSS插件(postcss-import/precss)
  3. 使用webpack处理CSS(css-loader + style-loader)

2.PostCSS是什么?

  1. PostCSS是一个平台,具体要取决于这个平台上面的插件可以做什么
  2. 常用的插件如下
        //  1. 可以添加属性前缀,适应所有的浏览器
        const autoprefixer = require('autoprefixer');
        // 2. 将所有的import 导入进来的模块全部合并为一个文件
         const atImport = require('postcss-import');
        // 3.  实现代码的压缩优化
         const cssnano = require('postcss-cssnano');
        // 4. cssnext提前使用CSS的高级语法
         const cssnext = require('postcss-cssnext');
        // 5. precss 类似于sass的语法处理
         const precss = require('precss')

3.import实现模块的合并(模块分开,提前合并)
4.CSS语法检查,兼容性检查
5.压缩文件

3.CSS modules是什么?如何使用?

  1. 解决类名冲突的问题
  2. 使用PostCSS或者Webpack等构建工具进行编译
  3. 在HTML模板中使用编译过程产生的类名(对象.类名的方式来获取)

4.为什么使用JS来引用,加载CSS?

  1. JS作为入口,管理资源具有天然优势(HTML,CSS本身是无法管理模块和资源的)
  2. 将组件的结果、样式、行为封装到一起,增强组件内聚(减少代码耦合)
  3. 可以做更多的处理(webpack,使用CSS Modules 解决了命名的冲突问题)

5. PostCSS的实现原理说一下?

[!NOTE]
PostCSS是一个通过JS插件转换样式表的工具,它本身并不是一门新的CSS语言,而是一个平台或者是生态心态,提供插件扩展服务即JS API,开发者可以根据这些接口,定制开发插件,
目前比较流行的插件工具如:Autoprefixer 、Stylelint 、CSSnano。

5.1 解析步骤

  1. 将CSS解析成抽象语法树(AST树)
  2. 将AST树”传递”给任意数量的插件处理
  3. 将处理完毕的AST树重新转换成字符串

5.2 处理机制

Source string → Tokenizer → Parser → AST → Processor → Stringifier

5.2.1 Tokenizer

[!NOTE]
将源css字符串进行分词

举个例子:
.className { color: #FFF; }
通过Tokenizer后结果如下:

[
    ["word", ".className", 1, 1, 1, 10]
    ["space", " "]
    ["{", "{", 1, 12]
    ["space", " "]
    ["word", "color", 1, 14, 1, 18]
    [":", ":", 1, 19]
    ["space", " "]
    ["word", "#FFF" , 1, 21, 1, 23]
    [";", ";", 1, 24]
    ["space", " "]
    ["}", "}", 1, 26]
]

以word类型为例,参数如下:

const token = [
     // token 的类型,如word、space、comment
    'word',
 
    // 匹配到的词名称
    '.className',
 
    // 代表该词开始位置的row以及column,但像 type为`space`的属性没有该值
    1, 1,
 
    // 代表该词结束位置的row以及column,
    1, 10
]

5.2.2 Parser

[!NOTE]
经过Tokenizer之后,需要Parser将结果初始化为AST

this.root = {
    type: 'root',
    source: { input: {css: ".className { color: #FFF; }", hasBOM: false, id: ""},
                   start: { line: 1, column: 1 } ,
                  end: { line: 1, column: 27 }
    },
   raws:{after: "", semicolon: false}
   nodes // 子元素
}

5.2.3 Processor

经过AST之后,PostCSS提供了大量JS API给插件用

5.2.4 Stringifier

插件处理后,比如加浏览器前缀,会被重新Stringifier.stringify为一般CSS。

6.谈一下你对前端工程化的理解?

参考博客:

  • https://www.cnblogs.com/fsyz/p/8274727.html
  • https://www.cnblogs.com/onebox/p/9570518.html

推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • 解决文件名过长下载失败问题的jQuery方案
    本文介绍了使用jQuery解决文件名过长导致下载失败的问题。原方案中存在文件名部分丢失的问题,通过动态生成隐藏域表单并提交的方式来解决。详细的解决方案和代码示例在文章中给出。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
author-avatar
手机用户2502918445
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有