广告
返回顶部
首页 > 资讯 > 前端开发 > html >用CSS-in-JS来做的事情有哪些
  • 478
分享到

用CSS-in-JS来做的事情有哪些

2024-04-02 19:04:59 478人浏览 薄情痞子
摘要

本篇内容主要讲解“用CSS-in-js来做的事情有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用CSS-in-JS来做的事情有哪些”吧!除了传统的 CSS

本篇内容主要讲解“用CSS-in-js来做的事情有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用CSS-in-JS来做的事情有哪些”吧!

除了传统的 CSS,你还可以使用 内联样式 和 CSS-in-JS 作为 React 应用程序的样式选项。

对于内联样式,你可以将 javascript对象传递给样式属性:

const myStyle = {
  fontSize: 24,
  lineHeight: '1.3em',
  fontWeight: 'bold',
};
<span style={myStyle}>Hello World!</p>

然而,并非所有 CSS 特性都受支持。

另一方面,CSS-in-JS 是一种使用 JavaScript来设置组件样式的技术。在解析此 JavaScript时,会生成 CSS(通常作为 <style> 元素)并附加到 DOM 中。

这个功能由第三方库实现。例如,下面是使用 Aphrodite 实现的上一个示例:

import { StyleSheet, css } from 'aphrodite';
const styles = StyleSheet.create({
    myStyle: {
        fontSize: 24,
        lineHeight: '1.3em',
        fontWeight: 'bold',
    }
});
<span className={css(styles.myStyle)}>Hello World!</p>

其他第三方库推荐:

  • Emotion

  • JSS

  • Radium

  • Styled-components

我并不完全赞成使用 CSS-in-JS,但我不得不说,其中一些库增加了对在某些情况下可能会有用的功能支持。

在这篇文章中,我将讨论在 CSS-in-JS 中你可以用上面的库来做的五件事,而我打赌这是你不知道的。

1.参照其他样式组件

像 styled-components 和 emotion 库允许您使用 标记模板文字 从样式中创建 React 组件:

import styled from 'styled-components';
// Create a component that renders a <p> element with blue text
const BlueText = styled.p`
  color: blue;
`;
<BlueText>My blue text</BlueText>

它们也允许你定位于其他样式组件(像你使用 CSS 选择器一样):

const ImportantText = styled.div`
   font-weight: bold;
`;
const Text = styled.div`
  color: gray;
  ${ImportantText} {
    font-style: italic;
  }
`;
render(
  <div>
    <Text>
      Text in gray
      <ImportantText>Important text in gray, bold and italic</ImportantText>
    </Text>
    <ImportantText>Important text bold</ImportantText>
  </div>
);

用CSS-in-JS来做的事情有哪些

这在组合伪类时很有用,例如,在悬停时更改组件的颜色:

const Text = styled.div`
  color: gray;
  &:hover ${ImportantText} {
    color: red;
  }
`;

用CSS-in-JS来做的事情有哪些

2.使用JSS(或其他库)扩展某些库的特性

假设你已经使用 Aphrodite 为你的应用程序设计样式,现在你需要支持主题。

但问题是 Aphrodite 不能轻易地支持主题。 至少不像 Emotion 那么容易。

不过,这里有两个项目将 JSS 的核心与 Aphrodite 和 styled-components 相结合, aphrodite-jss 和 styled-jss 。

通过这种方式,你可以保留 Aphrodite(或 styled-components) 的优点,并使用 JSS 的所有特性和 插件 ,从 规则缓存 到 规则隔离 ,以及 主题 ,主题包,以下是它提供的高阶组件:

  • ThemeProvider:通过 context 向 react 树传递主题对象。

  • withTheme:允许你接收一个主题对象并作为属性来更新。

例如:

const blackTheme = {
  color: 'black',
};
const App = () => (
  <ThemeProvider theme={blackTheme}>
    <MyComponent />
  </ThemeProvider>
);

在 Aphrodite 和主题的案例中,作为另一个例子,你也可以使用 react-with-styles ,它有实现 Aphrodite 或 JSS 接口,这样在定义样式时就可以访问主题信息了。

3.使用关键帧链接多个动画

与内联样式不同,CSS-in-JS 允许你使用关键帧定义动画。 例如,这是使用styled-components 做的:

