pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

淺談styled-components的用法

這篇文章主要介紹了淺談styled-components的用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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 是一個標簽?zāi)0搴瘮?shù)

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

淺談styled-components的用法

二、基于 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 都可以在定義組件時獲取到,這樣就可以很容易實現(xiàn)組件主題的定制。如果沒有 styled-components 的情況下,需要使用組件 style 屬性或者定義多個 class 的方式來實現(xiàn)

三、組件樣式繼承

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

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;
`;

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

四、組件內(nèi)部使用 className

在日常開發(fā)中總會出現(xiàn)覆蓋組件內(nèi)部樣式的需求,你可能想在 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;
`;

在實際開發(fā)中,這個方法還有一個有用處,用來引用第三方類庫的 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 結(jié)構(gòu)如下:

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

可以用這種方式來使用在別處定義的 small 樣式,或者單純?yōu)榱俗R別自己定義的 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;
`;

七、兼容現(xiàn)在已有的 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 代碼

【網(wǎng)站聲明】本站除付費源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

主站蜘蛛池模板: 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 幂简集成 - 品种超全的API接口平台, 一站搜索、试用、集成国内外API接口 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 炒货机-炒菜机-炒酱机-炒米机@霍氏机械 | 整合营销推广|营销网络推广公司|石家庄网站优化推广公司|智营销 好物生环保网、环保论坛 - 环保人的学习交流平台 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | ALC墙板_ALC轻质隔墙板_隔音防火墙板_轻质隔墙材料-湖北博悦佳 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 外贸资讯网 - 洞悉全球贸易,把握市场先机 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 陶瓷加热器,履带式加热器-吴江市兴达电热设备厂 | 扒渣机厂家_扒渣机价格_矿用扒渣机_铣挖机_撬毛台车_襄阳永力通扒渣机公司 | 环压强度试验机-拉链拉力试验机-上海倾技仪器仪表科技有限公司 | 桐城新闻网—桐城市融媒体中心主办 | 拖链电缆_柔性电缆_伺服电缆_坦克链电缆-深圳市顺电工业电缆有限公司 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 网站优化公司_SEO优化_北京关键词百度快速排名-智恒博网络 | 厌氧工作站-通用型厌氧工作站-上海胜秋科学仪器有限公司 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | 液氮罐_液氮容器_自增压液氮罐_杜瓦瓶_班德液氮罐厂家 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 留学生辅导网-在线课程论文辅导-留学生挂科申诉机构 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 润滑油加盟_润滑油厂家_润滑油品牌-深圳市沃丹润滑科技有限公司 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 热风机_工业热风机生产厂家上海冠顶公司提供专业热风机图片价格实惠 | TwistDx恒温扩增-RAA等温-Jackson抗体-默瑞(上海)生物科技有限公司 | 艺术生文化课培训|艺术生文化课辅导冲刺-济南启迪学校 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 快速门厂家-快速卷帘门-工业快速门-硬质快速门-西朗门业 |