Svelte 最新中文文档教程(13)—— 样式

news/2025/2/21 6:02:41/文章来源:https://www.cnblogs.com/yayujs/p/18723762

前言

Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1

image.png

Svelte 以其独特的编译时优化机制著称,具有轻量级高性能易上手等特性,非常适合构建轻量级 Web 项目,也是我做个人项目的首选技术栈。

目前 Svelte 基于 Svelte 5 发布了最新的官方文档,但却缺少对应的中文文档。为了帮助大家学习 Svelte,为爱发电翻译了官方文档。

我同时搭建了 Svelte 最新的中文文档站点:https://svelte.yayujs.com ,如果需要辅助学习,也可以入手我的小册《Svelte 开发指南》,语法篇、实战篇、原理篇三大篇章带你系统掌握 Svelte!

虽说是翻译,但个人并不喜欢严格遵守原文,为了保证中文阅读流畅,会删减部分语句,对难懂的部分也会另做补充解释,希望能给大家带来一个好的中文学习体验。

欢迎围观我的“网页版朋友圈”、加入“低调务实优秀中国好青年”前端社群,分享技术,带你成长。

作用域样式

Svelte 组件可以包含一个 <style> 元素,其中包含属于该组件的 CSS。这些 CSS 默认是有作用域的,这意味着样式不会影响到组件外部的页面元素上。

这是通过向受影响的元素添加一个基于组件样式哈希值的类来实现的(例如 svelte-123xyz)。

<style>p {/* 这只会影响本组件中的 <p> 元素 */color: burlywood;}
</style>

优先级

每个作用域选择器都会因为添加作用域类(例如 .svelte-123xyz)而获得 0-1-0 的优先级增加。这意味着(例如)在组件中定义的 p 选择器会优先于全局样式表中定义的 p 选择器,即使全局样式表是后加载的。

在某些情况下,作用域类必须多次添加到选择器中,但在第一次出现之后,它会以 :where(.svelte-xyz123) 的形式添加,以避免进一步增加优先级。

作用域关键帧

如果组件定义了 @keyframes,名称将会使用相同的哈希方法限定在组件作用域内。组件中的任何 animation 规则也会相应地进行调整:

<style>.bouncy {animation: bounce 10s;}/* 这些关键帧只能在这个组件内部访问 */@keyframes bounce {/* ... */}
</style>

全局样式

:global(...)

要在全局范围内为单个选择器应用样式,请使用 :global(...) 修饰符:

<style>:global(body) {/* 应用于 <body> */margin: 0;}div :global(strong) {/* 应用于属于本组件的 <div> 元素内的所有 <strong> 元素,无论这些 <strong>属于哪个组件 */color: goldenrod;}p:global(.big.red) {/* 应用于属于本组件的所有带有`class="big red"` 的 <p> 元素,即使该类是以编程方式添加的(比如通过库) */}
</style>

如果你想创建全局可访问的 @keyframes,你需要在关键帧名称前加上 -global-

编译时 -global- 部分会被移除,然后在代码的其他地方可以直接使用 my-animation-name 来引用该关键帧。

<style>@keyframes -global-my-animation-name {/* 代码写在这里 */}
</style>

:global

要将样式全局应用于一组选择器,可以创建一个 :global {...} 块:

<style>:global {/* 应用于你应用中的每个 <div> */div { ... }/* 应用于你应用中的每个 <p> */p { ... }}.a :global {/* 应用于属于本组件中 .a 元素内的任何组件中的所有 `.b .c .d` 元素 */.b .c .d {...}}
</style>

[!NOTE] 上面的第二个示例也可以写成等效的 .a :global .b .c .d 选择器,其中 :global 之后的所有内容都是未限定作用域的,不过更推荐使用嵌套形式。

自定义属性

你可以将 CSS 自定义属性(静态和动态的)传递给组件:

<Sliderbind:valuemin={0}max={100}--track-color="black"--thumb-color="rgb({r} {g} {b})"
/>

上面的代码本质上会被转换成这样:

<svelte-css-wrapper style="display: contents; --track-color: black; --thumb-color: rgb({r} {g} {b})"><Sliderbind:valuemin={0}max={100}/>
</svelte-css-wrapper>

对于 SVG 元素,它会使用 <g> 替代:

<g style="--track-color: black; --thumb-color: rgb({r} {g} {b})"><Sliderbind:valuemin={0}max={100}/>
</g>

在组件内部,我们可以使用 var(...) 来读取这些自定义属性(并提供后备值):

<style>.track {background: var(--track-color, #aaa);}.thumb {background: var(--thumb-color, blue);}
</style>

你不必须直接在组件上指定这些值;只要自定义属性在父元素上定义,组件就可以使用它们。通常在全局样式表中的 :root 元素上定义自定义属性,这样它们就可以应用于整个应用程序。

[!NOTE] 虽然额外的元素不会影响布局,但它影响任何使用 > 组合器来直接定位组件容器内元素的 CSS 选择器。

<style> 元素

每个组件只能有一个顶级 <style> 标签。

然而,可以在其他元素或逻辑块内嵌套 <style> 标签。

在这种情况下,<style> 标签将按原样插入到 DOM 中;不会对 <style> 标签进行任何作用域限制或处理。

<div><style>/* 这个 style 标签将按原样插入 */div {/* 这将应用于 DOM 中的所有 `<div>` 元素 */color: red;}</style>
</div>

Svelte 中文文档

本篇已收录在掘金专栏 《Svelte 中文文档》,该系列预计 40 篇。

系统学习 Svelte,欢迎入手小册《Svelte 开发指南》。语法篇、实战篇、原理篇三大篇章带你系统掌握 Svelte!

此外我还写过 JavaScript 系列、TypeScript 系列、React 系列、Next.js 系列、冴羽答读者问等 14 个系列文章, 全系列文章目录:https://github.com/mqyqingfeng/Blog

通过文字建立交流本身就是一种缘分。欢迎围观我的“网页版朋友圈”、加入“低调务实优秀中国好青年”前端社群,分享技术,带你成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/886623.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构选讲-1 总结

数据结构选讲-1 总结 线段树技巧及其应用。 前言 出题特点:树形 \(polylog\) 数据结构为主,尤其线段树。 侧重数据结构维护算法,使用数据结构进行统计。 强调“从具体情境中抽象出合适的数据及目标”的过程。数据结构本质上是要在数据和目标不变的情况下,优化算法复杂度,降…

Jenkins通过私钥连接Node

本文只要提供一种Jenkins通过私钥连接Node的方法。方法不区分Jenkins版本。大体步骤: (1)生成密钥对 (2)Jenkins上使用私钥配置Credentials (3)Node上配置authorized_keys 文件 (4)添加Node实例 下面演示一个实例。 需求:Jenkins通过私钥方式连接Node(app用户)(1)…

基于条件的访问控制——RBAC

网络威胁极为普遍,无论是公共组织还是私营组织,都面临着数据泄露的风险。一个拥有过多权限的账户,就足以让黑客渗透整个组织。为保护组织免受此类事件的影响,可以根据用户的角色和职责来分配权限。基于角色的访问控制(RBAC)便应运而生。 一、什么是基于条件的访问控制(R…

周界入侵智能识别摄像机

周界入侵智能识别摄像机持续捕捉监控区域内的视频流,并将数据实时传输至中央控制系统。目标检测与跟踪:采用深度学习算法,系统能够自动识别画面中的人、动物或其他物体,并对其进行跟踪分析。行为分析:系统通过对目标运动轨迹和行为模式的分析,判断是否存在异常活动。例如…

解锁零食店管理高效密码:精选工具助你制胜市场

零食集合店管理工具的选择对于提高店铺运营效率、优化库存管理、提升客户满意度等方面至关重要。以下是一些关键的零食集合店管理工具及其功能介绍: 一、门店管理软件 ● 板栗看板: 简单易用,适合小型团队使用。 ● Trello: 以看板形式组织任务,适合敏捷开发团队。 ● Asa…

负载均衡下的Webshell连接处理

免责声明 本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。最近打金融项目的时候,webshell遇见了负载均衡,自己之前其实看过相关文章,但是实战操作起来还是遇见了不少坑点的,接下来…

STAR: 利用时空注意力机制和动态频率损失的视频超分辨率增强框架

STAR (Spatial-Temporal Augmentation with Text-to-Video Models) 提出了一种创新的视频超分辨率解决方案,针对现有模型中存在的过度平滑和时间一致性不足等问题进行了系统性改进。该方法基于文本到视频(T2V)扩散模型架构,通过优化时序建模能力,有效处理复杂退化场景下的视…

【GreatSQL优化器-14】直方图应用

【GreatSQL优化器-14】直方图应用 一、直方图介绍 GreatSQL的优化器负责将SQL查询转换为尽可能高效的执行计划,但因为数据环境不断变化有可能导致优化器对查询数据了解不够充足,可能无法生成最优的执行计划进而影响查询效率,因此推出了直方图(histogram)功能来解决该问题。 …

go使用gjson无需转成结构体从json字符中取获字段值

背景:我们一般在go中如果要获取某个json中的值,需要先创建一个结构体,再把json映射为到结构体,再从结构体中取值,不同的json都需要这样操作,太麻烦了。有了gjson后,就可以省去转成结构体的步骤,直接从json中取值,快捷方便,值得推荐! 包地址:https://github.com/tid…

璞华大数据HawkEye 平台,以智能之力,开启电梯维保新时代

电梯就像我们生活中的 “隐形伙伴”,每天默默承载着无数人的出行。但你是否想过,是什么在背后保障着电梯的安全运行?答案就是电梯维保。 电梯维保就像是给电梯做 “体检” 和 “保养”,及时发现并解决潜在问题,确保电梯始终处于最佳运行状态。小到一颗螺丝的松动,大到关键…

2025.2.18 学习

2025.2.18 学习 消息队列RocketMQ 主要结构:producer: 生产者,消息的发送者,将消息发送给Broker producer group: 生产者组 nameSrv: 名字服务,是一个路由注册中心,Broker会定时把自己的信息比如IP地址传给它,这样消费者和生产者就可以从nameSrv上获取这些信息,这样才…

仓库智能化升级:板栗看板打造高效运营

仓库智能化管理是现代企业提升运营效率、降低成本的重要手段。板栗看板作为一种可视化项目协作工具,在仓库智能化管理中发挥着重要作用。以下是以板栗看板为例,对仓库智能化管理的详细分析: 一、板栗看板在仓库智能化管理中的应用 实时监控库存水平 ○ 板栗看板能够实时显示…