官方文檔地址: https://www.styled-components.com/javascript
中文文檔地址:https://github.com/hengg/styled-components-docs-zhcss
styled-components
是一個React
的第三方庫,是CSS in JS
的優秀實踐。前端
初次瞭解styled-components
是在讀林昊翻譯的React設計模式與最佳實踐一書時。雖然接觸的比較晚,但深深的被它的強大和優雅所吸引。然而其中文資料比較匱乏,爲幫助更多的小夥伴瞭解這個強大的工具,翻譯了部分官方文檔。能力所限,已翻譯部分可能仍有字詞錯誤或語句不通順的地方,歡迎有能力的同窗幫助糾正。java
styled-components
究竟強在哪裏?這要從它所解決的問題提及:git
不能否認,CSS是一門神奇的「語言」(What kind of language is CSS?)。github
它易於上手、卻難以精通。它沒有變量、函數等概念致使它的表現力要稍弱於其它語言,而它索要解決的問題卻又很複雜。 關於這一點,爲何 CSS 這麼難學?這個問題下的一百多個答案就很能說明問題了。web
平常使用中,CSS 的痛點不少,但大多圍繞如下兩點:設計模式
隨着組件化時代的來臨,前端應用開始從組件的層面對 CSS 進行封裝:也就是經過 JS 來聲明、抽象樣式從而提升組件的可維護性;在組件加載時動態的加載樣式,動態生成類名從而避免全局污染。函數
styled-components
就是其中的佼佼者。工具
顧名思義,styled-components
以組件的形式來聲明樣式,讓樣式也成爲組件從而分離邏輯組件與展現組件(這個思路看起來是否是很眼熟),來看一下官方的示例:
const Button = styled.a` /* This renders the buttons above... Edit me! */ display: inline-block; border-radius: 3px; padding: 0.5rem 0; margin: 0.5rem 1rem; width: 11rem; background: transparent; color: white; border: 2px solid white; /* The GitHub button is a primary button * edit this to target it specifically! */ ${props => props.primary && css` background: white; color: palevioletred; `} ` render( <div> <Button href="https://github.com/styled-components/styled-components" target="_blank" rel="noopener" primary > GitHub </Button> <Button as={Link} href="/docs" prefetch> Documentation </Button> </div> )
能夠看到,styled-components
經過標記的模板字符來設置組件樣式.
它移除了組件和樣式之間的映射.當咱們經過styled-components
定義樣式時,咱們其實是建立了一個附加了樣式的常規 React 組件.
同時它支持將props
以插值的方式傳遞給組件,以調整組件樣式.
官方宣稱styled-components
的優勢以下:
CSS 的問題,也有其餘解決方案,好比著名的CSS Module
方案。社區中也一直存在對於二者孰優孰劣的爭執。
本文不會比較這兩種解決方案,但有興趣的朋友能夠參考一下這兩篇文章: