Styled-Componentsの簡単な定理
31124 ワード
反応の中で造形を行うには大体3つの方法がある.以下に、その1つのインライン方式を示します.
あなたが見たように、一言が邪魔です.
これより良いモジュールです.cssメソッドもありますが、欠点はファイルを移動してclassNameを貼り付けることです.特定の条件でのスタイルを実現するにはclassNameを一緒に貼り付ける必要があります.
したがって,前述した3つの方法に欠点がないわけではないが,最良のstyled−componsesを用いてみる.
npm i styled-components
or
yarn add styled-components
const構成部品名=styled.ラベル名`属性:値;
色の違いだけを作りたいなら、残りの2つの同じボックスで、propsでその色を伝えることができます.
Boxと同じ幅、高さ、背景色を持つが、border半径が異なるCircle素子のみが作成された.
const Circle = styled(Box)` `
これにより、CircleはBoxを拡張し、Boxのすべてのスタイル属性を持ち、独自のスタイルを追加することができます.
ページには同じボタンが2つあります.1つはページ内で機能するボタンラベルで、1つはページを移動するaラベルです.styled-componsesを使用する場合
const Button = styled.button` `
const Link = styled.a` `
同じスタイルのプロパティを持つ要素をラベル名に変更して2つ作成する必要はありません.
会員登録表を作成していますが、記入しなければならない入力がたくさんあります.では、以下のようにinputラベルごとにrequiredを書くべきではないでしょうか.styled-componsesを使用する場合は、そうする必要はありません.
アニメーションを適用するには、キーフレームを読み込む必要があります.その後の使い方は基本的なCSSと変わりません.
styled-conentsは、SASSのような親セレクタ
styled-componentでは、セレクタとして他のstyled-componentを使用できます.
styled-conentsが提供するthemeProviderでは、オブジェクトとして色を収集するトピックをpropsとしてサブコンポーネントに渡すことができます.
色を変更する必要はなく、themeProviderによって渡されるトピックを変更するだけで済むので、ライトトピック、暗いトピックを実装するときに便利です.
index.js
function App() {
return (
<div>
<div style={{ width: 100, height: 100, backgroundColor: "red" }}></div>
</div>
);
}
あなたが見たように、一言が邪魔です.
これより良いモジュールです.cssメソッドもありますが、欠点はファイルを移動してclassNameを貼り付けることです.特定の条件でのスタイルを実現するにはclassNameを一緒に貼り付ける必要があります.
したがって,前述した3つの方法に欠点がないわけではないが,最良のstyled−componsesを用いてみる.
設定
npm i styled-components
or
yarn add styled-components
使用方法
const構成部品名=styled.ラベル名`属性:値;
import styled from "styled-components";
const Box = styled.div`
width: 100px;
height: 100px;
background-color: red;
`;
function App() {
return (
<div>
<Box />
</div>
);
}
トランスファ
色の違いだけを作りたいなら、残りの2つの同じボックスで、propsでその色を伝えることができます.
const Box = styled.div`
width: 100px;
height: 100px;
background-color: ${(props) => props.color};
`;
function App() {
return (
<div>
<Box color="red" />
<Box color="blue" />
</div>
);
}
拡張
Boxと同じ幅、高さ、背景色を持つが、border半径が異なるCircle素子のみが作成された.
const Box = styled.div`
width: 100px;
height: 100px;
background-color: ${(props) => props.color};
`;
const Circle = styled.div`
width: 100px;
height: 100px;
background-color: ${(props) => props.color};
border-radius: 50%;
`;
function App() {
return (
<div>
<Box color="red" />
<Circle color="blue" />
</div>
);
}
2つの構成部品には3つの同じプロパティがありますが、重複作成の効率は低下します.const Circle = styled(Box)` `
これにより、CircleはBoxを拡張し、Boxのすべてのスタイル属性を持ち、独自のスタイルを追加することができます.
const Box = styled.div`
width: 100px;
height: 100px;
background-color: ${(props) => props.color};
`;
const Circle = styled(Box)`
border-radius: 50%;
`;
function App() {
return (
<div>
<Box color="red" />
<Circle color="blue" />
</div>
);
}
タグの置換
ページには同じボタンが2つあります.1つはページ内で機能するボタンラベルで、1つはページを移動するaラベルです.styled-componsesを使用する場合
const Button = styled.button` `
const Link = styled.a` `
同じスタイルのプロパティを持つ要素をラベル名に変更して2つ作成する必要はありません.
const Button = styled.button`
display: block;
width: 100px;
height: 50px;
color: white;
background-color: red;
border-radius: 25x;
`;
function App() {
return (
<div>
<Button>버튼</Button>
<Button as="a">링크</Button>
</div>
);
}
as="a"
を入れるだけでbuttonラベルではなくaラベルです.タグのプロパティの設定
会員登録表を作成していますが、記入しなければならない入力がたくさんあります.では、以下のようにinputラベルごとにrequiredを書くべきではないでしょうか.styled-componsesを使用する場合は、そうする必要はありません.
const Input = styled.input`
display: block;
color: white;
background-color: pink;
margin-bottom: 10px;
`;
function App() {
return (
<div>
<Input required />
<Input required />
<Input required />
<Input required />
<Input required />
<Input required />
<Input required />
</div>
);
}
ラベル名の後ろに.attrs()
を貼り、()
内に付与したい属性を対象として記入すればよい.const Input = styled.input.attrs({ required: true })`
display: block;
color: white;
background-color: pink;
margin-bottom: 10px;
`;
function App() {
return (
<div>
<Input />
<Input />
<Input />
<Input />
<Input />
<Input />
<Input />
</div>
);
}
各inputラベルにrequiredが含まれていることを確認できます.アニメーション(Animation)
アニメーションを適用するには、キーフレームを読み込む必要があります.その後の使い方は基本的なCSSと変わりません.
import styled, { keyframes } from "styled-components";
const rotate = keyframes`
from{
transform:rotate(0deg);
}
to{
transform: rotate(360deg);
}
`;
const Rotator = styled.div`
width: 100px;
height: 100px;
background-color: pink;
animation: ${rotate} 1s linear infinite;
`;
function App() {
return (
<div>
<Rotator />
</div>
);
}
親セレクタ(&)、ネスト
styled-conentsは、SASSのような親セレクタ
&
をサポートし、オーバーラップすることができる.const Box = styled.div`
display: flex;
justify-content: center;
align-items: center;
width: 100px;
height: 100px;
background-color: pink;
span {
color: white;
&:hover {
font-size: 48px;
}
}
`;
function App() {
return (
<div>
<Box>
<span>상자</span>
</Box>
</div>
);
}
サブスタイル→アセンブリネスト
styled-componentでは、セレクタとして他のstyled-componentを使用できます.
const Text = styled.span`
font-size: 20px;
`;
const Box = styled.div`
display: flex;
justify-content: center;
align-items: center;
width: 100px;
height: 100px;
background-color: pink;
${Text}:hover {
font-size: 48px;
}
`;
function App() {
return (
<div>
<Box>
<Text>상자</Text>
</Box>
<Text>상자</Text>
</div>
);
}
「ボックス」の文字はすべてテキストスタイルに適用されますが、ボックス内のテキストにぶら下がっている場合にのみ、指定したスタイルが適用されます.ThemeProvider
styled-conentsが提供するthemeProviderでは、オブジェクトとして色を収集するトピックをpropsとしてサブコンポーネントに渡すことができます.
色を変更する必要はなく、themeProviderによって渡されるトピックを変更するだけで済むので、ライトトピック、暗いトピックを実装するときに便利です.
index.js
import React from "react";
import ReactDOM from "react-dom";
import { ThemeProvider } from "styled-components";
import App from "./App";
const darkTheme = {
textColor: "white",
backgroundColor: "black",
};
const lightTheme = {
textColor: "black",
backgroundColor: "whitesmoke",
};
ReactDOM.render(
<React.StrictMode>
<ThemeProvider theme={lightTheme}>
<App />
</ThemeProvider>
</React.StrictMode>,
document.getElementById("root")
);
App.jsconst Container = styled.div`
background-color: ${(props) => props.theme.backgroundColor};
`;
const Text = styled.span`
color: ${(props) => props.theme.textColor};
`;
function App() {
return (
<Container>
<Text>테마가 무엇이오?</Text>
</Container>
);
}
<ThemeProvider theme={lightTheme}>
の場合<ThemeProvider theme={darkTheme}>
の場合Reference
この問題について(Styled-Componentsの簡単な定理), 我々は、より多くの情報をここで見つけました https://velog.io/@cnsrn1874/Styled-Componentsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol