用組件的方式進行思考 - 你再也不須要維護一堆樣式表。 CSS-in-JS將CSS模型抽象到組件級別,而不是文檔級別(模塊化)。css
React 組件示例:html
import React, { Component } from 'react'
import styled from 'styled-components'
const Wrapper = styled.div` background: black `
const Title = styled.h1` background: white `
class App extends Component {
render() {
return (
<Wrapper> <Title>Hello Styled Components!</Title> </Wrapper>
)
}
}
export default App
複製代碼
你極可能聽過像CSS-in-JS
, Styled Components
,Radium
, 和Aphrodite
,你能夠也會想,這和我有什麼關係?我很是樂於寫CSS-in-CSS
(純.css文件)。前端
我來講一下這些爲何和你有關,但願至少能懂得概念,瞭解爲何和你有關。話雖如此,請隨意使用CSS-in-CSS。你沒有義務使用CSS-in-JS。不管什麼最適合你,讓你很爽,老是可以提供最好的解決方案!react
CSS-in-JS是一個微妙而有爭議的話題。 我主張開放的思想,並考慮這是否對你有意義。 問問本身,「它會改善個人工做流程嗎?」最後,惟一重要的是使用能讓你更快樂,更高效的工具。git
我老是以爲難以維護一個巨大的樣式表文件夾。 我想嘗試不一樣的方法。 我見過不少人問是否有新的造型想法。 到目前爲止,CSS-in-JS是最好的概念。github
讓咱們一塊兒看下CSS-in-JS:瀏覽器
中小型項目的 CSS服務器
JSS是一種比CSS更強大的抽象。 它使用JavaScript做爲語言以聲明和可維護的方式描述樣式。 它是一個高性能的JS到CSS編譯器,它在運行時和服務器端工做。 這個核心庫是低級別和框架無關的。 它大約是6KB(縮小和壓縮),而且能夠經過插件API進行擴展。 - 來源網絡
必定要銘記,行內樣式和CSS-in-JS徹底不一樣,以下圖所示:app
在瀏覽器中,這將附加到DOM節點,以下所示:
<span style="color: green">inline style</span>
複製代碼
在瀏覽器中,這將附加到DOM節點,以下所示:
<style> .jss-xxx-green{ color: green } </style>
<span class='jss-xxx-green'>inline style</span>
複製代碼
看到細微的區別? CSS-in-JS
在DOM的頂部附加了一個<style>
標記,而內聯樣式只是將屬性附加到DOM節點。 爲何這很重要?
並不是全部CSS
功能均可以使用JavaScript
事件處理程序。 許多僞選擇器(如:disabled,:before,:nth-child)是不可能的,不支持樣式化html
和body
標籤等。
使用CSS-in-JS
,您能夠輕鬆得到CSS
的全部功能。 因爲生成了實際的CSS
,所以您可使用您能想到的每一個媒體查詢和僞選擇器。 一些庫(如jss
,樣式組件)甚至添加了對嵌套的整潔,非CSS
原生特性的支持!
爲何咱們不使用CSS-in-CSS
並完成它?
雖然長期以來一直如此,但挑戰在於現代網絡是用組件而不是頁面編寫的。
CSS實際上從未實現過基於組件的方法。 CSS-in-JS
正好解決了這個問題。
CSS-in-JS
有什麼好處?CSS-in-JS
利用JavaScript生態系統的所有功能來加強CSS。jss-isolate
插件,JSS規則不會繼承屬性。BEM
)可能在一個項目中有所幫助,但在集成第三方代碼時無效。 當JSS將JSON表示編譯爲CSS時,JSS默認生成惟一的類名。provider
爲前綴,所以您沒必要考慮它。優點明顯超過了利弊 - 讓咱們給JS-in-JS一個機會!
CSS-in-JS
庫全部流行的CSS-in-JS庫的快速「Hello World」示例。 根據語法選擇您最喜歡的一個。
這些是很是簡單的示例,展現了核心功能。 全部庫都包含更多功能,例如主題,動態道具,服務器端渲染等等。
我相信CSS-in-JS應該有機會。 但願這篇文章對你有所幫助,並感謝閱讀!
深刻閱讀請移步: