搜索
首页web前端css教程通过@Extend在SASS中的继承的好处

通过@Extend在SASS中的继承的好处

钥匙要点

  • SASS的@Extend功能允许类互相共享属性,简化了CSS样式表的组织,并使大型网站更易于风格。
  • > @Extend功能可以减少CSS样式表中的重复,并使HTML类清洁,节省开发人员的时间和精力,并使CSS结构更有条理,更易于维护。 但是,在使用@Extend时,请谨慎行事,因为它可以大大提高CSS文件大小和影响性能,如果不小时使用。仅当继承类直接与所继承的对象相关时,才应使用它。 SASS是对CSS的宝贵扩展,可以使其更清洁,结构良好且易于开发和维护。建议那些以前从未尝试过的人,但应仔细地使用它以避免潜在的陷阱。
  • 组织CSS样式表对于有效地设计大型网站已经至关重要,但是我们项目中的样式表越来越大,更复杂,更难维护。这是Sass来使所有内容变得更简单的地方。
  • 对于尚未探索Sass的人来说,这是CSS的扩展。它为我们提供了本机CS中不存在的功能,例如表达式,变量,嵌套,Mixins(Sass的函数名称),继承等等。 在本文中,我将使用@Extend概述Sass中的继承。我将介绍此功能在自己的项目中使用时带来的优势和经验。重要的是要注意,@Extend可能会被滥用,雨果·吉罗(Hugo Giraudel)在Sitepoint上甚至写了一篇文章,说明了为什么您应该避免使用Sass @extend。因此请注意,@Extend可能是一个有争议的主题。
  • > 观看Atoz:Sass 通过信函学习萨斯
  • 观看此课程 观看此课程 在以下示例中,我将使用SCSS语法。这是包含CSS的所有功能和结构的语法,并具有SASS的其他功能。
  • 什么是@extend?

@Extend是SASS的功能,允许类彼此共享一组属性。 SASS中@Extend class的选择器将在其延伸的类旁边包含其选择器,从而导致逗号分隔的列表。>

它的语法看起来像:

>用法

通过@Extend在SASS中的继承的好处使用@extend看起来像:

这是:

>

在上面的示例中,我定义了.foo和.bar,它们具有以下功能:>
  • .bar从.foo继承,包含父级的所有属性.foo。
  • .bar通过添加属性背景色来扩展.foo。
知道基础知识,我们现在将查看一些用例

使用@extend

>用例1:重复

在组合CSS时,很难避免

重复类之间的属性。这可以使您的样式表更加复杂。例如:

正如我们在上面的示例中所看到的。farkfast,。-ornunch和.dinner包含具有相同值的属性,边框,盒子阴影,边距和填充物。这些属性是重复的,使我们的代码看起来很混乱,所以让我们用@Extend重写:

<span><span>@extend .class-name;</span></span>
在上面重写的CSS中,我们可以看到,使用SASS可以帮助单独使用SASS更加干净。

>

请参阅codepen上的SCSS(@sitepoint)中SCSS中属性的笔复制。
<span><span>.foo</span> {
</span>  <span>color: black;
</span>  <span>border: 1px solid black;
</span><span>}
</span>
<span><span>.bar</span> {
</span>  <span><span>@extend .foo;</span>
</span>  <span>background-color: red;
</span><span>}</span>

案例2:将多个类移出HTML

通常在设计一个页面时,通常会有一个类别具有另一个类的所有样式的情况。我们经常通过在html中使用多个类名来处理这种情况。

>

我们的CSS看起来像:

我们的html for tht css:

<span><span>.foo, .bar</span> {
</span>  <span>color: black;
</span>  <span>border: 1px solid black;
</span><span>}
</span>
<span><span>.bar</span> {
</span>  <span>background-color: red;
</span><span>}</span>
在上面的示例中,我们的
中有两个类。想象一下,如果我们有几个课程,这将是多么混乱:

>

<span><span>.breakfast</span> {
</span>  <span>color: #333;
</span>  <span>border: 1px solid #bbb;
</span>  <span>box-shadow: 1px 1px 0 #ddd;
</span>  <span>margin: 0 0 10px;
</span>  <span>padding: 15px;
</span><span>}
</span>
<span><span>.lunch</span> {
</span>  <span>background-color: yellow;
</span>  <span>color: #333;
</span>  <span>border: 1px solid #bbb;
</span>  <span>box-shadow: 1px 1px 0 #ddd;
</span>  <span>margin: 0 0 10px;
</span>  <span>padding: 15px;
</span><span>}
</span>
<span><span>.dinner</span> {
</span>  <span>background-color: orange;
</span>  <span>color: #333;
</span>  <span>border: 1px solid #bbb;
</span>  <span>box-shadow: 1px 1px 0 #ddd;
</span>  <span>margin: 0 0 10px;
</span>  <span>padding: 15px;
</span><span>}</span>
上面的HTML代码可能变得非常复杂。一些网络开发人员喜欢这种方式,但是我更喜欢在我的Sass样式中继承:>

现在,我们的HTML看起来像:

<span><span>.meal-box</span> {
</span>  <span>color: #333;
</span>  <span>border: 1px solid #bbb;
</span>  <span>box-shadow: 1px 1px 0 #ddd;
</span>  <span>margin: 0 0 10px;
</span>  <span>padding: 15px;
</span><span>}
</span>
<span><span>.breakfast</span> {
</span>  <span><span>@extend .meal-box;</span>
</span><span>}
</span>
<span><span>.lunch</span> {
</span>  <span><span>@extend .meal-box;</span>
</span>  <span>background-color: yellow;
</span><span>}
</span>
<span><span>.dinner</span> {
</span>  <span><span>@extend .meal-box;</span>
</span>  <span>background-color: orange;
</span><span>}</span>
这次我们只需要一个类。班级定义的所有样式也适用于class .strawberry-candy,现在我们的html代码变得更加干净。

>请参阅codepen上的@extend(@sitepoint)的pen将多个类移出html。
<span><span>.candy</span> {
</span>  <span>background-color: black;
</span>  <span>border: 1px solid red;
</span>  <span>box-shadow: 1px 1px 0 #ddd;
</span>  <span>padding: 15px;
</span><span>}
</span>
<span><span>.strawberry-candy</span> {
</span>  <span>background-color: #ff6666;
</span>  <span>color: white;
</span><span>}</span>
>
<span><span><span><div> class<span>="candy strawberry-candy"</span>>
  This is the strawberry candy!
<span><span><span></span></span></span>
</div></span>></span></span>
案例3:扩展复杂的选择器

类选择器并不是唯一可以扩展的东西。我们还可以将复杂的选择器扩展到一个元素中,例如:悬停,.parentClass.ChildClass等。例如:

这是:

>

然后我们可以在HTML中使用的

>:
<span><span><span><div> class<span>="candy strawberry-candy sugar-free-candy free-candy"</span>>
  This is just an example
<span><span><span></span></span></span>
</div></span>></span></span>
>

>请参阅codepen上的@extend(@sitepoint)的@extend的复杂选择器。
<span><span>.candy</span> {
</span>  <span>background-color: black;
</span>  <span>border: 1px solid red;
</span>  <span>box-shadow: 1px 1px 0 #ddd;
</span>  <span>padding: 15px;
</span><span>}
</span>
<span><span>.strawberry-candy</span> {
</span>  <span><span>@extend .candy;</span>
</span>  <span>background-color: #ff6666;
</span>  <span>color: white;
</span><span>}</span>

@extend

的优势
<span><span><span><div> class<span>="strawberry-candy"</span>>
  This is the very sweet candy!
<span><span><span></span></span></span>
</div></span>></span></span>
>浏览上面的示例,我们可以通过@Extend看到继承的几个优势。这些包括:

清洁器HTML类

正如您在第二个案例研究中可以看到的那样,在一个元素中使用如此多的类,如果您遇到问题,则很难确定根本原因。 HTML标签的结构也看起来不太好且干净。

> 从我的角度来看,在制作好产品时,我们不仅要考虑最终用户的观点,而且还要考虑我们开发策略的质量。因此,@Extend帮助我们在每个HTML元素中以更干净的方式构造我们的课程。>

