日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > CSS >内容正文

CSS

React中的CSS——styled-components

發布時間:2024/7/5 CSS 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 React中的CSS——styled-components 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、認識CSS in JS

實際上,官方文檔也有提到過CSS in JS這種方案:
https://zh-hans.reactjs.org/docs/faq-styling.html

  • “CSS-in-JS” 是指一種模式,其中 CSS 由 JavaScript 生成而不是在外部文件中定義;
  • 注意此功能并不是 React 的一部分,而是由第三方庫提供。 React 對樣式如何定義并沒有明確態度;

在傳統的前端開發中,我們通常會將結構(HTML)、樣式(CSS)、邏輯(JavaScript)進行分離。

  • 但是在前面的學習中,我們就提到過,React的思想中認為邏輯本身和UI是無法分離的,所以才會有了JSX的語法。
  • 樣式呢?樣式也是屬于UI的一部分;
  • 事實上CSS-in-JS的模式就是一種將樣式(CSS)也寫入到JavaScript中的方式,并且可以方便的使用JavaScript的狀態;

所以React有被人稱之為 All in JS;

當然,這種開發的方式也受到了很多的批評:

  • Stop using CSS in JavaScript for web development
  • https://hackernoon.com/stop-using-css-in-javascript-for-web-development-fa32fb873dcc

二、認識styled-components

批評聲音雖然有,但是在我們看來很多優秀的CSS-in-JS的庫依然非常強大、方便:

  • CSS-in-JS通過JavaScript來為CSS賦予一些能力,包括類似于CSS預處理器一樣的樣式嵌套、函數定義、邏輯復用、動態修改狀態等等;
  • 依然CSS預處理器也具備某些能力,但是獲取動態狀態依然是一個不好處理的點;
  • 所以,目前可以說CSS-in-JS是React編寫CSS最為受歡迎的一種解決方案;

目前比較流行的CSS-in-JS的庫有哪些呢?
1. styled-components
2. emotion
3. glamorous

目前可以說styled-components依然是社區最流行的CSS-in-JS庫,
所以我們以styled-components的講解為主:
安裝styled-components:

yarn add styled-components

三、ES6標簽模板字符串

ES6中增加了模板字符串的語法,這個對于很多人來說都會使用。 但是模板字符串還有另外一種用法:標簽模板字符串(Tagged Template Literals)。

我們一起來看一個普通的JavaScript的函數:
正常情況下,我們都是通過 函數名() 方式來進行調用的,

其實函數還有另外一種調用方式:

如果我們在調用的時候插入其他的變量:

  • 模板字符串被拆分了;
  • 第一個元素是數組,是被模塊字符串拆分的字符串組合;
  • 后面的元素是一個個模塊字符串傳入的內容;

在styled component中,就是通過這種方式來解析模塊字符串,最終生成我們想要的樣式的

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><script>const name = 'zep'const age = 18function test (...args) {console.log(args)}test(`my name is ${name}, age is ${age}`)test`my name is ${name}, age is ${age}` </script> </body> </html>

四、styled的基本使用

styled-components的本質是通過函數的調用,最終創建出一個組件:

  • 這個組件會被自動添加上一個不重復的class;
  • styled-components會給該class添加相關的樣式;

另外,它支持類似于CSS預處理器一樣的樣式嵌套:

  • 支持直接子代選擇器或后代選擇器,并且 直接編寫樣式;
  • 可以通過&符號獲取當前元素;
  • 直接偽類選擇器、偽元素等;

import React, {PureComponent} from 'react'; import styled from 'styled-components'const HomeWrapper = styled.div`font-size: 30px;color: skyblue;.banner {background-color: darkolivegreen;span {display: flex;flex-wrap: wrap;color: #fff;&.active {color: #f90;}&:hover {color: pink;}&::after {content: 'aaa';}}} `const TitleWrapper = styled.h2`text-decoration: underline;font-size: 18px; `class App extends PureComponent {render() {return (<HomeWrapper><TitleWrapper>我是home的標題</TitleWrapper><div className='banner'><span>輪播圖1</span><span className='active'>輪播圖2</span><span>輪播圖3</span><span>輪播圖4</span></div></HomeWrapper>);} }export default App;

在實際項目中的寫法:

