预处理器

前言 花样不断的前端,貌似多技术方案并行,已经成了家常便饭。 从大的框架开始,已经分裂react与vue派系。两者思维上虽然有相互不断的借鉴,但在大的方向思维上却是截然不同。而在react与vue的竞争以及相互较量的过程中,往往把其他的对手都干倒了,现在市场angular,jQuery等都逐步没落。 预编译css也同样,曾经也有多个派系。而后在sass与less的不断竞争中,stylus等其他的编译器也逐步退出市场。本文的重点,对比预编译css,scss与less对比。 基本介绍 先一起看看官方是如何定义或者介绍他们。 Sass 官方定义: Sass是一种基于Ruby的CSS预处理器,它可以扩展CSS语言,并添加许多其他功能,如变量、嵌套规则、Mixin、函数等。Sass文件以“.scss”扩展名保存,与标准CSS文件兼容,并且可以使用普通CSS代码和语法。Sass也有一个较早的语法格式,以“.sass”扩展名保存,使用缩进的语法来代替括号和分号,但它现在已经不那么流行了。 个人理解: sass是第一个流行的CSS预处理器,在2006年产生,这也为后续他用户量第一埋下伏笔。 Scss 官方定义: Scss也是一种基于Ruby的CSS预处理器,它与Sass有很多相似之处,但是它的语法更接近标准CSS,使用花括号和分号。它是一种非常流行的CSS预处理器,与Sass相比,它更容易学习和使用,并且与现有的CSS代码更兼容。 个人理解: Scss是Sass的一种语法格式,由2007推出。这还要从sass的规范语法说起,最典型的就是Sass使用缩进来表示代码块。这使部分使用者比较别扭。而产生了Scss,基于花括号和分号的CSS语法格式,使得它更易于阅读和理解。随着时间的推移,Scss逐渐取代了Sass作为Sass的主要语法格式。 Less 官方定义: Less是一种基于JavaScript的CSS预处理器,它与Sass和Scss有很多相似之处,但它使用类似CSS的语法,并且更容易学习和使用。Less支持变量、Mixin、嵌套规则等功能,并且可以在客户端和服务器端使用。 个人理解: Less由2009推出,也是提供了一套完整的生态链。它的语法跟sass不同。Less的学习成本更低,更容易理解和编写。此外,Less的编译速度比Sass更快。 Stylus 官方定义: Stylus是一种基于JavaScript的CSS预处理器,它与Less、Sass和Scss有很多相似之处,但它的语法非常灵活,可以自由选择使用缩进或花括号来表示嵌套和块。Stylus还支持变量、Mixin、函数等功能,并且具有非常强大的插件系统,可以轻松地扩展其功能。 个人理解: Stylus也是曾经一个比较完善的预编译语言。 但市场份额却原来越少。个人的观点,一是的学习成本高一些,有入门的门槛。而是生态链的问题,sass跟less的有较完善的生态链,而Stylus更像一个独立的东西。 PostCSS 官方定义: PostCSS不是一种独立的CSS预处理器,而是一个CSS处理工具集合,可以通过各种插件扩展其功能。PostCSS可以用于转换CSS语法、提供自动前缀、压缩CSS代码、处理嵌套规则、优化图片等。它不像其他预处理器那样提供自己的语言,而是基于现有的CSS语法。使用PostCSS可以通过插件来实现更多的自定义和灵活性,使其成为一个强大的CSS处理工具。 个人理解: 跟上述的其他的处理器不同,PostCSS不应该算是一个预处理器,但却是我们做适配,压缩等处理时的一个选择。 数据分析 市场占有率分析 我们借助npm官网统计工具对比,查看less与scss的数据量对比: 链接: npm-stat.com/charts.html… npm-stat.com/charts.html… 如上图,左侧为less的数据,右侧为scss的数据。 我们可以通过统计清晰的看到。单单一个sass的下载量,基本达到less的两倍以上。此处还不包含sass阵营的其他工具,包括node-scss,dart-scss的下载量。 可以得出结论:sass的使用量约为less的几倍。(但此处有个值得一提的地方:统计为全球的用户量的统计,并非针对国内) 组件库选择分析 从上述的数据中,我们了解到sass的使用量较多,但是国内出名的组件库,却是less居多。毕竟组件库,也代表我们的使用习惯之一。我们一起看看组件库的选择。 ant design 选择了Less,地址:www.antdv.com/docs/vue/cu… element 选择了scss,地址:element.eleme.io/#/zh-CN/com… varlet 选择了Less,地址:varlet.gitee.io/varlet-ui/#… vant 选择了Less,地址:vant-contrib.gitee.io/vant/v3/#/z… 结论:关于组件库的选择,Less还是占大多数,当然Scss也是部分组件库的选择。 个人分析 相同点 都属于css语法编译的工具。 工具提供的方法也很多雷同。如都支持嵌套,都支持混合器(Mixin),都支持扩展(Extend),都支持颜色函数,都支持变量等等。 生态链都一致丰富,常用构建工具都基本支持,如webpack,vite, rollup等。 社区支持都强,提供了大量的插件、工具和资源,可以帮助开发者更好地使用Sass。 目的性也一致,都提高了CSS编写的效率和可维护性而产生。 不同点 部分语法不同,如Sass 和 SCSS 中的变量使用 $ 符号进行定义和引用,而不是 Less 中使用的 @ 符号 Sass 和 Scss 还提供了一些 Less 没有的特性,例如控制流语句和继承等。 Sass 和 Scss 是基于Ruby或者Dart,Node的预处理器,他需要借助机器安装这些环境来支持。而Less, 是基于JavaScript的CSS预处理器,引入一段JS即可编译,有浏览器还是服务端,他都能编译。 虽然都有强大的社区,生态链。但总体还是Scss更丰富一些。 特性分析 Node-Sass 在国内有一定的兼容性问题,但是基于Dart 语言编写的 Dart Sass以及解决了这个问题。还在使用Node-Sass的建议切换Dart Sass。 Less 的语法相对于 Sass 更加简洁,易于学习和理解。这使得 Less 在国内开发者中更受欢迎,尤其是对于那些不太熟悉预处理器语言的开发者来说。 Sass的阵营更丰富,使用量更高一些,市场份额也更加稳定。除了发家早,这也得益于生态圈,例如 Bootstrap、Foundation、Bulma、Vue.js 等,都在曾经的版本自带了Sass。 国内组件库,还是Less居多,很多"高级前端", 都觉得less 一直都比 sass 要稳定。至少不会出现Node版本,Python版本不一致等问题。 结语 所以Sass与Less谁更强?估计短期还是分不出成败。 ...