const heightAnimation = keyframes`
  0% { height: 0; }
  100% { height: 200; }
`;
const myComponent = styled.div`
  display: inline-block;
  width: 200;
  position: relative;
  animation-name: ${heightAnimation};
  animation-duration: 1.5s;
  animation-timing-function: ease;
`;

但是很多人不知道的是,你可以通过在 animation 属性中使用多个关键帧对象来链接多个动画。 下面是修改后的两个动画的例子:

const heightAnimation = keyframes`
  0% { height: 0; }
  100% { height: 200; }
`;
const rotateAnimation = keyframes`
  0% { transfORM: rotate(0deg); }
  100% { transform: rotate(360deg); }
`;
const myComponent = styled.div`
  display: inline-block;
  width: 200;
  position: relative;
  animation: ${props => css`
    ${heightAnimation} 1.5s ease infinite,
    ${rotateAnimation} 1.5s linear infinite
  `}
`;

Radium 是另一个通过传递关键帧对象数组作为 animationName 属性值来支持多个 动画 的库:

const heightAnimation = Radium.keyframes(
  {
    0% { height: 0; }
    100% { height: 200; }
  },
  'myHeightAnimation',
);
const rotateAnimation = Radium.keyframes(
  {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
  },
  'myRotateAnimation',
);
const styles = {
  myStyle: {
    animationName: [heightAnimation, rotateAnimation],
    animationDuration: '1.5s, 1s',
    animationIterationCount: 'infinite, infinite',
    animationTimingFunction: 'ease, linear',
    display: inline-block;
    width: 200;
    position: relative;
  },
};

4.声明全局样式

CSS 中的一切都是全局的,使用 CSS-in-JS 的目的之一是消除全局样式定义。

但是,全局样式的使用有时可能是很有效的,例如,当你想对页面中的每个元素应用相同的字体样式时。

当然,你总是可以使用传统的 CSS,通过 webpack 导入或在 index.html 文件中声明它。

但是,如果您真的想在所有样式中使用 JavaScript,那么有些库实际上允许您通过 helper 组件或扩展/插件来定义全局样式。

在 Radium 中,您可以使用 Style 组件来渲染具有全局样式的样式元素。 例如:

<Style
  rules={{
    body: {
      fontFamily: 'Arial, Helvetica, sans-serif'
    }
  }}
/>

将返回:

<style>
body {
  font-family: 'Arial, Helvetica, sans-serif';
}
</style>

JSS 使用一个 插件 来编写全局样式:

const styles = {
  '@global': {
    body: {
      fontFamily: 'Arial, Helvetica, sans-serif'
    }
  }
}

在 Aphrodite 中,你可以用 第三方扩展 来做:

import {injectGlobalStyles} from "aphrodite-globals";
injectGlobalStyles({
    "body": {
          fontFamily: 'Arial, Helvetica, sans-serif',
    }
});

或者通过 aphrodit-jss 来使用 JSS 全局插件。

5.在单元测试中使用样式测试组件

有些库包含用于测试组件样式的工具

Aphrodite 提供了一个没有文档说明(至少在写这篇文章的时候是这样)的对象 StyleSheetTestUtils ,它仅适用于非生产环境(process.env.node_ENV!=='production'),有三个方法:

  • suppressStyleInjection:它阻止样式被注入到DOM中,当你想要在没有DOM的情况下测试Aphrodite 组件的输出时非常有用。

  • clearBufferAndResumeStyleInjection:它与 suppressStyleInjection 相反,所以它们应该搭配使用。

  • getBufferedStyles:它返回尚未刷新的缓冲样式字符串

以下是如何使用它们的示例:

import { StyleSheetTestUtils, css } from 'aphrodite';
//...
beforeEach(() => {
  StyleSheetTestUtils.suppressStyleInjection();
});
afterEach(() => {
  StyleSheetTestUtils.clearBufferAndResumeStyleInjection();
});
test('my test', () => {
  const sheet = StyleSheet.create({
    background: {
      backgroundColor: 'blue'
    },
  });
  css(sheet.background);
  // buffer will contain something like [ ".background_k554e1{background-color:blue !important;}" ]
  const buffer = StyleSheetTestUtils.getBufferedStyles();
  // ...
});

Radium 是另一个例子。它有一个 TestMode 对象,用于在测试期间使用 clearStateenable 和 disable 方法控制内部状态和行为。

