你即便不需要,但你可以。

注意:原文发表于2018-12-26,随着框架不断演进,部分内容可能已不适用。

CSS 是任何 Web 应用程序的核心部分。

宽泛而论,如果一个 UI 框架没有内置向组件添加样式的方式,那么它就是半成品。

这便是为何 Svelte 允许你在组件的 <style> 标签中添加 CSS 的缘故。

将 CSS 与标记共存,意味着我们可以解决开发人员在编写 CSS 时遇到的最大问题,在不引入新的问题的同时,还提供极佳的开发体验。

但是 Svelte 的样式处理确实存在一些限制,在组件之间共享样式或者应用级优化都艰难重重。

这些是我们计划在未来版本中解决的,不过与此同时,如果你亟需这些功能的话,你可以使用与框架无关的 CSS-in-JS 库。

示例

在这里,我们用 Emotion 来生成可以跨多个组件中使用的范围受限的类名:

App.svelte

  1. <script>
  2. import { comicSans, link } from './styles.js';
  3. import Hero from './Hero.svelte';
  4. </script>

  5. <Hero/>

  6. <div class={comicSans}>
  7. <p>
  8. Did you enjoy your lunch, mom? You drank it fast enough.
  9. I know, I just call her Annabelle cause she's shaped like a…
  10. she's the belle of the ball! YOU'RE the Chiclet! Not me.
  11. Caw ca caw, caw ca caw, caw ca caw!
  12. A Colombian cartel that WON'T kidnap and kill you.
  13. You go buy a tape recorder and record yourself for a whole day.
  14. <a class={link} href="https://bluthipsum.com/">I think you'll be surprised at some of your phrasing.</a>
  15. </p>
  16. </div>

Hero.svelte

  1. <script>
  2. import { title, comicSans, box } from './styles.js';
  3. </script>

  4. <div class="{title} {comicSans}">
  5. <h1>
  6. <div class={box}>
  7. <div class={box}>
  8. <div class={box}>CSS</div>
  9. in JS
  10. </div>
  11. in HTML
  12. </div>
  13. </h1>
  14. </div>

styles.js

  1. import emotion from 'emotion/dist/emotion.umd.min.js';

  2. const { css } = emotion;

  3. const brand = '#74D900';

  4. export const title = css`
  5. color: ${brand};
  6. font-size: 1em;
  7. white-space: nowrap;
  8. `;

  9. export const comicSans = css`
  10. font-family: 'Comic Sans MS', cursive;
  11. `;

  12. export const box = css`
  13. position: relative;
  14. display: inline-block;
  15. border: 2px solid ${brand};
  16. line-height: 1;
  17. padding: 4px;
  18. border-radius: 4px;
  19. `;

  20. export const link = css`
  21. color: inherit;
  22. font-weight: bold;
  23. text-decoration: none;
  24. border-bottom: 1px solid ${brand};
  25. &:hover {
  26. text-decoration: none;
  27. background: ${brand};
  28. }
  29. `;

不过一定要提醒你的是,大多数的 CSS-in-JS 库都有一个运行时,许多库在构建时,不支持将样式静态提取到单独的 .css 文件中(这对于获取最佳性能至关重要)。

因此,仅在你的应用有迫切需要时才建议使用 CSS-in-JS!

请注意,你也可以混合搭配 CSS-in-JS 和 Svelte 内置的 CSS 处理两者一起使用。


在 Svelte 中使用 CSS-in-JS的更多相关文章

  1. 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件

    找了这么久资料,总算解决了 感谢博客园:http://www.cnblogs.com/xsht/p/5275081.html 感谢百度:http://zhidao.baidu.com/link?url ...

  2. 在html中引入css、js和jQuery的方法

    在html中引入css代码 在html中插入CSS样式表的方法有三种: 1.外部样式表(External style sheet):即所有的样式单独写在一个.css文件中,在html文件的head部分 ...

  3. php ci框架中载入css和js文件失败的原因及解决方法

    在将html页面整合到ci框架里面的时候,载入css和js失败. 原因是ci框架是入口的框架 对框架中文件的全部请求都须要经过index.php处理完毕,当载入外部的css和js文件的时候要使 用ba ...

  4. ASP.Net MVC4中封装CSS和js冗余代码(不让其大篇的显示在前台上)

    (1)封装CSS和JS代码,使用调用的方式在前台进行调用.是开发看起来简洁和易于管理,可达到重用.   由于asp.netMVC4 框架 ,在封装js和CSS的时候,有如下规范: using Syst ...

  5. html中插入css和js

    插入css: HTML周明华添加css样式的方法有很多种,常见的有一下几种:. 1.直接标签后添加如: <html> <div style="background:red; ...

  6. 去除web项目中的css、js缓存

    <link rel="stylesheet" type="text/css" href="~/Content/Home.css?param=Ma ...

  7. 在vue项目npm run build后,index.html中引入css和js 报MIME type问题

    问题: 1.在vue项目中,build打包后,index页面打开会报错, MIME type ('text/html') ;报错内容:because its MIME type ('text/html ...

  8. 网页中使用CSS和JS阻止用户选择内容

    CSS实现 body{ -webkit-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none; ...

  9. .Net MVC中使用css 和js

    @section script { <script language="javascript"> </script> }

  10. HTML中css和js链接中的版本号

    背景 在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候, 浏览器 ...

随机推荐

  1. WebApi Swagger 接口多版本控制 适用于APP接口管理

    最近研究了下swagger多版本的维护,网上的文章千篇一律,无法满足我的需求,分享下我的使用场景以及实现 演示环境:Visual Studio 2019.Asp.NET WebAPI.NET Fram ...

  2. G - 跑跑卡丁车

    跑跑卡丁车是时下一款流行的网络休闲游戏,你可以在这虚拟的世界里体验驾驶的乐趣.这款游戏的特别之处是你可以通过漂移来获得一种加速卡,用这种加速卡可以在有限的时间里提高你的速度.为了使问题简单化,我们假设 ...

  3. PAT(乙级)2020年秋季考试

    比赛链接:https://pintia.cn/market/item/1302816969611366400 7-1 多二了一点 (15分) 题解 模拟. 代码 #include <bits/s ...

  4. POJ 1743 Musical Theme【SAM】

    POJ1743 Musical Theme 要找长度\(\ge 5\)且出现次数\(\ge 2\)并且第一次出现和最后一次出现不重叠的最长子串. 题目条件中,如果对于两个串,在一个串的每个数上都加上相 ...

  5. P2765 魔术球问题 (网络流)

    题意:n根柱子 把编号1,2,3....的球依次插到柱子上去 需要满足相邻的两个球编号加起来为完全平方数 n < 55 题解:网络流24(23)题里的 但是一直不知道怎么建图  或者说建图的意义 ...

  6. Java-Swing的JFrame的一些插件使用详解

    JFrame介绍: 在 JFrame 对象中可以使用add方法添加 AWT 或者 Swing 组件. JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content ...

  7. [POJ 2585] Window Pains 拓朴排序

    题意:你现在有9个2*2的窗口在4*4的屏幕上面,由于这9这小窗口叠放顺序不固定,所以在4*4屏幕上有些窗口只会露出来一部分. 如果电脑坏了的话,那么那个屏幕上的各小窗口叠放会出现错误.你的任务就是判 ...

  8. tomacat服务器上web资源访问流程、web应用打成war包发布、Context的reloadable属性、tomacat体系架构

    一.web资源访问流程 二.web应用打成war包发布到服务器 好处:打成war包发布到服务器,那么服务器会自动把它拆解成文件夹 jar命令是java自带的一个命令,如果之前配置过Java编译环境就可 ...

  9. 洛谷P1522 [USACO2.4]牛的旅行 Cow Tours

    洛谷P1522 [USACO2.4]牛的旅行 Cow Tours 题意: 给出一些牧区的坐标,以及一个用邻接矩阵表示的牧区之间图.如果两个牧区之间有路存在那么这条路的长度就是两个牧区之间的欧几里得距离 ...

  10. 记一次 Raven2 渗透(phpmailer漏洞+UDF提权)

    目录: 1. 寻找IP 2.dirb目录爆破 2.PHPMailer漏洞反弹得到shell 3.python版本的exp修改 4.查看wordpress的wp-config.php配置文件得到数据库账 ...