摘要:它是通過(guò)改變編寫(xiě)方式的解決方案之一,從根本上解決常規(guī)編寫(xiě)的一些弊端。通過(guò)來(lái)為賦能,我們能達(dá)到常規(guī)所不好處理的邏輯復(fù)雜函數(shù)方法復(fù)用避免干擾。他搭配可能將模塊化走向一個(gè)更高的高度,樣式書(shū)寫(xiě)將直接依附在上面,三者再次內(nèi)聚。
Styled-Components
它是通過(guò)JavaScript改變CSS編寫(xiě)方式的解決方案之一,從根本上解決常規(guī)CSS編寫(xiě)的一些弊端。基本 安裝
通過(guò)JavaScript來(lái)為CSS賦能,我們能達(dá)到常規(guī)CSS所不好處理的邏輯復(fù)雜、函數(shù)方法、復(fù)用、避免干擾。
盡管像SASS、LESS這種預(yù)處理語(yǔ)言添加了很多用用的特性,但是他們依舊沒(méi)有對(duì)改變CSS的混亂有太大的幫助。因此組織工作交給了像 BEM這樣的方法,雖然比較有用,但是它完全是自選方案,不能被強(qiáng)制應(yīng)用在語(yǔ)言或者工具層面。
他搭配React可能將模塊化走向一個(gè)更高的高度,樣式書(shū)寫(xiě)將直接依附在JSX上面,HTML、CSS、JS三者再次內(nèi)聚。
npm install --save styled-components
除了npm安裝使用模塊化加載包之外,也支持UMD格式直接加載腳本文件。
入門(mén)styled-components使用標(biāo)簽?zāi)0鍋?lái)對(duì)組件進(jìn)行樣式化。
它移除了組件和樣式之間的映射。這意味著,當(dāng)你定義你的樣式時(shí),你實(shí)際上創(chuàng)造了一個(gè)正常的React組件,你的樣式也附在它上面。
這個(gè)例子創(chuàng)建了兩個(gè)簡(jiǎn)單的組件,一個(gè)容器和一個(gè)標(biāo)題,并附加了一些樣式。
// Create a Title component that"ll render antag with some styles const Title = styled.h1` font-size: 1.5em; text-align: center; color: palevioletred; `; // Create a Wrapper component that"ll render a
tag with some styles const Wrapper = styled.section` padding: 4em; background: papayawhip; `; // Use Title and Wrapper like any other React component – except they"re styled! render( ); Hello World, this is my first styled component!
注意透?jìng)鱬rops
CSS規(guī)則會(huì)自動(dòng)添加瀏覽器廠商前綴,我們不必考慮它。
styled-components會(huì)透?jìng)魉械膒rops屬性。
// Create an Input component that"ll render an tag with some styles const Input = styled.input` padding: 0.5em; margin: 0.5em; color: palevioletred; background: papayawhip; border: none; border-radius: 3px; `; // Render a styled text input with a placeholder of "@mxstbr", and one with a value of "@geelen" render(基于props做樣式判斷);
模板標(biāo)簽的函數(shù)插值能拿到樣式組件的props,可以據(jù)此調(diào)整我們的樣式規(guī)則。
const Button = styled.button` /* Adapt the colours based on primary prop */ background: ${props => props.primary ? "palevioletred" : "white"}; color: ${props => props.primary ? "white" : "palevioletred"}; font-size: 1em; margin: 1em; padding: 0.25em 1em; border: 2px solid palevioletred; border-radius: 3px; `; render(樣式化任意組件);
// This could be react-router"s Link for example const Link = ({ className, children }) => ( {children} ) const StyledLink = styled(Link)` color: palevioletred; font-weight: bold; `; render(擴(kuò)展樣式Unstyled, boring Link);
Styled, exciting Link
我們有時(shí)候需要在我們的樣式組件上做一點(diǎn)擴(kuò)展,添加一些額外的樣式:
需要注意的是.extend在對(duì)樣式組件有效,如果是其他的React組件,需要用styled樣式化一下。
// The Button from the last section without the interpolations const Button = styled.button` color: palevioletred; font-size: 1em; margin: 1em; padding: 0.25em 1em; border: 2px solid palevioletred; border-radius: 3px; `; // We"re extending Button with some extra styles const TomatoButton = Button.extend` color: tomato; border-color: tomato; `; render();Tomato Button
在極少特殊情況下,我們可能需要更改樣式組件的標(biāo)簽類(lèi)型。我們有一個(gè)特別的API,withComponent可以擴(kuò)展樣式和替換標(biāo)簽:
const Button = styled.button` display: inline-block; color: palevioletred; font-size: 1em; margin: 1em; padding: 0.25em 1em; border: 2px solid palevioletred; border-radius: 3px; `; // We"re replacing the添加attr
我們可以使用attrsAPI來(lái)為樣式組件添加一些attr屬性,它們也可以通過(guò)標(biāo)簽?zāi)0宀逯岛瘮?shù)拿到props傳值。
const Input = styled.input.attrs({ // we can define static props type: "password", // or we can define dynamic ones margin: props => props.size || "1em", padding: props => props.size || "1em" })` color: palevioletred; font-size: 1em; border: 2px solid palevioletred; border-radius: 3px; /* here we use the dynamically computed props */ margin: ${props => props.margin}; padding: ${props => props.padding}; `; render(動(dòng)畫(huà));
帶有@keyframes的CSS animations,一般來(lái)說(shuō)會(huì)產(chǎn)生復(fù)用。styled-components暴露了一個(gè)keyframes的API,我們使用它產(chǎn)生一個(gè)可以復(fù)用的變量。這樣,我們?cè)跁?shū)寫(xiě)css樣式的時(shí)候使用JavaScript的功能,為CSS附能,并且避免了名稱(chēng)沖突。
// keyframes returns a unique name based on a hash of the contents of the keyframes const rotate360 = keyframes` from { transform: rotate(0deg); } to { transform: rotate(360deg); } `; // Here we create a component that will rotate everything we pass in over two seconds const Rotate = styled.div` display: inline-block; animation: ${rotate360} 2s linear infinite; padding: 2rem 1rem; font-size: 1.2rem; `; render(<
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/113197.html
摘要:前言官方文檔地址中文文檔地址是一個(gè)的第三方庫(kù),是的優(yōu)秀實(shí)踐。初次了解是在讀林昊翻譯的設(shè)計(jì)模式與最佳實(shí)踐一書(shū)時(shí)。能力所限,已翻譯部分可能仍有字詞錯(cuò)誤或語(yǔ)句不通順的地方,歡迎有能力的同學(xué)幫助糾正。就是其中的佼佼者。 前言 官方文檔地址: https://www.styled-components.com/ 中文文檔地址:https://github.com/hengg/styled-com...
摘要:前言官方文檔地址中文文檔地址是一個(gè)的第三方庫(kù),是的優(yōu)秀實(shí)踐。初次了解是在讀林昊翻譯的設(shè)計(jì)模式與最佳實(shí)踐一書(shū)時(shí)。能力所限,已翻譯部分可能仍有字詞錯(cuò)誤或語(yǔ)句不通順的地方,歡迎有能力的同學(xué)幫助糾正。就是其中的佼佼者。 前言 官方文檔地址: https://www.styled-components.com/ 中文文檔地址:https://github.com/hengg/styled-com...
摘要:甚至完美的結(jié)合,不僅是從上,還有上。開(kāi)胃菜用了語(yǔ)法,直接為我們編寫(xiě)樣式創(chuàng)建組件。其實(shí)組件繼承也算是覆蓋的一種。如下當(dāng)任何父級(jí)帶有都會(huì)覆蓋的樣式。在上面可以看見(jiàn)我們大量使用了作為選擇器,而還有另外的技巧。 寫(xiě)在前面的廢話 回到2013年,React憑空出世。但是在那時(shí),我們會(huì)想,oh shit! 我們好不容易分離了HTML/CSS/JS, 為什么出現(xiàn)了JSX,我們又需要把HTML和JS耦...
摘要:甚至完美的結(jié)合,不僅是從上,還有上。開(kāi)胃菜用了語(yǔ)法,直接為我們編寫(xiě)樣式創(chuàng)建組件。其實(shí)組件繼承也算是覆蓋的一種。如下當(dāng)任何父級(jí)帶有都會(huì)覆蓋的樣式。在上面可以看見(jiàn)我們大量使用了作為選擇器,而還有另外的技巧。 寫(xiě)在前面的廢話 回到2013年,React憑空出世。但是在那時(shí),我們會(huì)想,oh shit! 我們好不容易分離了HTML/CSS/JS, 為什么出現(xiàn)了JSX,我們又需要把HTML和JS耦...
摘要:廢話不多話,來(lái)上車(chē)安裝或者簡(jiǎn)述使用創(chuàng)建全局的樣式首先創(chuàng)建一個(gè)文件,例如引全局包里面為項(xiàng)目需要的內(nèi)容在組件內(nèi)把引入的當(dāng)做標(biāo)簽寫(xiě)入創(chuàng)建一個(gè)局部的樣式引局部包里面為項(xiàng)目需要的內(nèi)容在組件內(nèi)把引入的當(dāng)做標(biāo)簽寫(xiě)入類(lèi)嵌套類(lèi)似于用法大同小異列舉 廢話不多話,來(lái)上車(chē)! 安裝: npm install --save styled-components (或者 yarn add styled-com...
摘要:一關(guān)于的認(rèn)識(shí)是一種使用編寫(xiě)樣式的處理方案。意味著你不需要關(guān)心如何檢測(cè)和刪除那些未使用的代碼。支持變量和繼承你可以使用變量來(lái)設(shè)置不同的樣式,使用這些不同樣式時(shí)只需要給樣式組件傳遞一個(gè)參數(shù)即可。 一、關(guān)于css-in-js的認(rèn)識(shí) 1、css-in-js是一種使用 js 編寫(xiě) css 樣式的 css 處理方案。它的實(shí)現(xiàn)方案有很多,比如styled-components、polished、glam...
閱讀 3077·2021-11-24 09:38
閱讀 1330·2021-09-22 15:27
閱讀 2967·2021-09-10 10:51
閱讀 1504·2021-09-09 09:33
閱讀 916·2021-08-09 13:47
閱讀 2069·2019-08-30 13:05
閱讀 892·2019-08-29 15:15
閱讀 2425·2019-08-29 12:21