到此,相信大家对“用CSS-in-JS来做的事情有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 用CSS-in-JS来做的事情有哪些

本文链接: https://www.lsjlt.com/news/85629.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 用CSS-in-JS来做的事情有哪些
    本篇内容主要讲解“用CSS-in-JS来做的事情有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用CSS-in-JS来做的事情有哪些”吧!除了传统的 CSS...
    99+
    2022-10-19
  • nodejs能做的事情有哪些
    这篇文章主要为大家展示了“nodejs能做的事情有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“nodejs能做的事情有哪些”这篇文章吧。 ...
    99+
    2022-10-19
  • CSS开发中的不要做哪些事情
    这篇文章主要讲解了“CSS开发中的不要做哪些事情”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS开发中的不要做哪些事情”吧!1.不要滥用类在有意义的地方...
    99+
    2022-10-19
  • Centos7安装之后必做的事情有哪些
    这篇文章将为大家详细讲解有关Centos7安装之后必做的事情有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、更新系统和补丁我们的互联网是很不安全的,每天都有新的漏洞出现和修复,所以一定要更新、更新...
    99+
    2023-06-10
  • redis除了缓存还可以用来做哪些事情
    这篇文章将为大家详细讲解有关redis除了缓存还可以用来做哪些事情,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis应该说是目前最受欢迎的NoSQL数据库之一了。R...
    99+
    2022-10-18
  • 一名合格的SEO需要做的事情有哪些
    这篇文章将为大家详细讲解有关一名合格的SEO需要做的事情有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  实际上现在SEO真的非常忙,而一名合格的SEO需要做的事情也非常多:  做好站内优化,你扪心...
    99+
    2023-06-10
  • 美国服务器租用需要注意的事情有哪些
    美国服务器租用需要注意的事情有:1、需要对美国服务器的数据进行备份;2、美国服务器不需要禁网卡;3、用软件检测美国服务器硬盘是否存在问题;4、不要边看教程边设置美国服务器。具体内容如下:数据备份。这一点非常重要,如果服务器没有出现问题的话,...
    99+
    2022-10-19
  • css属性使用中的一些注意事项分别有哪些
    css属性使用中的一些注意事项分别有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。新的一年开始了,得开始总结点东西了,以前...
    99+
    2022-10-19
  • js中的鼠标事件有哪些(用法示例学习进阶)
    目录一、鼠标事件类型详细说明二、鼠标点击示例三、鼠标移动示例四、鼠标经过示例五、鼠标来源示例1示例2六、鼠标定位示例1示例2示例3七、鼠标按键示例在JavaScript中,鼠标事件是...
    99+
    2023-02-11
    js中的鼠标事件有哪些 js中的鼠标事件用法
  • 有哪些好用的 PHP IDE 推荐,适合用来做 NumPy 和 LeetCode ?
    随着 PHP 语言的不断发展,越来越多的程序员开始使用 PHP 进行编程。为了提高编程效率和代码质量,选择一款好用的 PHP IDE 是非常重要的。本文将介绍一些适合用来做 NumPy 和 LeetCode 的 PHP IDE 推荐。 P...
    99+
    2023-09-19
    ide numy leetcode
  • CSS中用来定义标签样式的属性有哪些
    这篇文章主要介绍了CSS中用来定义标签样式的属性有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 height:用来定义标签的高度,同...
    99+
    2022-10-19
  • js常用的键盘事件有哪些(用法示例)_键码keyCode对照表
    目录一、键盘事件属性示例1示例2键盘响应顺序示例键盘键码keyCode对照表键盘事件与鼠标事件类似,同样常出现在JavaScript开发过程中。键盘事件的触发过程具体是这样的: 在用...
    99+
    2023-02-11
    js常用的键盘事件有哪些 js键盘事件用法示例 键码keyCode对照表
  • 有哪些ES6方法用来解决实际开发的JS问题
    这篇文章主要介绍“有哪些ES6方法用来解决实际开发的JS问题”,在日常操作中,相信很多人在有哪些ES6方法用来解决实际开发的JS问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • 使用css制作自适应布局的常见注意事项有哪些
    这篇文章主要介绍使用css制作自适应布局的常见注意事项有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!制作自适应布局最常使用的解决方法就是在页面初始化时,利用js去获取宽高再计算...
    99+
    2022-10-19
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作