亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

淺談styled-components的用法

2024-07-11 08:58:45
字體:
來源:轉載
供稿:網友

styled components 一種全新的控制樣式的編程方式,它能解決 CSS 全局作用域的問題,而且移除了樣式和組件間的映射關系

import React from 'react';import styled from 'styled-components';import { render } from 'react-dom'; const Title = styled.h1`    font-size: 1.5em;    text-align: center;    color: palevioletred;`; class App extends React.Component {    render() {        return (            <Title>Hello world</Title>        )    }} render(    <App />,    document.getElementById('app'));

styled.h1 是一個標簽模板函數

styled.h1 函數返回一個 React Component , styled components 會為這個 React Component 添加一個 class ,該 class 的值為一個隨機字符串。傳給 styled.h1 的模板字符串參數的值實際上是 CSS 語法,這些 CSS 會附加到該 React Component 的 class 中,從而為 React Component 添加樣式

二、基于 props 定制主題

const Button = styled.button`  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(  <div>    <Button>Normal</Button>    <Button primary>Primary</Button>  </div>);

我們在組件中傳入的所有 props 都可以在定義組件時獲取到,這樣就可以很容易實現組件主題的定制。如果沒有 styled-components 的情況下,需要使用組件 style 屬性或者定義多個 class 的方式來實現

三、組件樣式繼承

通常在 css 中一般會通過給 class 傳入多個 name 通過空格分隔的方式來復用 class 定義,類似 class="button tomato" 。在 styled-components 中利用了 js 的繼承實現了這種樣式的復用:

const Button = styled.button`  color: palevioletred;  font-size: 1em;  margin: 1em;  padding: 0.25em 1em;  border: 2px solid palevioletred;  border-radius: 3px;`;const TomatoButton = Button.extend`  color: tomato;  border-color: tomato;`;

子組件中的屬性會覆蓋父組件中同名的屬性

四、組件內部使用 className

在日常開發中總會出現覆蓋組件內部樣式的需求,你可能想在 styled-components 中使用 className ,或者在使用第三方組件時。

<Wrapper>  <h4>Hello Word</h4>  <div className="detail"></div></Wrapper>

五、組件中維護其他屬性

styled-components 同時支持為組件傳入 html 元素的其他屬性,比如為 input 元素指定一個 type 屬性,我們可以使用 attrs 方法來完成

const Password = styled.input.attrs({  type: 'password',})`  color: palevioletred;  font-size: 1em;  border: 2px solid palevioletred;  border-radius: 3px;`;

在實際開發中,這個方法還有一個有用處,用來引用第三方類庫的 css 樣式:

const Button = styled.button.attrs({  className: 'small',})`  background: black;  color: white;  cursor: pointer;  margin: 1em;  padding: 0.25em 1em;  border: 2px solid black;  border-radius: 3px;`;

編譯后的 html 結構如下:

<button class="sc-gPEVay small gYllyG">  Styled Components</button>

可以用這種方式來使用在別處定義的 small 樣式,或者單純為了識別自己定義的 class ,因為正常情況下我們得到的 class 名是不可讀的編碼

六、CSS 動畫支持

styled-components 同樣對 css 動畫中的 @keyframe 做了很好的支持。

import { keyframes } from 'styled-components';const fadeIn = keyframes`  0% {    opacity: 0;  }  100% {    opacity: 1;  }`;const FadeInButton = styled.button`  animation: 1s ${fadeIn} ease-out;`;

七、兼容現在已有的 react components 和 css 框架

styled-components 采用的 css-module 的模式有另外一個好處就是可以很好的與其他的主題庫進行兼容。因為大部分的 css 框架或者 css 主題都是以 className 的方式進行樣式處理的,額外的 className 和主題的 className 并不會有太大的沖突

styled-components 的語法同樣支持對一個 React 組件進行擴展

const StyledDiv = styled(Row)`  position: relative;  height: 100%;  .image img {    width: 100%;  }  .content {    min-height: 30em;    overflow: auto;  }  .content h2 {    font-size: 1.8em;    color: black;    margin-bottom: 1em;  }`;

缺點

不能用 stylelint 檢查你的 Css 代碼

在使用 styled-components 的過程中也會遇到一些問題,比如我們的項目會用stylelint來做樣式代碼的檢查,但是使用了 styled-compoents 后就沒辦法讓stylelint的規則生效了。

不能用 prettier 來格式化你的 Css 代碼

現在prettier不僅可以幫你格式化 JS 代碼,還可以格式化 CSS 代碼,但如果使用了styled-components的話,JS 中的字符串模板內容沒有辦法使用prettier來格式化,這個也比較尷尬。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品国产精品大乳美女| 国产成人精品免高潮费视频| 国产日韩欧美在线播放| 欧美成人精品xxx| 精品久久久久久中文字幕大豆网| 91在线播放国产| 国产成人精品免费视频| 2019亚洲日韩新视频| 免费av在线一区| 欧美在线观看视频| 欧美成人免费大片| 国产午夜精品一区二区三区| 福利一区视频在线观看| 国产精品精品国产| 亚洲国产欧美一区二区三区久久| 自拍偷拍亚洲一区| 77777少妇光屁股久久一区| 亚洲精品天天看| 欧美片一区二区三区| 国产亚洲视频在线观看| 亚洲国产精品一区二区三区| 国产亚洲一级高清| 精品亚洲国产成av人片传媒| 国产成人高潮免费观看精品| 亚洲免费视频观看| 奇米一区二区三区四区久久| 亚洲国产女人aaa毛片在线| 91国产高清在线| 疯狂蹂躏欧美一区二区精品| 久久久欧美一区二区| 色与欲影视天天看综合网| 久久影视电视剧凤归四时歌| 国产精品久久久av久久久| 欧美一区二粉嫩精品国产一线天| 亚洲人成电影在线播放| 国产成人中文字幕| 91精品视频免费观看| www.国产精品一二区| 一二美女精品欧洲| 亚洲美女黄色片| 日韩av在线免费观看一区| 中文日韩在线观看| 欧美日韩一区二区免费在线观看| 国产精品久久久av久久久| 红桃视频成人在线观看| 久久久国产精彩视频美女艺术照福利| 久久精品色欧美aⅴ一区二区| 国产精品久久久久久网站| 尤物九九久久国产精品的分类| 欧美日韩激情视频| 97热在线精品视频在线观看| 久久久精品影院| 国产视频精品久久久| 国产精品久久久久久久7电影| 成人精品视频在线| 国产成人精品视频在线观看| 国产精品96久久久久久| 国产日韩欧美一二三区| 色妞色视频一区二区三区四区| 国产亚洲美女精品久久久| 高跟丝袜一区二区三区| 久久夜色精品国产亚洲aⅴ| 日韩美女视频在线观看| 成人黄色av播放免费| 精品久久久久久电影| 91精品视频大全| 国产激情久久久| 欧美日本中文字幕| 亚洲国产日韩欧美在线99| 视频在线一区二区| 欧美在线视频在线播放完整版免费观看| 91av视频在线观看| www.日韩视频| 日韩欧美一区二区三区久久| 在线精品国产成人综合| 97香蕉超级碰碰久久免费的优势| 中文字幕亚洲专区| 国产欧美精品日韩精品| 国产精品色午夜在线观看| 欧美成人国产va精品日本一级| 亚洲第一福利视频| 中文字幕不卡在线视频极品| 97超级碰碰人国产在线观看| 一本久久综合亚洲鲁鲁| 久久综合久久88| 亚洲国产成人爱av在线播放| 精品久久久久久| 欧美亚洲成人免费| 欧美激情精品久久久久久久变态| 色综合久久精品亚洲国产| 欧美丝袜第一区| 欧洲成人午夜免费大片| 日韩欧美在线观看视频| 国产www精品| 欧美午夜视频一区二区| 奇门遁甲1982国语版免费观看高清| 日韩欧美成人区| 亚洲人成电影网站| 久久久久久久97| 国产视频久久久久久久| 国产精品视频久| 国产精品美女主播| 欧美一级大片在线免费观看| 国产欧美精品一区二区| 国产精品扒开腿做爽爽爽视频| 国产精品亚洲片夜色在线| 国产乱人伦真实精品视频| 成人黄色免费在线观看| 一区二区三区久久精品| 亚洲成人精品视频在线观看| 欧美激情xxxx| 91精品视频播放| 高清日韩电视剧大全免费播放在线观看| 欧美激情视频网站| 不卡中文字幕av| 亚洲人成在线免费观看| 国产激情久久久| 日韩欧美成人免费视频| 日韩精品999| 国产欧美日韩中文| 中国日韩欧美久久久久久久久| 久久精品一区中文字幕| 91精品视频在线看| 高清一区二区三区日本久| 国产小视频国产精品| 黑人精品xxx一区| 91精品国产91久久久久久不卡| 国产婷婷成人久久av免费高清| 日韩的一区二区| 日韩成人xxxx| 久久天天躁狠狠躁老女人| 午夜免费在线观看精品视频| 欧美激情视频播放| 国产专区精品视频| 国产中文欧美精品| 欧美性一区二区三区| 日韩欧美精品免费在线| 日韩中文字在线| 亚洲国产天堂久久国产91| 91精品综合视频| 国产婷婷成人久久av免费高清| 欧美日韩午夜激情| 国产精品视频999| 欧美一级大片在线免费观看| 日韩av免费看| 久久久人成影片一区二区三区| 91网站在线免费观看| 97视频国产在线| 日本电影亚洲天堂| 欧美性20hd另类| 国产噜噜噜噜噜久久久久久久久| 欧美成人午夜激情视频| 91av国产在线| 亚洲区中文字幕| 亚洲无限av看| 久久精品中文字幕免费mv| 亚洲欧美日韩天堂一区二区| 久久久在线观看| 日韩美女中文字幕| 国产激情视频一区| 国产www精品| 国产精品久久久久久久7电影| 91久热免费在线视频| 亚洲男女自偷自拍图片另类|