降低CSS

的重复 在Web开发中,我们在CSS样式中始终有一些重复。因此,重复使用书面CSS源代码可能是非常必要的。 @Extend可以帮助我们在适当且更清洁的情况下重复使用CSS。

节省时间和精力

有两个上述优势,开发人员可以在开发过程中节省时间和精力。

>开发人员可以将CSS重复使用各种元素,减少找到CSS问题根本原因并使CSS结构良好而干净的工作所需的精力。

> 但是,使用@Extend并非没有危险。仅当仔细使用@Extend时,上述优势仅适用 - 可以过度使用 @extend,从而导致相反的效果。

@extend

的危险

>我已经在自己的项目中应用@Extend,使用@Extend时需要谨慎。你必须小心。

@Extend可以大大增加您的CSS文件大小,并在不小心使用时会影响CSS的性能。在这样的情况下,我感到痛苦,花了很多时间重构我的Sass使用@Extend。这是我最初错误地使用@Extend的一个示例:

>

>示例:

被编译为:

在此示例中,.base-css是一个基于它的许多继承类的类。如果您查看示例,您可以看到继承的类无关。我的按钮和.btn为我的页脚提供了.btn。如果我有100个从.BASE-CSS继承的类,则具有.base-CSS特性的选择器将增加。这显着,不必要地使我们的CSS最终结果复杂化。此外,这使得检查每个选择器的属性更加困难。

>

>重新分解我的sass后,我意识到只有在继承类直接与我们继承的对象有关时,我们才应该使用@Extend。它应该是对象或样式的变体,而不是许多无关元素的笼统规则。为了像我上面的示例一样继承,我们应该依靠CSS现有的功能将我们的样式级联到子元素中。
<span><span>@extend .class-name;</span></span>

被编译为:
<span><span>.foo</span> {
</span>  <span>color: black;
</span>  <span>border: 1px solid black;
</span><span>}
</span>
<span><span>.bar</span> {
</span>  <span><span>@extend .foo;</span>
</span>  <span>background-color: red;
</span><span>}</span>
<span><span>@extend .class-name;</span></span>

>我们可以看到上面的示例更为正确和合理。我们通过仅将@Extend应用于应该彼此继承的类,从而降低了范围,这是由于一种类型的对象的变体。例如,以上样式都与不同类型的按钮有关。

>

结论

SASS是一个有价值的扩展,可以改善我们的CSS,以使其更清洁,结构良好,有条理且易于开发和维护。如果您以前没有尝试过Sass,我强烈建议您使用它。当您对Sass的基础知识更加满意时,我们建议阅读Hugo Giraudel的Sitepoinp文章,介绍没人告诉您Sass的@Extend。我们在SitePoint的Sass参考中也有整个SASS参考指南,并提供大量示例供您探索。

>

谢谢史蒂夫(Steve)和以西结(Ezekiel)在该帖子的第一个版本中提出错误的评论中,此后已更新。 >通过SASS 中的扩展的继承的常见问题(常见问题解答)

>在sass中使用@Extend的主要优点是什么?它使类能够继承另一个类的样式,从而减少了编写重复代码的需求。这不仅使代码更具可读性,而且还可以减少文件大小,从而可以改善网页的负载时间。

> @extend与sass的@mixin有何不同? @Extend和@mixin在SASS中允许可重复使用代码,它们以不同的方式工作。 @Extend允许选择器继承另一个选择器的样式,而@mixin包含一系列样式,可以在整个样式表中重复使用。关键区别在于,@extEnd会生成更少的CSS输出,因为IT将选择器与相同样式组合在一起,而@mixin可以导致更多的CSS输出,因为每次包含它时都会复制样式。 @Extend在SASS中使用复杂的选择器?

是的,您可以在sass中使用@Extend使用@Extend。但是,重要的是要注意,@Extend只能与同一文件中存在的选择器一起使用。它不会与在不同文件或@mixin或函数生成的选择中定义的选择器一起使用。

>