October 10, 2024

display

一、display属性介绍 display 属性规定元素应该生成的框的类型。 以下是一些关于display比较常用的属性值: 值 描述 none 元素不会显示 block 此元素将显示为块级元素,此元素前后会带有换行符。 inline 默认。此元素会被显示为内联元素,元素前后没有换行符。 line-block 行内块元素。(CSS2.1 新增的值)[IE6/7不支持] list-item 此元素会作为列表显示。 inline-table 此元素会作为内联表格来显示(类似 table),表格前后没有换行符。 table 此元素会作为块级表格来显示(类似 table),表格前后带有换行符。 table-row 此元素会作为一个表格行显示(类似 tr)。 table-cell 此元素会作为一个表格单元格显示(类似 td 和 th). inherit 规定应该从父元素继承 display 属性的值。 其中我们在前端开发中比较常用的属性值一般是none、block、inline、inline-block。我将按顺序为这些属性值一一讲解。 二、display:none 将元素与其子元素从普通文档流中移除。这时文档的渲染就像元素从来没有存在过一样,也就是说它所占据的空间消失了。元素的内容也会消失。 三、display:block block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度; block元素可以设置margin和padding属性; block元素可以设置width、height属性。 块级元素即使设置了宽度,仍然是独占一行。块级元素在设置宽度的情况下,是通过自定义margin-right来自动填满一行,这个时候你设置margin-right是无效的;块级元素在没有设置宽度的时候,margin-right会生效,块级元素的width通过自定义在自动填满一行。 块级元素在设置宽度的情况下,是通过自定义margin-right来自动填满一行,这个时候你设置margin-right是无效的,如下图所示: 块级元素在没有设置宽度的时候,margin-right会生效,块级元素的width通过自定义在自动填满一行,如下图所示: 四、display:inline inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化; inline元素设置width、height属性无效; inline元素的margin和padding属性,水平方向的padding-left、padding-right、margin-left、margin-right都产生边距效果;但竖直方向的padding-top、padding-bottom、margin-top、margin-bottom不会产生边距效果。 如下图所示: 五、display:inline-block 将对象呈现为inline对象,但是对象的内容作为block对象呈现,之后的内联对象会被排列在同一行内。就是集合了block和inline的全部优点。width、height、margin、padding设置都会生效。 如下图所示: 原文:https://juejin.cn/post/6844903781566513160 常见考点 1. 基本概念 请简述 CSS 中的 display 属性及其作用。 display 属性的常见值有哪些?请列举并解释其含义。 例如:block、inline、inline-block、flex、grid、none 等。 2. display: block 什么是 display: block?它会给元素带来哪些表现? 一个块级元素通常具有哪些特点?例如:它的宽度会如何变化?它是否会换行? 3. display: inline 什么是 display: inline?它与 display: block 有什么不同? 内联元素如何处理宽度和高度?它们是否会占据整个可用宽度? 如何让一个内联元素变得像块级元素一样换行? 4. display: inline-block 什么是 display: inline-block?它结合了 inline 和 block 的哪些特点? 使用 inline-block 时,元素的宽高如何影响布局? inline-block 元素如何与其他元素对齐? 5. display: none 请解释 display: none 的作用与 visibility: hidden 的区别。 使用 display: none 会有什么样的表现?例如,它对页面布局有何影响? 当你将一个元素的 display 设置为 none 时,它会消失,但仍然存在于 DOM 中。如何通过 JavaScript 使其重新显示? 6. display: flex display: flex 是什么?它通常用来实现什么样的布局效果? 在使用 flex 布局时,如何控制子元素的排列方向、对齐方式等? justify-content、align-items、flex-direction 等 Flexbox 属性的作用是什么? 7. display: grid 什么是 display: grid 布局?它与 flex 布局有何区别? 在 grid 布局中,如何设置行和列的大小?如何控制子元素的位置? 请举例说明 grid-template-columns、grid-template-rows、grid-gap 等属性的使用方法。 8. display: table 什么是 display: table,它如何模仿传统的 HTML <table> 元素? 使用 display: table 时,如何控制表格的行和列布局? display: table-row、display: table-cell 和 display: table-caption 的作用是什么? 9. 布局模型对比:block vs inline vs flex vs grid 你如何选择使用 block、inline、flex 或 grid 布局? 在实际项目中,什么时候使用 flex 布局,什么时候使用 grid 布局? 请比较 flex 和 grid 布局的优缺点及应用场景。 10. display 与其他布局属性 在使用 display: flex 或 display: grid 布局时,如何与其他布局属性(如 position、float 等)配合使用? 如何解决使用 display: flex 或 display: grid 布局时遇到的常见布局问题,例如元素溢出、对齐等? 11. display: none 与性能 display: none 对页面性能有何影响?如何通过 JavaScript 动态控制显示/隐藏元素以提高性能? 12. display: contents 什么是 display: contents?它是如何工作的?它与其他 display 值有什么区别? 请举例说明 display: contents 的应用场景及可能的问题。 13. display 的继承性 display 属性是否继承?如果没有,如何通过样式继承的方式控制多个元素的 display 属性? 你如何在多个嵌套元素中保持一致的布局设置? 14. display 的可见性与布局 display 属性会影响元素的布局、渲染和可见性。请简要解释 display: none 和 visibility: hidden 的区别,它们对页面的影响不同吗? 15. 实际应用 请描述一个你在实际开发中使用 display 属性解决布局问题的案例。 如果需要在一个响应式设计中调整元素的布局,如何根据屏幕尺寸调整 display 属性?

October 10, 2024

变量

一、变量的声明 声明变量的时候,变量名前面要加两根连词线(--)。 body { --foo: #7F583F; --bar: #F7EFD2; } 上面代码中,body选择器里面声明了两个变量:--foo和--bar。 它们与color、font-size等正式属性没有什么不同,只是没有默认含义。所以 CSS 变量(CSS variable)又叫做**“CSS 自定义属性”**(CSS custom properties)。因为变量与自定义的 CSS 属性其实是一回事。 你可能会问,为什么选择两根连词线(--)表示变量?因为$foo被 Sass 用掉了,@foo被 Less 用掉了。为了不产生冲突,官方的 CSS 变量就改用两根连词线了。 各种值都可以放入 CSS 变量。 :root{ --main-color: #4d4e53; --main-bg: rgb(255, 255, 255); --logo-border-color: rebeccapurple; --header-height: 68px; --content-padding: 10px 20px; --base-line-height: 1.428571429; --transition-duration: .35s; --external-link: "external link"; --margin-top: calc(2vh + 20px); } 变量名大小写敏感,--header-color和--Header-Color是两个不同变量。 二、var() 函数 var()函数用于读取变量。 a { color: var(--foo); text-decoration-color: var(--bar); } var()函数还可以使用第二个参数,表示变量的默认值。如果该变量不存在,就会使用这个默认值。 color: var(--foo, #7F583F); 第二个参数不处理内部的逗号或空格,都视作参数的一部分。 ...

October 10, 2024

单位

说起CSS单位,我们最熟悉的可能就是像素单位(px),它是一个绝对单位,也就是说一个10px的文字,放在哪里都是一样大的。单位可以影响颜色、距离、尺寸等一系列的属性。CSS中单位的形式有很多种,下面就分别来看看这些单位。 1. 相对单位 相对单位就是相对于另一个长度的长度。CSS中的相对单位主要分为两大类: 字体相对单位,他们都是根据font-size来进行计算的。常见的字体相对单位有:em、rem、ex、ch; 视窗相对单位,他们都是根据视窗大小来决定的。常见的视窗相对单位有vw、vh、vmax、vmin。 下面就来看看这些常见的CSS单位。 (1)em 和 rem em是最常见的相对长度单位,适合基于特定的字号进行排版。根据CSS的规定,1em 等于元素的font-size属性的值。 em 是相对于父元素的字体大小进行计算的。如果当前对行内文本的字体尺寸未进行显示设置,则相对于浏览器的默认字体尺寸。当DOM元素嵌套加深时,并且同时给很多层级显式的设置了font-size的值的单位是em,那么就需要层层计算,复杂度会很高。 当然,上面的这个说法是不严谨 的。来看一个例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .parent { width: 300px; height: 300px; font-size: 20px; } .child { border: 1em solid ; } </style> </head> <body> <div class="parent"> <div class="child"> 子元素 </div> </div> </body> </html> 这里给父元素设置了字体大小为20px,然后给子元素的border宽度设置为1em,这时,子元素的border值为20px,确实是相对于父元素的字体大小设置的: 那如果我们给子元素的字体设置为30px: .child { font-size: 30px; border: 1em solid ; } 这时可以看到,子元素的边框宽度就是30px,它是相对自己大小进行计算的: 所以,可以得出结论:如果自身元素是没有设置字体大小的,那么就会根据其父元素的字体大小作为参照去计算,如果元素本身已经设置了字体,那么就会基于自身的字体大小进行计算。 em单位除了可以作用于 font-size之外,还可以运用于其他使用长度的属性,比如border-width、width、height、margin、padding、text-shadow等。 所以,em的使用还是比较复杂的,它可能会继承任意一级父元素的字体大小。需要谨慎使用。 rem相对于em就简单了很多,它是根据页面的根元素(根元素)的字体大小来计算的。来对上面的例子进行修改: .child { font-size: 30px; border: 1rem solid ; } html { font-size: 25px; } 效果如下,可以看到,边框的长度变成了25px,它是根据根元素html的字体大小计算的: ...

October 10, 2024

浮动、清除浮动和BFC

浮动、清除浮动和BFC是前端开发中常见的概念,它们对于页面布局及美化至关重要。 浮动 在网页设计中,浮动是一种常见的布局技术,可以让元素脱离文档流,我们来看看它有什么作用吧! 使文字环绕 代码示例如下: html结构: <div class="box"></div> <div class="text">一段文字</div> css样式: .box{ width: 200px; height: 200px; background-color: coral; } 若不加浮动,则页面是这样的效果: 但若是在box加上float: left;(向左浮动),则能使文字环绕box这个盒子: .box{ width: 200px; height: 200px; background-color: coral; float: left; } 让块级元素同行显示 块级元素本身是占据一整行的,但浮动能让多个块级元素处于同一行,示例如下: 若不加浮动,则多个块级元素各自占据一行: html结构: <ul> <li>1</li> <li>2</li> <li>3</li> </ul> css样式: *{ margin: 0; padding: 0; } ul li{ list-style:none; width: 200px; height: 100px; font-size: 16px; } li:nth-child(1){/*子容器选择器 */ background-color: rgb(227, 149, 149); } li:nth-child(2){ background-color: rgb(205, 139, 197); } li:nth-child(3){ background-color: rgb(145, 212, 227); } 页面如图: ...

October 10, 2024

布局技巧

1、普通流(常规流) 文档流(流式布局)分为 普通流、定位流、浮动流,不同流内的块级元素和行内元素的布局方式不同,布局方式用 FC(格式化上下文,含有 块级格式化上下文、内联格式化上下文、层叠格式化上下文、灵活格式化上下文等)来命名; 普通流中的布局规则默认为块级盒子从上到下,垂直排列;内联盒子从左到右,水平排列等;(书写模式(writing-mode)会对流布局产生影响; 2、position 属性有: static:默认值,元素依然按照 普通流 的定位规则定位; relative absolute sticky fixed 使用 position 会脱离常规流,成为定位流,并有其自己的定位规则; 3、float 属性有: left right none inherit 使用 float 会脱离常规流,成为浮动流,并有其自己的定位规则; 4、table 使用 HTML 标签来布局; <table> <tr> <th></th> <th></th> </tr> <tr> <td></td> <td></td> </tr> </table> 5、flex 2009 年 W3C 提供的方案,注意只有 IE 10+ 支持 flex; 重要的概念:flex 容器,flex 项目,主轴,交叉轴; 设置某个元素的属性 display: flex;,此元素就成了 flex 容器,flex 容器内的元素是 flex 项目; flex 容器的属性: flex-direction flex-wrap flex-flow justify-content align-items align-content flex 项目的属性 flex (flex-grow、flex-shrink、flex-basis) order align-self 6、grid 二维布局方式,相对于使用 HTML 结构实现的 table 布局,grid 布局都是在 CSS 中完成的; ...

October 10, 2024

background

引言 在日常前端开发中,经常需要进行背景或背景图的处理。但是大多数前端er并未真正清楚背景的正确使用方式。经过本章的学习,相信你一定可以解决99%的背景处理问题。 一:简单使用 背景颜色和背景图片是可以共同出现的 div { width: 300px; height: 300px; background-color: red; background-image: url(./imgs/1.jpg); background-repeat: no-repeat; } 页面展示 一:background-repeat background-repeat决定背景图片的平铺方式 属性值 background-repeat:repeat (默认值) background-repeat:no-repeat (不平铺) background-repeat:repeat-x (水平方向平铺) background-repeat:repeat-y (垂直方向平铺) 1. repeat 默认情况下,如果背景图片不能铺满整个盒子时,系统会在水平和垂直方向同时平铺直到覆盖整个盒子 div { width: 300px; height: 300px; background-color: red; background-image: url(./imgs/1.jpg); background-repeat: repeat; } 2.repeat-x 如果背景图片不能将盒子的水平方向铺满,则在水平方向采取平铺处理直到铺满盒子的水平方向。 div { width: 300px; height: 300px; background-color: red; background-image: url(./imgs/1.jpg); background-repeat: repeat-x; } 3.repeat-y 如果背景图片不能将盒子的垂直方向铺满,则在垂直方向采取平铺处理直到铺满盒子的垂直方向。 div { width: 300px; height: 300px; background-color: red; background-image: url(./imgs/1.jpg); background-repeat: repeat-y; } 二:background-position background-positiont决定背景图片在盒子区域的定位位置。其方位由水平和垂直决定 1.px设置 px决定了背景图片在盒子水平和垂直方向偏移指定px的距离。 div { width: 300px; height: 300px; background-color: red; background-image: url(./imgs/1.jpg); background-repeat: no-repeat; background-position: 100px 100px; } ...

October 10, 2024

font

什么是 font 属性? 在CSS中, font 属性是一个简写属性,用于设置字体的多个相关属性,包括字体大小、字体样式、字体粗细、字体系列等。使用 font 属性可以方便地在一个声明中设置多个字体相关的样式。 font 属性的语法 font: [font-style] [font-variant] [font-weight] [font-size] [line-height] [font-family]; 各个属性的详细说明 font-style:设置字体的样式。 取值: normal:正常字体(默认值)。 italic:斜体字。 oblique:倾斜字体。 font-variant:设置字体的变体。 取值: normal:正常(默认值)。 small-caps:小型大写字母。 font-weight:设置字体的粗细。 取值: normal:正常粗细(默认值)。 bold:加粗。 bolder:比父元素更粗。 lighter:比父元素更细。 数值:可以使用 100 到 900 的数值,100 为最细,900 为最粗。 font-size:设置字体的大小。 取值: 可以使用绝对单位(如 px、 pt)或相对单位(如 em、 rem、 %)。 line-height:设置行高。 取值: 可以使用数值、单位(如 px、 em)或百分比。 font-family:设置字体系列。 取值: 可以指定多个字体名称,以逗号分隔,浏览器将使用第一个可用的字体。 例如: "Arial", "Helvetica", sans-serif。 使用 font 属性的注意事项 font 属性必须按照特定的顺序书写,尤其是 font-size 和 font-family,它们是必需的。 如果使用 font 属性,其他相关的字体属性(如 font-size 和 font-family)不能单独设置。 实例:使用 font 属性设置文本样式 HTML 代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Font 属性示例</title> <link rel="stylesheet" href="styles.css"> </head> <body> <h1 class="title">欢迎来到我的网站</h1> <p class="description">这是一个关于CSS字体属性的示例,展示如何使用font属性设置文本样式。</p> </body> </html> CSS 代码(styles.css) body { font-family: Arial, sans-serif; /* 设置全局字体 */ } .title { font: bold 24px/1.5 "Helvetica Neue", Arial, sans-serif; /* 设置标题字体样式 */ color: #333; /* 字体颜色 */ } .description { font: italic normal 16px/1.8 "Georgia", serif; /* 设置描述文本字体样式 */ color: #666; /* 字体颜色 */ } 解释 HTML结构:我们创建了一个包含标题和描述的简单网页。 CSS样式: 在 .title 类中,使用 font 属性设置了字体为加粗、24px大、行高为1.5、字体系列为 "Helvetica Neue",后备字体为 Arial 和无衬线字体。 在 .description 类中,使用 font 属性设置了字体为斜体、正常粗细、16px大、行高为1.8、字体系列为 "Georgia",后备字体为衬线字体。 结果 通过以上代码,浏览器将展示一个标题和描述文本,标题为加粗大字体,描述为斜体较小字体。这样可以清晰地展示不同文本的样式和视觉层次感。 ...

October 10, 2024

优先级

在前端面试中,经常会遇到CSS选择器的问题三连: 说一下CSS的选择器有哪些 优先级是怎样的 权重计算方式 今天就来给大家介绍选择器的优先级和权重计算方式。 优先级是什么?有什么用? 先提出一个问题:如果一个元素通过多种方式设置了字体大小,那么浏览器在最后渲染时会使用哪个属性值呢? 其实,浏览器会通过优先级来判断哪些属性值与一个元素最为相关,从而在该元素上应用这些属性值。优先级是基于不同种类选择器组成的匹配规则。 换种说法,优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器 中的 每一种选择器类型的数值 决定。 总结一下: 权重决定了你css规则怎样被浏览器解析直到生效,css权重关系到你的css规则是怎样显示的。 当很多的样式被应用到某一个元素上时,权重决定哪种样式生效。 每个选择器都有自己的权重。你的每条css规则,都包含一个权重级别。 这个级别是由不同的选择器加权计算的,通过权重,不同的样式最终会作用到你的网页中 。 如果两个选择器同时作用到一个元素上,权重高者生效。 权重的计算规则 接着介绍权重的计算规则: 第一优先级:!important会覆盖页面内任何位置的元素样式 内联样式,如style="color: green",权值为1000 ID选择器,如#app,权值为0100 类、伪类、属性选择器,如.foo, :first-child, div[class="foo"],权值为0010 标签、伪元素选择器,如div::first-line,权值为0001 通配符、子类选择器、兄弟选择器,如*, >, +,权值为0000 继承的样式没有权值 权值计算公式: 权值 = 第一等级选择器 x 个数,第二等级选择器 x 个数,第三等级选择器 x 个数,第四等级选择器 x 个数 比如: 选择器 千位 百位 十位 个位 优先级 h1 0 0 0 1 0001 h1 + p::first-letter 0 0 0 3 0003 li > a[href*=“en-US”] > .inline-warning 0 0 2 2 0022 #identifier 0 1 0 0 0100 内联样式 1 0 0 0 1000 权重的比较规则 当两个权值进行比较的时候,是从高到低逐级将等级位上的权重值(如 权值 1,0,0,0 对应–> 第一等级权重值,第二等级权重值,第三等级权重值,第四等级权重值)来进行比较的,而不是简单的 1000个数 + 100个数 + 10个数 + 1个数 的总和来进行比较的,换句话说,低等级的选择器,个数再多也不会越等级超过高等级的选择器的优先级的。 ...

October 10, 2024

Web Storage

一、 简介 浏览器本地存储是指浏览器提供的一种机制,允许 Web 应用程序在浏览器端存储数据,以便在用户下次访问时可以快速获取和使用这些数据。一共两种存储方式:localStorage 和 sessionStorage。下面介绍下两种缓存的特性和在内部平台的一些应用。 二、localStorage 和 sessionStorage 2.1、区别 localStorage 和 sessionStorage 的主要区别是生命周期,具体区别如下: localStorage sessionStorage 生命周期 持久化存储:除非自行删除或清除缓存,否则一直存在 会话级别的存储:浏览器标签页或窗口关闭 作用域 相同浏览器,同域名,不同标签,不同窗口 相同浏览器,同域名,同源窗口 获取方式 window.localStorage window.sessionStorage 存储容量 5M 5M 容量限制的目的是防止滥用本地存储空间,导致用户浏览器变慢。 2.2、浏览器兼容性 1)现在的浏览器基本上都是支持这两种 Storage 特性的。各浏览器支持版本如下: Chrome Firefox IE Opera Safari Android Opera Mobile Safari Mobile localStorage 4 3.5 8 10.5 4 2.1 11 iOS 3.2 sessionStorage 5 2 8 10.5 4 2.1 11 iOS 3.2 2)如果使用的是老式浏览器,比如Internet Explorer 6、7 或者其他,就需要在使用前检测浏览器是否支持本地存储或者是否被禁用。以 localStorage 为例: ...

October 9, 2024