五、styled-components 中的props、attrs屬性

  • props可以穿透

  • 2. props可以被傳遞給styled組件

    • 獲取props需要通過${}傳入一個插值函數,props會作為該函數的參數;
    • 這種方式可以有效的解決動態樣式的問題;
  • 添加attrs屬性

  • import React, {PureComponent} from 'react'; import styled from 'styled-components'const HYInput = styled.input.attrs({placeholder: 'zep',bColor: 'red' })`background-color: lightblue;border-color: ${props => props.bColor};color: ${props => props.color} `class App extends PureComponent {constructor(props) {super(props);this.state = {color: 'blue'}}render() {return (<div className="profile"><input type="password"/><HYInput type="text" color={this.state.color}/><h2>我是profile的標題</h2><ul className="settings"><li>設置列表1</li><li>設置列表2</li><li>設置列表3</li></ul></div>);} }export default App;

    六、styled高級特性

  • 支持樣式的繼承
  • styled設置主題
  • import React, {PureComponent} from 'react'; import Home from '../home' import Profile from '../profile' import styled, {ThemeProvider} from "styled-components";const HYButton = styled.button`padding: 10px 20px;color: red;border-color: red; ` // 繼承樣式 const HYPrimaryButton = styled(HYButton)`//padding: 10px 20px;//border-color: red;color: #fff;background-color: green; ` /*const HYPrimaryButton = styled.button`padding: 10px 20px;border-color: red;color: #fff;background-color: green; `*/class App extends PureComponent {render() {return (<ThemeProvider id="app" theme={{themeColor: 'yellow', fontSize: '30px'}}><div>app</div><hr /><Home /><hr /><Profile /><HYButton>我是普通的按鈕</HYButton><HYPrimaryButton>我是primary的按鈕</HYPrimaryButton></ThemeProvider>);} }export default App; import styled from "styled-components"; export const HomeWrapper = styled.div`font-size: 30px;color: skyblue;.banner {background-color: darkolivegreen;span {display: flex;flex-wrap: wrap;color: #fff;&.active {color: #f90;}&:hover {color: pink;}&::after {content: 'aaa';}}} ` export const TitleWrapper = styled.h2`text-decoration: underline;font-size: 18px;color: ${props => props.theme.themeColor}; `

    總結

    以上是生活随笔為你收集整理的React中的CSS——styled-components的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩激情国产 | 少妇3p视频 | 国产尤物网站 | www国产| 亚洲成人国产精品 | 永久免费视频网站直接看 | 日韩一级大片 | 亚洲一区二三区 | 噼里啪啦动漫高清在线观看 | 午夜视频在线观看国产 | 日本裸体xx少妇18在线 | 色综合免费 | 免费高清成人 | 男人的天堂avav | 天堂在线中文字幕 | 精品成人免费一区二区在线播放 | 欧美成人精品一区二区三区在线观看 | 亚洲成人一区在线观看 | 艳妇乳肉豪妇荡乳xxx | 丝袜在线一区 | 成人免费视频毛片 | 天天爽夜夜爽夜夜爽精品 | 中文字幕亚洲不卡 | 亚洲三级国产 | 最好看的mv中文字幕国语电影 | 四季av一区二区夜夜嗨 | 精品国产欧美一区二区三区成人 | 绿帽人妻精品一区二区 | 一级激情片 | 国产精品8| 台湾av在线播放 | 久久精精品久久久久噜噜 | 欧美一卡二卡在线 | 6080午夜| 美女扒开屁股让男人桶 | 欧美一区二区三区四 | 欧美在线性视频 | 欧美成人一区二区 | 日韩欧美v| 欧美激情视频一区二区三区在线播放 | 欧美少妇性生活 | 91精品国产自产在线观看 | 欧美精品自拍偷拍 | 日本r级电影在线观看 | 911香蕉 | 最新最全av网站 | 一级片免费在线 | 啪视频免费 | 午夜精品久久久久久 | 国产av一区精品 | 久久久久久久久久久久久久 | 欧美大片黄 | 能看的av网站 | 亚洲最大福利 | 亚洲偷怕 | 成人毛片18女人毛片免费 | 国产毛片欧美毛片久久久 | 中文字幕日本一区二区 | 筱田优全部av免费观看 | 在线观看国产成人 | 在线中文字幕日韩 | 97超碰免费在线观看 | 嫩草综合 | 18成人在线观看 | 黑人巨大精品欧美一区二区免费 | 欧美成人三级在线 | 久久93 | 日韩精品xxxx| 日日不卡av | 欧美性猛交ⅹxx乱大交 | 91久久精品一区二区 | 美女试爆场恐怖电影在线观看 | 日韩一级片免费观看 | 午夜免费网址 | 久一国产 | 99青草| 国产免费毛卡片 | 人妻换人妻仑乱 | 久久在线电影 | 男人的天堂网av | 韩日免费av | 久久久久亚洲av成人无码电影 | 国产伦精品一区二区三区网站 | 伊人影院亚洲 | 欧美一级片播放 | 国产无毛片 | 国内一级黄色片 | 亚洲一区二区三区免费看 | 女人毛片视频 | 男女啪啪免费网站 | 亚洲香蕉在线 | 波多野结衣av片 | 国产永久视频 | 国产男人天堂 | 精品免费视频 | 91婷婷在线 | 网址在线观看你懂的 | 在线观看视频中文字幕 | 麻豆国产一区二区 |