>为什么在sass中使用@Extend在媒体查询中使用@extend时会遇到错误?>我可以在sass中的嵌套规则中使用@extend?但是,重要的是要注意,扩展的选择器将被插入样式表的顶级,而不是嵌套规则范围内。这是因为SASS遵循CSS规则,所有选择器都必须位于文档的最高级别。>

>我如何避免“仅在规则中使用扩展指令” SASS中的错误? 🎜>当您尝试在SASS中使用@Extend之外使用@Extend时,会发生此错误。为避免此错误,请确保您在规则集中使用@Extend。例如,您不应该写“ @extend .class;”,而应写入.new-class {@extend .class; }。但是,重要的是要注意,@Extend只会扩展伪级的样式,而不是伪级本身。这意味着,如果您使用“ @extend:hover;”,它不会为选择器添加悬停效果,而是会扩展:悬停伪class的样式。

为什么我的@extend为什么是我的@extend不在sass?

中工作,您的@Extend无法在SASS中工作的原因有很多。一个常见的原因是,您要扩展的选择器不存在于同一文件中。另一个原因可能是您试图在媒体查询或嵌套规则中扩展选择器,而Sass不允许进行选择。确保检查这些要点,如果您的@Extend不起作用。

>我可以在sass中使用@Extend吗?您可以通过用逗号分开课程来做到这一点。例如,“ .new-class {@extend .class1,.class2; }”将扩展.class1和.class2的样式。 SASS的扩展课。您可以通过在@Extend指令之后定义新样式来做到这一点。新样式将覆盖使用@Extend的选择器的扩展类样式。

以上是通过@Extend在SASS中的继承的好处的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用智能表单框架创建JavaScript联系表格使用智能表单框架创建JavaScript联系表格Mar 07, 2025 am 11:33 AM

本教程演示了使用智能表单框架创建外观专业的JavaScript表单(注意:不再可用)。 尽管框架本身不可用,但原理和技术仍然与其他形式的建筑商相关。

将框阴影添加到WordPress块和元素将框阴影添加到WordPress块和元素Mar 09, 2025 pm 12:53 PM

CSS盒子阴影和轮廓属性获得了主题。让我们查看一些在真实主题中起作用的示例,以及我们必须将这些样式应用于WordPress块和元素的选项。

创建一个具有可满足属性的内联文本编辑器创建一个具有可满足属性的内联文本编辑器Mar 02, 2025 am 09:03 AM

构建内联文本编辑器并不是微不足道的。 该过程首先要使目标元素可编辑,并在此过程中处理潜在的语法异常。 创建您的编辑器 要构建此编辑器,您需要动态修改内容

揭开屏幕读取器的神秘面纱:可访问的表格和最佳实践揭开屏幕读取器的神秘面纱:可访问的表格和最佳实践Mar 08, 2025 am 09:45 AM

这是我们在形式可访问性上进行的小型系列中的第三篇文章。如果您错过了第二篇文章,请查看“以:focus-visible的管理用户焦点”。在

使用GraphQL缓存使用GraphQL缓存Mar 19, 2025 am 09:36 AM

如果您最近开始使用GraphQL或审查了其优点和缺点,那么您毫无疑问听到了诸如“ GraphQl不支持缓存”或

使您的第一个自定义苗条过渡使您的第一个自定义苗条过渡Mar 15, 2025 am 11:08 AM

Svelte Transition API提供了一种使组件输入或离开文档(包括自定义Svelte Transitions)时动画组件的方法。

比较5个最佳的PHP形式构建器(和3个免费脚本)比较5个最佳的PHP形式构建器(和3个免费脚本)Mar 04, 2025 am 10:22 AM

本文探讨了Envato Market上可用的PHP表单构建器脚本,比较了其功能,灵活性和设计。 在研究特定选项之前,让我们了解PHP形式构建器是什么以及为什么要使用一个。 PHP形式

在node.js中使用multer上传并上传express在node.js中使用multer上传并上传expressMar 02, 2025 am 09:15 AM

该教程通过使用node.js,express和multer构建文件上传系统来指导您。 我们将介绍单个和多个文件上传,甚至演示在MongoDB数据库中存储图像以进行以后的检索。 首先,设置您的projec

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。