
Security News
How Enterprise Security Is Adapting to AI-Accelerated Threats
Socket CTO Ahmad Nassri discusses why supply chain attacks now target developer machines and what AI means for the future of enterprise security.
@emotion/babel-preset-css-prop
Advanced tools
A babel preset to automatically enable emotion's css prop
A Babel preset to automatically enable Emotion's css prop when using the classic JSX runtime. If you want to use the new JSX runtimes please do not use this preset but rather just include our
@emotion/babel-plugindirectly and follow instructions for configuring the new JSX runtimes here.
yarn add @emotion/babel-preset-css-prop
Note:
This plugin is not compatible with
@babel/plugin-transform-react-inline-elements. If you use both then yourcssprop styles won't be applied correctly.
.babelrc
{
"presets": ["@emotion/babel-preset-css-prop"]
}
@emotion/babel-preset-css-prop includes the emotion plugin. The @emotion/babel-plugin entry should be removed from your config and any options moved to the preset. If you use @babel/preset-react or @babel/preset-typescript ensure that @emotion/babel-preset-css-prop is inserted after them in your babel config.
{
+ "presets": [
+ [
+ "@emotion/babel-preset-css-prop",
+ {
+ "autoLabel": "dev-only",
+ "labelFormat": "[local]"
+ }
+ ]
+ ],
- "plugins": [
- [
- "@emotion",
- {
- "autoLabel": "dev-only",
- "labelFormat": "[local]"
- }
- ]
- ]
}
See the options documentation for more information.
babel --presets @emotion/babel-preset-css-prop script.js
require('@babel/core').transform(code, {
presets: ['@emotion/babel-preset-css-prop']
})
This preset enables the css prop for an entire project via a single entry to the babel configuration. After adding the preset, compiled JSX code will use Emotion's jsx function instead of React.createElement.
| Input | Output | |
|---|---|---|
| Before | <img src="avatar.png" /> | React.createElement('img', { src: 'avatar.png' }) |
| After | <img src="avatar.png" /> | jsx('img', { src: 'avatar.png' }) |
import { jsx } from '@emotion/react' is automatically added to the top of files where required.
In
const Link = props => (
<a
css={{
color: 'hotpink',
'&:hover': {
color: 'darkorchid'
}
}}
{...props}
/>
)
Out
import { jsx as ___EmotionJSX } from '@emotion/react'
function _extends() {
/* babel Object.assign polyfill */
}
var _ref =
process.env.NODE_ENV === 'production'
? {
name: '1fpk7dx-Link',
styles: 'color:hotpink;&:hover{color:darkorchid;}label:Link;'
}
: {
name: '1fpk7dx-Link',
styles: 'color:hotpink;&:hover{color:darkorchid;}label:Link;',
map: '/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF1dG9tYXRpYy1pbXBvcnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUkiLCJmaWxlIjoiYXV0b21hdGljLWltcG9ydC5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExpbmsgPSBwcm9wcyA9PiAoXG4gIDxhXG4gICAgY3NzPXt7XG4gICAgICBjb2xvcjogJ2hvdHBpbmsnLFxuICAgICAgJyY6aG92ZXInOiB7XG4gICAgICAgIGNvbG9yOiAnZGFya29yY2hpZCdcbiAgICAgIH1cbiAgICB9fVxuICAgIHsuLi5wcm9wc31cbiAgLz5cbilcbiJdfQ== */'
}
const Link = props =>
___EmotionJSX(
'a',
_extends(
{
css: _ref
},
props
)
)
In addition to the custom JSX factory, this example includes @emotion/babel-plugin transforms that are enabled by default.
Options for both @emotion/babel-plugin and @babel/plugin-transform-react-jsx are supported and will be forwarded to their respective plugin.
Refer to the plugin's documentation for full option documentation.
{
"presets": [
[
"@emotion/babel-preset-css-prop",
{
"autoLabel": "dev-only",
"labelFormat": "[local]",
"useBuiltIns": false,
"throwIfNamespace": true
}
]
]
}
Options set to default values for demonstration purposes.
styled-components is another popular CSS-in-JS library that allows you to write actual CSS to style your components. It uses tagged template literals to style components and provides a similar theming capability. Unlike @emotion/babel-preset-css-prop, styled-components does not use the css prop but instead uses the styled function to create styled components.
Linaria is a zero-runtime CSS-in-JS library that allows you to write CSS in JavaScript without any runtime overhead. It extracts the CSS at build time, ensuring that your styles are fast and efficient. Linaria uses tagged template literals similar to styled-components but focuses on zero-runtime performance, unlike @emotion/babel-preset-css-prop which allows for runtime theming and dynamic styles.
Aphrodite is a CSS-in-JS library developed by Khan Academy that focuses on performance and ease of use. It generates atomic CSS classes to minimize style recalculations and reflows. Aphrodite does not use the css prop but instead provides a StyleSheet.create method to define styles and a css function to apply them to components.
FAQs
A babel preset to automatically enable emotion's css prop
The npm package @emotion/babel-preset-css-prop receives a total of 173,124 weekly downloads. As such, @emotion/babel-preset-css-prop popularity was classified as popular.
We found that @emotion/babel-preset-css-prop demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CTO Ahmad Nassri discusses why supply chain attacks now target developer machines and what AI means for the future of enterprise security.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.