
æ¬æ¥ã¯ãåå¿è åãã®Reactã¢ããªã±ã¼ã·ã§ã³ã«Tailwind CSSãçµ±åããã广çãªã¹ã¿ã¤ãªã³ã°æ¹æ³ã«ã¤ãã¦è§£èª¬ãã¾ãã
åå¿è åãã®Reactã§å¦ã¶Tailwind CSSãã¥ã¼ããªã¢ã«ã¨ãªãã¾ãã
ã¾ããTailwind CSSãReactã«çµ±åããæé ã«ã¤ãã¦ã¯ä»¥åã®è¨äºã§è©³ããç´¹ä»ãã¦ãã¾ãã
æé ã«ã¤ãã¦ã¯ã以ä¸ã®ãªã³ã¯ãåç §ãã¦ãã ããã
ãã®ãã¥ã¼ããªã¢ã«ã§ã¯ããã§ã«ããã¸ã§ã¯ãã«Tailwind CSSãã¤ã³ã¹ãã¼ã«ããã¦ãããã¨ãåæã¨ãã¦ãã¾ãã®ã§ããã®ç¹ããäºæ¿ãã ããã
ããã§ã¯ãReactã§å¦ã¶Tailwind CSSã®å¹æçãªã¹ã¿ã¤ãªã³ã°æ¹æ³ã«ã¤ãã¦è¦ã¦ããã¾ãããã
- Tailwind CSSã®ç¹é·ã¨å©ç¹ããã³èæ ®ãã¹ãçæ
Tailwind CSSã®ç¹é·ã¨å©ç¹ããã³èæ ®ãã¹ãçæ
Tailwind CSSã¯ãã¦ã¼ãã£ãªãã£ãã¡ã¼ã¹ãã®ã¢ããã¼ããæã¤ãã¬ã¼ã ã¯ã¼ã¯ã§ãããªãããéçºè ãCSSãã¡ã¤ã«ãåãæ¿ãããã¨ãªããç¬èªã®ã«ã¹ã¿ã Webã³ã³ãã¼ãã³ããç°¡åã«è¨è¨ã§ããç¹ãç¹çãã¹ãç¹é·ã§ãã
ãã®ãã¬ã¼ã ã¯ã¼ã¯ã¯åµé çãªå¶å¾¡ãæä¾ãããã¤ãããã¯ãªã³ã³ãã¼ãã³ãã®ä½æã容æã§ãã
Bootstrapã¨ã¯ç°ãªããTailwind CSSã¯ãã¶ã¤ã³ãæè»ã«ã«ã¹ã¿ãã¤ãºã§ããå©ç¹ãããã¾ãã夿§ãªã¹ã¿ã¤ãªã³ã°ãªãã·ã§ã³ãè¿ éã«é©ç¨ãããã¨ã§ããã¶ã¤ãã¼ã«ã¨ã£ã¦ã¯èªç±ãªçºæ³ãå®ç¾ãããã¨ãã§ãã¾ãã
ããã«ãTailwind CSSãæ¡ç¨ããããä¸ã¤ã®å¤§ããªå©ç¹ã¯ããã«ãããã»ã¹ä¸ã«æªä½¿ç¨ã®CSSãèªåçã«åé¤ãããã¨ã§ãæçµçãªCSSãã³ãã«ãµã¤ãºãå°ããä¿ã¤ç¹ã§ãã
ããã«å¯¾ãã¦ãBootstrapã¯ãã¹ã¦ã®CSSãã¡ã¤ã«ããã«ãã«å«ãããããä¸è¦ãªCSSãå¢ãã¦ãã¾ãããã¡ã¤ã«ãµã¤ãºã大ãããªãå¾åãããã¾ãã
ãã ããTailwind CSSã¯çµé¨è±å¯ãªéçºè ã§ãã£ã¦ããå¦ç¿æ²ç·ãéºãããã¨ãããã¾ããã¦ã¼ãã£ãªãã£ã¯ã©ã¹ãæå¤§éã«æ´»ç¨ããæ¹æ³ãç¿å¾ããã«ã¯æéãããããé »ç¹ã«ããã¥ã¡ã³ããåç §ããå¿ è¦ãããããããã¾ããã
ã¾ããTailwind CSSã¯ãHTMLãã¼ã¯ã¢ããå ãJSXå ã«ç´æ¥CSSãè¨è¿°ããã¢ããã¼ããæ¡ç¨ãã¦ãã¾ããããã«ã¯ããã¤ãã®å©ç¹ãããã¾ãããä¸é¨ã®éçºè ã«ã¨ã£ã¦ã¯æ¬ ç¹ã¨è¦ãªããããã¨ãããã¾ãã
ä¾ãã°ãé¢å¿ã®åé¢ã®ååã§ãããã®ååã§ã¯HTMLã¨CSSãå¥ã ã®ãã¡ã¤ã«ã«åãããã¨ã§ãã³ã¼ãã®ä¿å®æ§ã¨åå©ç¨æ§ãåä¸ãããã¨ããèãæ¹ã§ãã
ããããTailwind CSSã§ã¯ãJSXå ã«ç´æ¥CSSãè¨è¿°ããããããã®ååãç ´ãããã¨æãã人ããã¾ãã
ããã§ããTailwind CSSã¯ãå¹ççãªã¹ã¿ã¤ã«ã®ä½æã¨æè»æ§ãæä¾ããããã«ãHTMLããã³JSXå ã«ç´æ¥CSSãè¨è¿°ããã¢ããã¼ããæ¡ç¨ãã¦ãã¾ããéçºè ã¯ãèªèº«ã®ããã¸ã§ã¯ãã®è¦ä»¶ã好ã¿ã«åºã¥ãã¦ãã©ã®ã¢ããã¼ãã鏿ããããæ¤è¨ããå¿ è¦ãããã¾ãã
CSSã«æ £ãã¦ãããè¿ éã«ãã¶ã¤ã³ãæ§ç¯ãããå ´åã¯ãTailwind CSSãçå£ã«æ¤è¨ãã価å¤ããããã¬ã¼ã ã¯ã¼ã¯ã¨è¨ããã§ãããããã®æè»æ§ã¨å¹çæ§ã¯ãå¤ãã®éçºè ã«ã¨ã£ã¦å¤§ããªã¡ãªããã¨ãªããã¨ã§ãããã
Tailwind CSSã®ã«ã¹ã¿ãã¤ãºã¨tailwind.config.jsãã¡ã¤ã«ã®éè¦æ§
Tailwind CSSã®åºæ¬çãªä½¿ç¨æ¹æ³ã¯ãæå®ãããã¯ã©ã¹åãJSXã®è¦ç´ ã«é©ç¨ãããã¨ã§ã¹ã¿ã¤ã«ãé©ç¨ãããã¨ã§ãããã®ãããtailwind.config.jsãã¡ã¤ã«ã«ç´æ¥è¨å®ã追å ããå¿ è¦ã¯ããã¾ããã
tailwind.config.jsãã¡ã¤ã«ã¯ãTailwind CSSã®ããã©ã«ãã®è¨å®ã䏿¸ããã¦ã«ã¹ã¿ãã¤ãºããããã«ä½¿ç¨ããã¾ãã
以ä¸ã¯ãTailwind CSSã®ããã©ã«ãã®tailwind.config.jsãã¡ã¤ã«ã®ä¸é¨ã§ãï¼ä¸é¨ã®è¨å®ã®ã¿æç²ãã¦ãã¾ãï¼ã
// tailwind.config.js module.exports = { purge: [], darkMode: false, // 'media' or 'class' theme: { extend: {}, }, variants: { extend: {}, }, plugins: [], }
purgeï¼ ãã®ãªãã·ã§ã³ã¯ãæªä½¿ç¨ã®ã¹ã¿ã¤ã«ãåé¤ããããã«PurgeCSSã¨çµ±åããéã«ä½¿ç¨ããã¾ããããã©ã«ãã§ã¯ã空ã®é åã«ãªã£ã¦ãããPurgeCSSã¯ä½¿ç¨ããã¾ããã
darkModeï¼ ãã®ãªãã·ã§ã³ã¯ããã¼ã¯ã¢ã¼ãã®ãµãã¼ãæ¹æ³ãæå®ãã¾ããããã©ã«ãã§ã¯ã"false"ã«è¨å®ããã¦ãã¾ãã"media"ãæå®ããã¨ãclass="dark"ãHTMLã¾ãã¯JSXã®ã«ã¼ãè¦ç´ ã«ããå ´åã«èªåçã«ãã¼ã¯ã¢ã¼ããæå¹ã«ãªãã¾ãã"class"ãæå®ããã¨ãclass="dark"ãåå¨ããå ´åã«ã®ã¿ãã¼ã¯ã¢ã¼ããæå¹ã«ãªãã¾ãã
themeï¼ ããã§ã¯ãTailwind CSSã®ãã¼ãã«ã¹ã¿ãã¤ãºãè¡ããã¾ããããã©ã«ãã§ã¯ãextend: {}ã¨ãã¦ç©ºã®ãªãã¸ã§ã¯ãã«ãªã£ã¦ãã¾ããã«ã¹ã¿ã ã«ã©ã¼ããã©ã³ããã¡ããªã¼ãªã©ã®ã¹ã¿ã¤ã«ã追å ããå ´åã¯ããã®ãªãã·ã§ã³ãæ¡å¼µãã¦ä½¿ç¨ãã¾ãã
variantsï¼ ããã§ã¯ãåã¯ã©ã¹ã®å¤ç°ãå®ç¾©ãã¾ããããã©ã«ãã§ã¯ãextend: {}ã¨ãã¦ç©ºã®ãªãã¸ã§ã¯ãã«ãªã£ã¦ãã¾ãããã®ãªãã·ã§ã³ã使ç¨ãã¦ãç¹å®ã®ã¹ã¿ã¤ã«ã®å¤ç°ãæå¹å/ç¡å¹åãã«ã¹ã¿ãã¤ãºã§ãã¾ãã
pluginsï¼ ããã§ã¯ãã«ã¹ã¿ã ãã©ã°ã¤ã³ã追å ãããã¨ãã§ãã¾ããããã©ã«ãã§ã¯ã空ã®é åã«ãªã£ã¦ãã¾ããã«ã¹ã¿ã ãã©ã°ã¤ã³ã使ç¨ãã¦ãTailwind CSSã«ç¬èªã®ã¹ã¿ã¤ã«ãã¦ã¼ãã£ãªãã£ã追å ã§ãã¾ãã
ä¸è¨ã®è¨å®ã¯ãããã©ã«ãã®tailwind.config.jsãã¡ã¤ã«ã®ä¸é¨ã§ãã
ãããã«ã¹ã¿ãã¤ãºãããã¨ã§ãTailwind CSSã®æ¯ãèããã¹ã¿ã¤ã«ãããã¸ã§ã¯ãã«åããã¦èª¿æ´ãããã¨ãã§ãã¾ãã
tailwind.config.jsãã¡ã¤ã«ã夿´ããå ´åã¯ãããã¸ã§ã¯ãã®è¨å®å ¨ä½ã«å½±é¿ãä¸ããå¯è½æ§ããããããæ éã«è¡ãå¿ è¦ãããã¾ãã
è¦ç´ããã¨ãtailwind.config.jsãã¡ã¤ã«ã¯Tailwind CSSã®ã«ã¹ã¿ãã¤ãºã«ä½¿ç¨ããã¾ãããåºæ¬çãªä½¿ç¨æ¹æ³ã¨ãã¦è¤æ°ã®ã¯ã©ã¹åãçµã¿åãããå ´åã«ã¯ç´æ¥JSXè¦ç´ ã®className屿§ã«ã¯ã©ã¹åãæå®ããã ãã§ååã§ãã
ã¯ã©ã¹åã®æå®
Reactã§Tailwind CSSã使ç¨ããå ´åãã¯ã©ã¹åãæå®ããæ¹æ³ã¯ããã¤ãããã¾ãã
Tailwind CSSã¯ããã¾ãã¾ãªã¦ã¼ãã£ãªãã£ã¯ã©ã¹ãæä¾ãã¦ããããããã®ã¯ã©ã¹ãHTMLè¦ç´ ãReactã³ã³ãã¼ãã³ãã«é©ç¨ãããã¨ã§ã¹ã¿ã¤ã«ãé©ç¨ã§ãã¾ãã
ã» JSXå ã§ç´æ¥æå®ããæ¹æ³
Reactã®JSXå ã§ãã¯ã©ã¹åãæååã¨ãã¦ç´æ¥æå®ã§ãã¾ãã
以ä¸ã¯ãä¾ã¨ãã¦divè¦ç´ ã«Tailwind CSSã®ã¯ã©ã¹åãé©ç¨ããæ¹æ³ã¨ãªãã¾ãã
const MyComponent = () => { return ( <div className="bg-blue-500 text-white p-4"> This is a div with Tailwind CSS styles applied. </div> ); }; export default MyComponent;
ä¸è¨ã®ããã«ãTailwind CSSã«ã¯ãäºåã«å®ç¾©ãããã«ã©ã¼ãã¬ãããããã¾ããä»ã«ã¯ãbg-red-500ã¯èµ¤è²ã®èæ¯è²ãæå®ãã¾ããã«ã©ã¼ãã¬ããã使ç¨ãããã¨ã§ãä¸è²«æ§ã®ãããã¶ã¤ã³ãç°¡åã«å®ç¾ã§ãã¾ãã
See the Pen React TailwindCSS by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ä¸è¨ã®ä¸ããããTailwind CSSã¯ã©ã¹ã«å¯¾å¿ããé常ã®CSSã®ã¹ã¿ã¤ã«å®ç¾©ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
/* é常ã®CSSã§ã®ã¹ã¿ã¤ã«å®ç¾© */ .dev { background-color: #4299e1; /* 500çªç®ã®éè² */ color: #ffffff; /* ç½è² */ padding: 16px; /* 4åä½ x 4 = 16ãã¯ã»ã« */ }
ãã®CSSã³ã¼ããHTMLã®è¦ç´ ã«é©ç¨ããã¨ãMyComponentã³ã³ãã¼ãã³ãã«å¯¾ãã¦Tailwind CSSã¯ã©ã¹ãé©ç¨ãããæã¨åããããªã¹ã¿ã¤ãªã³ã°ãè¡ããã¾ãã
ã» å¤æ°ã使ç¨ãã¦ã¯ã©ã¹åãæå®ããæ¹æ³
JSXå ã§ã¯ã©ã¹åã夿°ã¨ãã¦å®ç¾©ãããã®å¤æ°ãclassName屿§ã«æ¸¡ããã¨ãã§ãã¾ãã
const MyComponent = () => { const myClassName = 'bg-red-500 text-white p-4'; return ( <div className={myClassName}> This is a div with Tailwind CSS styles applied using a variable. </div> ); }; export default MyComponent;
See the Pen Reactã§divè¦ç´ ã«Tailwind CSSã®ã¯ã©ã¹åãé©ç¨ by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
JSXå ã§ã¯ã©ã¹åã夿°ã¨ãã¦å®ç¾©ãããã®å¤æ°ãclassName屿§ã«æ¸¡ããã¨ã¯ä¸è¬çãªææ³ã§ãããããã¤ã注æãå¿ è¦ã§ãã
ã¾ããã³ã¼ãå ã§ä½¿ç¨ãã¦ãã夿°ï¼ä¾ï¼myClassNameï¼ã常ã«é©åã«å®ç¾©ããã¦ãããã¨ã確èªãã¦ãã ããããã夿°ãæªå®ç¾©ã¾ãã¯nullã®å ´åãã³ã³ãã¤ã«ã¨ã©ã¼ãçºçããããå®è¡æã«ã¨ã©ã¼ãçºçãã¾ãã
ã¾ããã»ãã¥ãªãã£ä¸ã®ãªã¹ã¯ã«ã注æãå¿ è¦ã§ããå¤é¨ããã¦ã¼ã¶ã¼å ¥åãåãåã£ã¦ã¯ã©ã¹åãåçã«æ±ºå®ããå ´åãã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼XSSï¼æ»æãé²ãããã«ãé©åã«ã¨ã¹ã±ã¼ããæ¤è¨¼ãè¡ãå¿ è¦ãããã¾ãã
ããã«ãã¯ã©ã¹åã®è¡çªã«ãæ°ãé ãã¹ãã§ããä»ã®CSSããã¬ã¼ã ã¯ã¼ã¯ã¨ã¯ã©ã¹åãè¡çªããªããããä¸æãªæ¥é è¾ããã¼ã ã¹ãã¼ã¹ã追å ãããã¨ãéè¦ã§ãã
ããã©ã¼ãã³ã¹ã«ã¤ãã¦ãèæ ®ãå¿ è¦ã§ããé常ã夿°ã使ç¨ãã¦ã¯ã©ã¹åãæå®ãããã¨ã¯ããã©ã¼ãã³ã¹ã«å½±é¿ãä¸ãã¾ããããåçãªã¯ã©ã¹åã®å¤æ´ãé »ç¹ã«è¡ãããå ´åã¯ä½åãªåæç»ãçºçããããã©ã¼ãã³ã¹ã«æªå½±é¿ãåã¼ãå¯è½æ§ãããã¾ãããããã£ã¦ãé度ã«è¤éãªã¯ã©ã¹åã®è¨ç®ã¯é¿ããããã«ãã¾ãããã
ãã¡ãããåé¿çã¯ããã¾ãã
Reactã®useCallbackããã¯ãuseMemoããã¯ã使ç¨ãããã¨ã§ãä½åãªåæç»ãåé¿ãããã¨ãã§ãã¾ãã
å ·ä½çãªä¾ã¨ãã¦ãåçãªã¯ã©ã¹åãè¨ç®ããå ´åãèãã¦ã¿ã¾ãããã
import { useCallback, useMemo, useState } from 'react'; const MyComponent = () => { const [isActive, setIsActive] = useState(false); // åçãªã¯ã©ã¹åãè¨ç®ããã³ã¼ã«ããã¯é¢æ°ãuseMemoã§ã¡ã¢å const calculateClassName = useMemo(() => { return isActive ? 'active-class' : 'inactive-class'; }, [isActive]); // ã³ã¼ã«ããã¯é¢æ°ãuseCallbackã§ã¡ã¢å const handleClick = useCallback(() => { setIsActive(!isActive); }, [isActive]); // ãã°ã«ã®ç¶æ ã夿´ããããã³ã³ã½ã¼ã«ã«åºå console.log('isActive:', isActive); return ( <div className={calculateClassName}> <button onClick={handleClick}>Toggle</button> </div> ); }; export default MyComponent;
See the Pen Reactã§å¤æ°ã使ç¨ãã¦ã¯ã©ã¹åãæå®ããæ¹æ³ by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ãã®ä¾ã§ã¯ãcalculateClassName颿°ã¯isActiveã«ä¾åãã¦ãã¾ãã
isActiveã夿´ããããã³ã«æ°ããã¯ã©ã¹åãè¨ç®ããã¾ãããuseMemoã«ãã£ã¦åãisActiveã®å¤ã§ããã°ä»¥åã®è¨ç®çµæãåå©ç¨ããã¾ããåæ§ã«ãhandleClick颿°ãisActiveã«ä¾åãã¦ãã¾ãããuseCallbackã«ãã£ã¦ä»¥åã®é¢æ°ãåå©ç¨ããã¾ãã
ããã«ãããã³ã³ãã¼ãã³ãã®åæç»æã«ä½åãªè¨ç®ãåçæãè¡ãããã®ãé¿ãããã¨ãã§ãã¾ãããããã£ã¦ãããã©ã¼ãã³ã¹ãåä¸ããä¸è¦ãªåæç»ãçºçããå¯è½æ§ãä½ããªãã¾ãã
ã¾ãããã°ã«ãã¯ãªãã¯ãããã³ã³ã½ã¼ã«ã§ç¢ºèªã§ããããã«ãã¦ãã¾ãã
ãã°ã«ãã¯ãªãã¯ãããã³ã«ãã³ã³ã½ã¼ã«ã«isActive: trueã¾ãã¯isActive: falseã表示ãããããã«ãªãã¾ããããã«ãããã³ã³ãã¼ãã³ãã®ç¶æ ãæ£ããæ´æ°ããã¦ãããã¨ã確èªã§ãã¾ãã
ãããã®æ³¨æç¹ãå¿ã«çãã¤ã¤ã夿°ã使ã£ã¦ã¯ã©ã¹åãæå®ããæ¹æ³ã¯ãã³ã¼ãã®åå©ç¨æ§ãä¿å®æ§ãåä¸ãããä¸ã§é常ã«ä¾¿å©ãªææ³ã§ãã
ã» è¤æ°ã®ã¯ã©ã¹åãçµã¿åãããæ¹æ³
Tailwind CSSã®ã¦ã¼ãã£ãªãã£ã¯ã©ã¹ã¯ãçµã¿åããã¦ä½¿ç¨ãããã¨ãã§ãã¾ããããã«ãããã«ã¹ã¿ã ã¹ã¿ã¤ã«ã使ã§ãã¾ãã
const MyComponent = () => { return ( <div className="bg-blue-500 text-white p-4 rounded-lg shadow"> This is a div with multiple Tailwind CSS classes combined. </div> ); }; export default MyComponent;
See the Pen åçãªå¤æ°ã®ä½åãªåæç»ãåé¿ãã by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ä¸è¨ã®ã³ã¼ãã§ã¯è¤æ°ã®Tailwind CSSã¯ã©ã¹åã使ç¨ããã¦ãã¾ãã
bg-blue-500ã¯èæ¯è²ãéè²ã«è¨å®ããã¯ã©ã¹ã§ãtext-whiteã¯ããã¹ãã®è²ãç½è²ã«è¨å®ããã¯ã©ã¹ã
p-4ã¯ããã£ã³ã°ã4ã¤ã®æ¹åã«è¨å®ããã¯ã©ã¹ã§ãpã¯paddingã表ãã4ã¯4ã¤ã®æ¹åã«4ã¤ã®åä½ï¼é常ã¯ãã¯ã»ã«ï¼ã®ããã£ã³ã°ã追å ãã¦ãã¾ãã
rounded-lgã§ã¯ãè§ã丸ãããã¯ã©ã¹ã§ããlgã¯"large"ã®ç¥ã§ããã大ããªä¸¸ã¿ãæã¤è§ãè¨å®ãã¦ãã¾ãã
æå¾ã«ãshadowã¯ããã¯ã¹ã«å½±ã追å ããã¯ã©ã¹ã§ããã©ã«ãã®å½±ã追å ãã¾ãã
ãããã®ã¯ã©ã¹ãçµã¿åããããã¨ã§ã<div>è¦ç´ ãã¹ã¿ã¤ãªã³ã°ããã¾ããèæ¯è²ãéè²ã§ããã¹ããç½è²ã«ãªããå¨å²ã«ã¯4ã¤ã®åä½ã®ããã£ã³ã°ã追å ãããè§ã¯ä¸¸ããªããå½±ãä»ããç¶æ
ã®ããã¯ã¹è¦ç´ ãçæããã¾ãã
ãããã®ä¾ã§ã¯ãclassName屿§ã«Tailwind CSSã®ã¯ã©ã¹åãæå®ãããã¨ã§ã対å¿ããã¹ã¿ã¤ã«ãé©ç¨ããã¾ãã
Tailwind CSSã®ã¦ã¼ãã£ãªãã£ã¯ã©ã¹ã¯ãããã¸ã§ã¯ãã«ã¤ã³ã¹ãã¼ã«ãã¦è¨å®ããå¿ è¦ãããã¾ããã³ã¼ãå ã§ã¯ãclassName屿§ã使ç¨ãã¦è¤æ°ã®ã¯ã©ã¹åãçµã¿åããããã¨ã§ãå¿ è¦ãªã¹ã¿ã¤ã«ãé©ç¨ãã¾ãã
ããããã¹ã¿ã¤ã«ã®çµã¿åããã«ã¯é©åãªãã©ã³ã¹ãæ±ãããã¾ãã
ä¸è¦ãªã¯ã©ã¹ãå«ãããããã©ã¼ãã³ã¹ãæé©åããããã«Tailwind CSSã®ã³ã³ãã£ã°ã¬ã¼ã·ã§ã³ã使ã£ã¦å¿ è¦ãªã¯ã©ã¹ã ããå©ç¨ãããã¨ãéè¦ã§ãã
ããã«ãã¢ã¯ã»ã·ããªãã£ãèæ ®ããã³ã³ãã©ã¹ãæ¯ãããã¹ãã®èªã¿ããããªã©ã®ã¢ã¯ã»ã·ããªãã£ã¬ã¤ãã©ã¤ã³ã«å¾ã£ã¦ã¹ã¿ã¤ã«ã鏿ãã¾ããããããã¸ã§ã¯ããæé·ãæ°ããè¦ç´ ã追å ãããå ´åãé©åãªã³ã³ãã¼ãã³ãè¨è¨ã¨ã¹ã¿ã¤ã«ã®åå©ç¨ãæ¤è¨ãããã¨ã§ãã³ã¼ããã¼ã¹ã®ã¡ã³ããã³ã¹æ§ã¨æ¡å¼µæ§ãé«ãããã¨ãã§ãã¾ãã
ãããã®æ³¨æç¹ã念é ã«ç½®ããªãããTailwind CSSã®ã¦ã¼ãã£ãªãã£ã¯ã©ã¹ãé©åã«çµã¿åããããã¨ã§ãã«ã¹ã¿ã ã¹ã¿ã¤ã«ã使ããå¹ççãªã¹ã¿ã¤ãªã³ã°ãå®ç¾ãã¾ãããã
ã¦ã¼ãã£ãªãã£ã¯ã©ã¹ã使ã£ãå¹ççãªã¹ã¿ã¤ãªã³ã°ã®å®ä¾
Tailwind CSSã¯ã夿©è½ãªã¦ã¼ãã£ãªãã£ã¯ã©ã¹ãæä¾ããç´ æ©ã广çãªã¹ã¿ã¤ãªã³ã°ãå®ç¾ãããã¨ãã§ãã¾ãã
ããã§ã¯ãå®éã®ã³ã¼ãä¾ã交ããªãããTailwind CSSã®ã¦ã¼ãã£ãªãã£ã¯ã©ã¹ãæ´»ç¨ããã¹ã¿ã¤ãªã³ã°ã®ææ³ã«ã¤ãã¦ç´¹ä»ãã¾ãã
ã¾ãæåã«ãBoxã³ã³ãã¼ãã³ãã使ãã¦ã¿ã¾ãããã
ãã®ã³ã³ãã¼ãã³ãã¯ãå¹ ã¨é«ããæå®ããèæ¯è²ãè¨å®ããã ãã®ãã®ã§ãã
Tailwind CSSã®p-4ã¨m-autoã¯ã©ã¹ã使ç¨ãããã¨ã§ãå å´ã®ããã£ã³ã°ã調æ´ããæ°´å¹³æ¹åã«ä¸å¤®æããããã¨ãã§ãã¾ãã
const Box = () => { return ( <div className="w-48 h-48 bg-blue-500 p-4 m-auto"> {/* p-4: paddingã4ã¤ã®æ¹åã«é©ç¨ */} {/* m-auto: æ°´å¹³æ¹åã«ä¸å¤®æã */} <p className="text-white">Hello, Tailwind CSS!</p> </div> ); }; export default Box;
See the Pen è¤æ°ã®ã¯ã©ã¹åãçµã¿åãããæ¹æ³ by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ä¸è¨ã®ã³ã¼ãã§ã¯ãw-48ã¨h-48ã§å¹ ã¨é«ããæå®ããbg-blue-500ã§èæ¯è²ãæå®ãã¦ãã¾ãã
ããã«ãp-4ã¯ã©ã¹ã使ç¨ãã¦ããã¯ã¹ã®å å´ã®ããã£ã³ã°ã4ã¤ã®æ¹åã«é©ç¨ããm-autoã¯ã©ã¹ã使ç¨ãã¦ããã¯ã¹ãæ°´å¹³æ¹åã«ä¸å¤®æããã¦ãã¾ãã
以ä¸ã¯ããã¿ã³ã³ã³ãã¼ãã³ãï¼primaryã¨secondaryã®ã¹ã¿ã¤ã«ãæã¤ï¼ä¾ã§ãã
// App.js import Button from './Button'; const App = () => { const handleClick = () => { console.log('Button clicked!'); }; return ( <div> <Button primary onClick={handleClick}>Click me!</Button> <Button secondary onClick={handleClick}>Cancel</Button> </div> ); }; export default App;
handleClick颿°ã¯ããã¿ã³ãã¯ãªãã¯ãããã¨ãã«å¼ã³åºãããã³ã¼ã«ããã¯é¢æ°ã§ãã
ãã®é¢æ°ã¯ã·ã³ãã«ã«ã'Button clicked!'ã¨ããã¡ãã»ã¼ã¸ãã³ã³ã½ã¼ã«ã«åºåãã¾ãã
æåã®<Button>è¦ç´ ã¯primaryããããã£ãtrueã«è¨å®ãã¦ãèæ¯è²ãéã§ããã¹ããç½ã®ãã¿ã³ã表示ãã¾ãã
onClickããããã£ã«ã¯handleClick颿°ã渡ãã¦ããã®ãã¿ã³ãã¯ãªãã¯ãããã¨handleClick颿°ãå¼ã³åºããã¾ãã
2ã¤ç®ã®<Button>è¦ç´ ã¯secondaryããããã£ãtrueã«è¨å®ãã¦ãããèæ¯è²ãç°è²ã§ããã¹ããé»ã®ãã¿ã³ã表示ãã¾ããåæ§ã«ãonClickããããã£ã«ã¯handleClick颿°ã渡ããã¾ãã
const Button = ({ primary, secondary, children, onClick }) => { const buttonClasses = `px-4 py-2 rounded ${primary ? 'bg-blue-500 text-white' : ''} ${secondary ? 'bg-gray-300 text-black' : ''}`; return ( <button className={buttonClasses} onClick={onClick}> {children} </button> ); }; export default Button;
ä¸è¨ã®Buttonã³ã³ãã¼ãã³ãã¯ãåãåã£ãããããã£ã«å¿ãã¦ç°ãªãã¹ã¿ã¤ã«ã®ãã¿ã³ã表示ããå½¹å²ãæ ãã¾ãã
primaryããããã£ã¨secondaryããããã£ã¯ãããããtrueã¾ãã¯falseã®å¤ãæã¤ãã¼ã«å¤ã§ãããããã®ããããã£ã¯ããã¿ã³ã®ã¹ã¿ã¤ã«ãå¶å¾¡ããããã«ä½¿ç¨ããã¾ãã
childrenããããã£ã¯ã<Button>è¦ç´ ã®éã«æ¿å
¥ãããã³ã³ãã³ãï¼ããã§ã¯ããã¹ãï¼ã表ãã¾ãã
onClickããããã£ã¯ããã¿ã³ãã¯ãªãã¯ãããã¨ãã«å¼ã³åºãããã³ã¼ã«ããã¯é¢æ°ãåãåãã¾ãã
buttonClasses夿°ã¯ãåãåã£ãprimaryã¨secondaryã®å¤ã«åºã¥ãã¦ãé©åãªã¹ã¿ã¤ã«ãæã¤ãã¿ã³ã®ã¯ã©ã¹åã使ãã¾ãã
æçµçã«ã<button>è¦ç´ ã使ãããã¯ã©ã¹åãé©ç¨ããã¾ãããã¿ã³ãã¯ãªãã¯ãããã¨ã渡ãããonClickããããã£ã«æå®ãããã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããã¾ãã
See the Pen Reactã¨Tailwind CSSã®Boxã³ã³ãã¼ãã³ã by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ããã«ãããã¢ããªã±ã¼ã·ã§ã³ã¯2ã¤ã®ãã¿ã³ã表示ãããããããã¯ãªãã¯ãããã¨ãã«ã¡ãã»ã¼ã¸ãã³ã³ã½ã¼ã«ã«åºåããã·ã³ãã«ãªåä½ãæã£ã¦ãã¾ãã
次ã«ããªã¹ãã¢ã¤ãã ã³ã³ãã¼ãã³ãï¼ãªã¹ãå ã®é ç®ãã¹ã¿ã¤ãªã³ã°ï¼ä¾ãè¦ã¦ã¿ã¾ãããã
const ListItem = ({ children }) => { return ( <li className="py-1 border-b border-gray-300"> {children} </li> ); }; export default ListItem;
ãã®ã³ã³ãã¼ãã³ãã§ã¯ããªã¹ãã¢ã¤ãã ã®ã¹ã¿ã¤ã«ãæå®ãã¦ãã¾ããåãªã¹ãã¢ã¤ãã ã®ä¸ä¸ã«1ã¤ãã¤ãã¯ã»ã«ã®ã°ã¬ã¼ã®å¢çç·ã表示ããã¾ãã
ãã®ã³ã³ãã¼ãã³ãã¯ã次ã®ãããªå½¹å²ãæããã¾ãã
liè¦ç´ ï¼ãªã¹ãã¢ã¤ãã ï¼ã«å¯¾ãã¦ãclassName屿§ã«"py-1 border-b border-gray-300"ã¨ããCSSã¯ã©ã¹ãæå®ãã¦ãã¾ãã
py-1ã¯ããªã¹ãã¢ã¤ãã ã®ä¸ä¸ã«1åä½ï¼é常ã¯1remãªã©ï¼ã®ããã£ã³ã°ãè¨å®ãã¾ããä¸ä¸ã«ã¹ãã¼ã¹ã使ãã¦ãã¢ã¤ãã éãè¦è¦çã«åºåãç®çã§ä½¿ç¨ããããã¨ãããã¾ãã
border-bã¯ããªã¹ãã¢ã¤ãã ã®ä¸é¨ã«ãã¼ãã¼ï¼å¢çç·ï¼ã追å ãã¾ãã
border-gray-300ã¯ããã¼ãã¼ã®è²ãã°ã¬ã¼ï¼Grayï¼ã®ä¸éè²ï¼300çªç®ã®ã°ã¬ã¼ã¹ã±ã¼ã«ã«ã©ã¼ï¼ã«è¨å®ãã¾ãã
ãããã£ã¦ããã®ListItemã³ã³ãã¼ãã³ãã¯ã渡ãããchildrenããªã¹ãã¢ã¤ãã ã¨ãã¦è¡¨ç¤ºããä¸ä¸ã«å°ãã®ã¹ãã¼ã¹ã¨ä¸é¨ã«ã°ã¬ã¼ã®ãã¼ãã¼ãæã¤ãªã¹ãã¢ã¤ãã ãçæãã¾ãã
ListItemã³ã³ãã¼ãã³ãã¯å¼æ°ã¨ãã¦childrenãåãåãã¾ããchildrenã¯ãListItemã³ã³ãã¼ãã³ããå¼ã³åºãããéã«ãã³ã³ãã¼ãã³ãã®ã¿ã°å ã«æ¿å ¥ãããå 容ã表ãã¾ãããã¨ãã°ã以ä¸ã®ããã«ä½¿ç¨ãã¾ãã
import ListItem from './ListItem'; const App = () => { return ( <ul> <ListItem>Item 1</ListItem> <ListItem>Item 2</ListItem> <ListItem>Item 3</ListItem> </ul> ); }; export default App;
åListItemã³ã³ãã¼ãã³ãã®åè¦ç´ ï¼ããã§ã¯æååï¼ã¯ãListItemã³ã³ãã¼ãã³ãå ã®{children}ã®é¨åã«ä»£å ¥ããããªã¹ãã¢ã¤ãã ãã¬ã³ããªã³ã°ããã¾ãã
See the Pen Reactã¨Tailwind CSSã®ãã¿ã³ã³ã³ãã¼ãã³ã by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ãããããè¤æ°ã®ã¹ã¿ã¤ãªã³ã°ããã¦ããã¾ãã
以ä¸ã¯ããã©ã¼ã ã³ã³ãã¼ãã³ãï¼å ¥åã¨éä¿¡ãã¿ã³ãã¹ã¿ã¤ãªã³ã°ï¼ã¨ãªãã¾ãã
const Form = () => { return ( <form className="flex flex-col space-y-4"> <input type="text" className="px-4 py-2 border border-gray-300 rounded" placeholder="åå" /> <input type="email" className="px-4 py-2 border border-gray-300 rounded" placeholder="ã¡ã¼ã«ã¢ãã¬ã¹" /> <textarea className="px-4 py-2 border border-gray-300 rounded" placeholder="ã¡ãã»ã¼ã¸"></textarea> <button type="submit" className="px-4 py-2 bg-blue-500 text-white rounded">éä¿¡</button> </form> ); }; export default Form;
See the Pen Reactã¨Tailwind CSSã®ãªã¹ãã¢ã¤ãã ã³ã³ãã¼ãã³ã by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ãã®ã³ã³ãã¼ãã³ãã§ã¯ããã©ã¼ã ã®å ¥åã¨éä¿¡ãã¿ã³ãã¹ã¿ã¤ãªã³ã°ãã¦ãã¾ããåå ¥åãã£ã¼ã«ãã«ã¯ä¸¸ã¿ã帯ã³ãã°ã¬ã¼ã®æ ç·ã表示ãããéä¿¡ãã¿ã³ã¯éè²ã®èæ¯ã¨ç½è²ã®æåã§ã¹ã¿ã¤ã«ããã¾ãã
ãã®Formã³ã³ãã¼ãã³ãã¯ã以ä¸ã®è¦ç´ ãå«ãã§ãã¾ãã
formè¦ç´ ï¼ãã©ã¼ã è¦ç´ ï¼ã«å¯¾ãã¦ãclassName屿§ã«"flex flex-col space-y-4"ã¨ããCSSã¯ã©ã¹ãæå®ãã¦ãã¾ãã
flexã¯ã©ã¹ã¯ãåè¦ç´ ãæ¨ªã«ä¸¦ã¹ãããã®flexã³ã³ããã¼ã使ãã¾ããããã§ã¯ãå ¥åãã£ã¼ã«ãã¨éä¿¡ãã¿ã³ã縦ã«ä¸¦ã¶ããã«é ç½®ãã¦ãã¾ãã
flex-colã¯ã©ã¹ã¯ãflexã³ã³ããã¼å ã®è¦ç´ ã縦æ¹åï¼ã«ã©ã ï¼ã«é ç½®ãã¦ãã¾ãã
space-y-4ã¯ã©ã¹ã¯ãflexã³ã³ããã¼å ã®è¦ç´ ï¼å ¥åãã£ã¼ã«ãã¨éä¿¡ãã¿ã³ï¼ã®éã«ä¸ä¸æ¹åã«4åä½ï¼é常ã¯4remãªã©ï¼ã®ã¹ãã¼ã¹ã使ãã¾ãã
inputè¦ç´ ï¼ããã¹ãå ¥åãã£ã¼ã«ãï¼ã3ã¤ããã¾ããããããã®inputè¦ç´ ã«ã¯æ¬¡ã®ãããªå±æ§ã¨CSSã¯ã©ã¹ãæå®ãã¦ãã¾ãã
type="text"ããã³type="email"ã¯ãããããããã¹ãå ¥åã¨ã¡ã¼ã«ã¢ãã¬ã¹å ¥åã示ãã¾ãã
className="px-4 py-2 border border-gray-300 rounded"ã¯ãå ¥åãã£ã¼ã«ãã«å ±éã®ã¹ã¿ã¤ã«ãé©ç¨ãã¦ãã¾ãã
px-4ã¨py-2ã¯ã横ã¨ç¸¦ã®ããã£ã³ã°ãè¨å®ããborder border-gray-300ã¯ããã¼ãã¼ï¼å¢çç·ï¼ã追å ããè²ãã°ã¬ã¼ã«è¨å®ãã¦ãã¾ããroundedã¯ãè§ã丸ãããããã®ã¹ã¿ã¤ã«ãé©ç¨ãã¾ãã
textareaè¦ç´ ï¼ããã¹ãã¨ãªã¢ï¼ã1ã¤ããã¾ããããã¯ãè¤æ°è¡ã®ããã¹ãå ¥åç¨ã®ã¨ãªã¢ãæä¾ãã¾ããtextareaã«ã¯placeholder屿§ã¨å ±ã«ãåæ§ã®ã¹ã¿ã¤ã«ã¯ã©ã¹ãæå®ããã¦ãã¾ãã
buttonè¦ç´ ï¼éä¿¡ãã¿ã³ï¼ã1ã¤ããã¾ãã
buttonè¦ç´ ã«ã¯type="submit"屿§ãæå®ããã¦ãããããã«ãã£ã¦ãã©ã¼ã ãéä¿¡ããããã¨ã示ããã¾ããã¾ããclassName="px-4 py-2 bg-blue-500 text-white rounded"ã«ãã£ã¦ãéä¿¡ãã¿ã³ã«ã¹ã¿ã¤ã«ãé©ç¨ããã¾ããèæ¯è²ãéè²ï¼blue-500ï¼ãããã¹ããç½è²ã«è¨å®ãããè§ã丸ããªãã¾ãã
ãã®ããã«ãFormã³ã³ãã¼ãã³ãã¯ãflexã¬ã¤ã¢ã¦ãã使ã£ã¦å ¥åãã£ã¼ã«ãã¨éä¿¡ãã¿ã³ã縦ã«é ç½®ããçµ±ä¸ãããã¹ã¿ã¤ã«ãé©ç¨ãããã©ã¼ã ãçæãã¾ãã
ããã§ãReactã§Tailwind CSSã®ã¦ã¼ãã£ãªãã£ã¯ã©ã¹ã使ç¨ããã³ã³ãã¼ãã³ãã宿ãã¾ããããããã®ã³ã³ãã¼ãã³ããä»ã®ã³ã³ãã¼ãã³ãã¨çµã¿åããã¦ãèªç±ã«ã¹ã¿ã¤ãªã³ã°ã§ãã¾ãã
Tailwind CSSã®ã¦ã¼ãã£ãªãã£ã¯ã©ã¹ãå©ç¨ãããã¨ã§ãåé·ãªCSSã³ã¼ããæ¸ãå¿ è¦ããªããªãã¾ãã
代ããã«ãã³ã³ãã¼ãã³ãã«å¿ è¦ãªã¹ã¿ã¤ãªã³ã°ãã·ã³ãã«ãªã¯ã©ã¹åã§æå®ã§ãã¾ããããã«ãããéçºè ã¯ããè¿ éãã¤å¹ççã«ã¹ã¿ã¤ã«ã調æ´ã§ããããã«ãªãã¾ãã
ç°¡åãªã¬ã¤ã¢ã¦ãã®å®è£ ä¾
Reactã¨Tailwind CSSã使ã£ãã·ã³ãã«ãªã¬ã¤ã¢ã¦ãã®ä¾ãç´¹ä»ãã¾ãã
Tailwind CSSã¯ãJSXã®ã¯ã©ã¹å±æ§ã«æå®ãããã¨ã§ãç°¡åã«ã¬ã¤ã¢ã¦ããé©ç¨ã§ãã便å©ãªCSSãã¬ã¼ã ã¯ã¼ã¯ã§ãã
ã» Flexboxã使ã£ãä¸å¤®æã
ã¾ãã¯ãFlexboxãå©ç¨ãã¦è¦ç´ ãä¸å¤®æãããæ¹æ³ãè¦ã¦ã¿ã¾ãããã
const CenteredBox = () => { return ( <div className="flex justify-center items-center h-screen"> <div className="bg-blue-500 text-white p-4"> This box is centered both horizontally and vertically. </div> </div> ); }; export default CenteredBox;
See the Pen Reactã¨Tailwind CSSã®ãã©ã¼ã ã³ã³ãã¼ãã³ã by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ä¸è¨ã®ã³ã¼ãã¯ãReactã³ã³ãã¼ãã³ãã§ããCenteredBoxãå®ç¾©ãã¦ãã¾ãããã®ã³ã³ãã¼ãã³ãã¯ãç»é¢ã«æ°´å¹³ããã³åç´æ¹åã«ä¸å¤®æããããããã¯ã¹ã表示ãã¾ãã
ãã®ã³ã¼ãã¯ã2ã¤ã®divè¦ç´ ã§æ§æããã¦ãã¾ãã
æåã®divè¦ç´ ã§ã¯ãclassName屿§ã« "flex justify-center items-center h-screen" ã¨ããå¤ãæå®ãã¦ãã¾ããããã¯ãFlexboxãç¨ãã¦è¦ç´ ãé ç½®ããããã®ã¯ã©ã¹ãé©ç¨ãã¦ãã¾ãã
"flex"ã¯è¦ç´ å ã®ã³ã³ãã³ããFlexboxã¨ãã¦é ç½®ããããã®ã¯ã©ã¹ã§ããã"justify-center"ã¨"items-center"ã¯ãããããè¦ç´ ãæ°´å¹³ããã³åç´æ¹åã«ä¸å¤®æãããããã®ã¯ã©ã¹ã§ãã
"h-screen"ã¯ãè¦ç´ ãç»é¢å ¨ä½ã®é«ãã«ããããã®ã¯ã©ã¹ã§ããã®è¦ç´ ã¯ç»é¢å ¨ä½ãè¦ãããã«ãµã¤ãºãè¨å®ããã¾ãã
2çªç®ã®divè¦ç´ ã§ã¯ãclassName屿§ã« "bg-blue-500 text-white p-4" ã¨ããå¤ãæå®ãã¦ãã¾ããããã¯ãããã¯ã¹ã®ã¹ã¿ã¤ã«ãæå®ããããã®ã¯ã©ã¹ã§ãã
"bg-blue-500"ã¯èæ¯è²ãéã«è¨å®ãã"text-white"ã¯æåè²ãç½ã«è¨å®ãã¾ãã"p-4"ã¯å å´ã®ããã£ã³ã°ã4ã¤ã®åä½ï¼é常ã¯ãã¯ã»ã«ï¼ã«è¨å®ãã¾ãã
ããã«ãããèæ¯è²ãéããç½ãããã¹ããå«ãããã¯ã¹ã表示ããã¾ãã
以ä¸ã®è¦ç´ ããFlexboxãå©ç¨ãã¦ç»é¢å ¨ä½ã«åºãã親è¦ç´ ï¼flexã³ã³ããï¼å ã«ä¸å¤®æããããç¶æ ã§é ç½®ããã¾ãã
ããã¯ã¹å ã«ã¯ããThis box is centered both horizontally and vertically.ãã¨ããããã¹ãã表示ããã¾ãã
Appã³ã³ãã¼ãã³ãã§CenteredBoxã³ã³ãã¼ãã³ãã使ç¨ããä¾ã以ä¸ã«ç¤ºãã¾ãã
import CenteredBox from './CenteredBox'; const App = () => { return ( <div> <h1>親ã³ã³ãã¼ãã³ã</h1> <p>ä»ã®è¦ç´ ããããããããªã</p> <CenteredBox /> </div> ); }; export default App;
以ä¸ããReactã¨Tailwind CSSã使ã£ãã·ã³ãã«ãªä¸å¤®æãã®ã¬ã¤ã¢ã¦ãã®ä¾ã§ãã
Tailwind CSSã使ããã¨ã§ãã¯ã©ã¹ãç°¡åã«é©ç¨ãã¦ã¬ã¤ã¢ã¦ããè¡ããã¨ãã§ããå¹ççã§è¦ãããã³ã¼ããè¨è¿°ãããã¨ãã§ãã¾ãã
ã» ã°ãªããã·ã¹ãã ã使ã£ã2åã®ã¬ã¤ã¢ã¦ã
ãã°ãªããã·ã¹ãã ã使ç¨ãã2åã®ã¬ã¤ã¢ã¦ããã®ã³ã³ãã¼ãã³ãã使ããã¨ã§ãç°¡åã«2ã¤ã®ã«ã©ã ãæã¤ã·ã³ãã«ãªã¬ã¤ã¢ã¦ããå®ç¾ã§ãã¾ãã
const TwoColumnLayout = () => { return ( <div className="grid grid-cols-2 gap-4"> <div className="bg-green-500 text-white p-4">Column 1</div> <div className="bg-red-500 text-white p-4">Column 2</div> </div> ); }; export default TwoColumnLayout;
See the Pen Reactã¨Tailwind CSSã§Flexboxãå©ç¨ãã¦è¦ç´ ãä¸å¤®æãããæ¹æ³ by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ã³ã³ãã¼ãã³ãå é¨ã®JSXã§ã¯ã2ã¤ã®ã«ã©ã ãå®ç¾©ããã¦ãã¾ããæåã®ã«ã©ã ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
<div className="bg-green-500 text-white p-4">Column 1</div>
ä¸è¨ã®ã«ã©ã ã¯ç·è²ã®èæ¯ã¨ç½è²ã®ããã¹ãã§ãããã£ã³ã°ãè¨å®ããã¦ãã¾ãããã®ã«ã©ã ã«ã¯ãColumn 1ãã¨ããããã¹ããå«ã¾ãã¦ãã¾ãã
2çªç®ã®ã«ã©ã ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
<div className="bg-red-500 text-white p-4">Column 2</div>
ãã®ã«ã©ã ã¯èµ¤è²ã®èæ¯ã¨ç½è²ã®ããã¹ãã§ãåæ§ã«ããã£ã³ã°ã追å ããã¦ãã¾ãããã®ã«ã©ã ã«ã¯ãColumn 2ãã¨ããããã¹ãã表示ããã¾ãã
ãã®ã³ã³ãã¼ãã³ãã使ç¨ããã¨ã2ã¤ã®ã«ã©ã ãæã¤ã°ãªããã¬ã¤ã¢ã¦ãã使ãããããããã®ã«ã©ã ã«ã¯ç°ãªãèæ¯è²ã¨ããã¹ãã表示ããã¾ãã
ã«ã©ã ã®å 容ãã¹ã¿ã¤ã«ã¯å¿ è¦ã«å¿ãã¦ç·¨éãã¦ãã ããã
ãã®ä¾¿å©ãªã³ã³ãã¼ãã³ãã使ç¨ããã¨ãç°ãªãèæ¯è²ãããã¹ããæã¤2ã¤ã®ã«ã©ã ãæã¤ã°ãªããã¬ã¤ã¢ã¦ããæè»½ã«ä½æã§ãã¾ãã
ã¾ãããã®ã³ã³ãã¼ãã³ãã¯ããã¬ãã·ãã«ã§ä½¿ãåæããããã¬ã¹ãã³ã·ããªãã¶ã¤ã³ã«ã対å¿ãã¦ããããããã¾ãã¾ãªããã¤ã¹ãç»é¢ãµã¤ãºã«å¯¾ãã¦ãé©åã«è¡¨ç¤ºãããã§ãããã
ãã®ãããªãã³ã³ãã¼ãã³ãã使ã£ã¦ãè¦ãããæ´ç·´ããã2åã®ã¬ã¤ã¢ã¦ãã使ããã¤ã³ãã¯ãã®ããã³ã³ãã³ããæä¾ãããã¨ã§ãã¦ã¼ã¶ã¼ã«ãã価å¤ã®ããä½é¨ãæä¾ã§ãã¾ãã
ã» é åçãªæ°´å¹³Flexã¬ã¤ã¢ã¦ããå®ç¾ããæ¹æ³
Tailwind CSSã§Flexboxã使ã£ãè¦ç´ ã®æ°´å¹³é ç½®ã«ã¤ãã¦ãåããããã解説ãã¾ãã
Flexã¬ã¤ã¢ã¦ããæ´»ç¨ãã¦ãã¹ã¿ã¤ãªãã·ã¥ãªãã¶ã¤ã³ã§2ã¤ã®è¦ç´ ãæ°´å¹³æ¹åã«åçã«é ç½®ããæ¹æ³ããç´¹ä»ãã¾ãã
以ä¸ã¯Reactã³ã³ãã¼ãã³ãã®ã³ã¼ãä¾ã§ãã
// Reactã³ã³ãã¼ãã³ãã使ç¨ãã¦ãæ°´å¹³æ¹åã«2ã¤ã®è¦ç´ ãFlex ã¬ã¤ã¢ã¦ãã§é ç½®ããã³ã³ãã¼ãã³ããå®ç¾© const HorizontalFlexLayout = () => { return ( // Flexã³ã³ãã <div className="flex justify-between"> {/* æåã®åè¦ç´ */} <div className="bg-yellow-500 text-white p-4">Left</div> {/* 2çªç®ã®åè¦ç´ */} <div className="bg-purple-500 text-white p-4">Right</div> </div> ); }; export default HorizontalFlexLayout;
See the Pen Reactã¨Tailwind CSSã§ã°ãªããã·ã¹ãã ã使ã£ã2åã®ã¬ã¤ã¢ã¦ã by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ä¸è¨ã®ã³ã¼ãã§ã¯ãflex-containerã¯ã©ã¹ã使ç¨ãã¦2ã¤ã®è¦ç´ ãæ°´å¹³ã«é ç½®ãã¦ãã¾ããå·¦å´ã®è¦ç´ ã¯é»è²ã®èæ¯ã«ç½è²ã®ããã¹ãã§ãLeftãã¨è¡¨ç¤ºãããå³å´ã®è¦ç´ ã¯ç´«è²ã®èæ¯ã«ç½è²ã®ããã¹ãã§ãRightãã¨è¡¨ç¤ºããã¾ãã
ãã®ã³ã³ãã¼ãã³ããä»ã®ãã¡ã¤ã«ããã¤ã³ãã¼ããã¦ä½¿ããã¨ãã§ãã¾ãã
ãããå¤é¨CSSãã¡ã¤ã«ã¨ãã¦ä½æããå ´åã§ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
/* Flexã³ã³ããã«å¯¾ããã¹ã¿ã¤ãªã³ã° */ .flex-container { display: flex; /* Flexã³ã³ããã表示ã¿ã¤ãã¨ãã¦è¨å® */ justify-content: space-between; /* åè¦ç´ ãã³ã³ããã®ä¸¡ç«¯ã«é ç½® */ /* ããã«èæ¯è²ãä½ç½ããã¼ãã¼ãªã©ã®ã¹ã¿ã¤ã«ã追å ã§ãã¾ã */ } /* å·¦å´ã®åè¦ç´ ã«å¯¾ããã¹ã¿ã¤ãªã³ã° */ .left-element { /* ããã«èæ¯è²ãããã¹ãã®ã¹ã¿ã¤ã«ã追å ã§ãã¾ã */ background-color: yellow; color: white; padding: 1rem; } /* å³å´ã®åè¦ç´ ã«å¯¾ããã¹ã¿ã¤ãªã³ã° */ .right-element { /* ããã«èæ¯è²ãããã¹ãã®ã¹ã¿ã¤ã«ã追å ã§ãã¾ã */ background-color: purple; color: white; padding: 1rem; }
ã§ãããTailwind CSSã使ãã¨ãCSSãã¡ã¤ã«ãå¥éç¨æããå¿ è¦ããªããHTMLãReactã³ã³ãã¼ãã³ãå ã§ç´æ¥ã¹ã¿ã¤ãªã³ã°ãè¡ããã¨ãã§ãã¾ããããã«ãããã¹ã¿ã¤ã«ã®å¤æ´ãé©ç¨ãç°¡åã«ãªããéçºã®å¹çãåä¸ãã¾ãã
Flexã¬ã¤ã¢ã¦ãã使ããã¨ã§ãè¦ç´ ãã³ã³ããã®å·¦å³ã«åçã«é ç½®ããããã¨ãä¿è¨¼ããã¾ããããã«ãTailwind CSSã®ã¯ã©ã¹ãæ´»ç¨ãããã¨ã§ãç°¡åã«ã¹ã¿ã¤ãªãã·ã¥ãªãã¶ã¤ã³ãé©ç¨ã§ãã¾ãã
ãããããªãã®Reactããã¸ã§ã¯ãã«å°å ¥ããã ãã§ãé åçãªæ°´å¹³Flexã¬ã¤ã¢ã¦ããå®ç¾ãããã¨ãã§ãã¾ããä»ã®è¦ç´ ã¨çµã¿åãããããã«ã¹ã¿ãã¤ãºããããããã¨ã§ãããæ´ç·´ãããUIãä½ãä¸ãããã¨ãã§ããã§ãããã
Flexboxã使ã£ãæ°´å¹³é ç½®ã¯ãã¬ã¹ãã³ã·ããªãã¶ã¤ã³ãã¦ã¼ã¶ããªãã£ã®åä¸ã«ãå½¹ç«ã¡ã¾ãããã²ãã®æ¹æ³ãæ´»ç¨ãã¦ãè¦æ ãã®è¯ãWebã¢ããªã±ã¼ã·ã§ã³ã使ãã¦ãã ããã
ã¡ãã£ã¢ã¯ã¨ãªã®æ´»ç¨æ¹æ³
Tailwind CSSã¯ãCSSãã¬ã¼ã ã¯ã¼ã¯ã§ãããã¬ã¹ãã³ã·ããªWebãã¶ã¤ã³ãç°¡åã«å®ç¾ããããã«è¨è¨ããã¦ãã¾ãã
æ¥é è¾ã¨ãã¦ä½¿ãããsm:ãmd:ãlg:ãxl:ãªã©ã¯ãç»é¢ãµã¤ãºã«å¿ãã¦ç°ãªãã¹ã¿ã¤ã«ãé©ç¨ããããã®ã¯ã©ã¹ãã¬ãã£ãã¯ã¹ã§ãã
以ä¸ã«ãããããã®æ¥é è¾ã«ã¤ãã¦è©³ãã解説ãã¾ãã
sm:ï¼Small Screenï¼
sm:æ¥é è¾ã¯ãå°ããç»é¢ï¼ã¹ãã¼ããã©ã³ãªã©ï¼ã«å¯¾ãã¦ã¹ã¿ã¤ã«ãé©ç¨ããããã®ãã¬ãã£ãã¯ã¹ã§ããä¾ãã°ãsm:text-lgã¯ãå°ããç»é¢ã§ã¯å¤§ããªããã¹ããµã¤ãºãé©ç¨ãã¾ãã
md:ï¼Medium Screenï¼
md:æ¥é è¾ã¯ãä¸ç¨åº¦ã®ãµã¤ãºã®ç»é¢ï¼ã¿ãã¬ãããªã©ï¼ã«å¯¾ãã¦ã¹ã¿ã¤ã«ãé©ç¨ããããã®ãã¬ãã£ãã¯ã¹ã§ããä¾ãã°ãmd:flexã¯ãä¸ãµã¤ãºã®ç»é¢ã§è¦ç´ ããã¬ãã¯ã¹ããã¯ã¹ã¨ãã¦è¡¨ç¤ºãã¾ãã
lg:ï¼Large Screenï¼
lg:æ¥é è¾ã¯ã大ããªãµã¤ãºã®ç»é¢ï¼ãã¹ã¯ããããªã©ï¼ã«å¯¾ãã¦ã¹ã¿ã¤ã«ãé©ç¨ããããã®ãã¬ãã£ãã¯ã¹ã§ããä¾ãã°ãlg:w-1/2ã¯ã大ããªç»é¢ã§ã¯è¦ç´ ã®å¹ ã50ï¼ ã«è¨å®ãã¾ãã
xl:ï¼Extra Large Screenï¼
xl:æ¥é è¾ã¯ãé常ã«å¤§ããªãµã¤ãºã®ç»é¢ã«å¯¾ãã¦ã¹ã¿ã¤ã«ãé©ç¨ããããã®ãã¬ãã£ãã¯ã¹ã§ããããã¯ãé常ã®ãã¹ã¯ããããããããã«å¤§ããªç»é¢ãæ³å®ãã¦ãã¾ãã
ãããã®ãã¬ãã£ãã¯ã¹ã使ç¨ãããã¨ã§ãç°ãªãç»é¢ãµã¤ãºã«å¿ãã¦é©åãªã¹ã¿ã¤ã«ãé©ç¨ã§ãã¾ãã
ä¾ãã°ã以ä¸ã®ããã«è¨è¿°ãããã¨ãã§ãã¾ãã
<div className="text-center sm:text-left md:text-right lg:text-justify xl:text-center">
This text will be centered on small and extra-large screens,
left-aligned on medium screens, right-aligned on large screens,
and justified on extra-large screens.
</div>
ããã§ãtext-centerã¯ã©ã¹ã¯å ¨ã¦ã®ç»é¢ãµã¤ãºã§é©ç¨ããã¾ãããsm:text-leftã¯å°ããç»é¢ã§ã®ã¿ãmd:text-rightã¯ä¸ãµã¤ãºã®ç»é¢ã§ã®ã¿ãlg:text-justifyã¯å¤§ããªç»é¢ã§ã®ã¿ãxl:text-centerã¯é常ã«å¤§ããªç»é¢ã§ã®ã¿é©ç¨ããã¾ãã
ã§ã¯ãå®ç¨çãªä¾ã§è¦ã¦ããã¾ãããã
ä¾ã¨ãã¦ãã¬ã¹ãã³ã·ããªããã²ã¼ã·ã§ã³ãã¼ã使ãã¾ãããã®ããã²ã¼ã·ã§ã³ãã¼ã§ã¯ãå°ããç»é¢ã§ã¯ãã³ãã¼ã¬ã¼ã¢ã¤ã³ã³ã§ã¡ãã¥ã¼ãééããä¸ãµã¤ãºä»¥ä¸ã®ç»é¢ã§ã¯ãªã³ã¯ãæ°´å¹³ã«è¡¨ç¤ºãã¾ãã
import { useState } from 'react'; const Navbar = () => { const [isMenuOpen, setMenuOpen] = useState(false); const toggleMenu = () => { setMenuOpen((prevState) => !prevState); }; return ( <nav className="bg-gray-800 px-4 py-3"> <div className="flex items-center justify-between"> <div className="text-white font-semibold text-lg"> My Website </div> {/* Hamburger menu icon for small screens */} <div className="md:hidden cursor-pointer text-white" onClick={toggleMenu} > {isMenuOpen ? 'Close' : 'Menu'} </div> </div> {/* Responsive menu */} <div className={`md:flex ${isMenuOpen ? 'block' : 'hidden'}`} > <ul className="md:flex items-center space-x-4 mt-4"> <li> <a href="#" className="text-white hover:text-gray-300">Home</a> </li> <li> <a href="#" className="text-white hover:text-gray-300">About</a> </li> <li> <a href="#" className="text-white hover:text-gray-300">Services</a> </li> <li> <a href="#" className="text-white hover:text-gray-300">Contact</a> </li> </ul> </div> </nav> ); }; export default Navbar;
See the Pen Reactã¨Tailwind CSSã§æ°´å¹³Flexã¬ã¤ã¢ã¦ããå®ç¾ããæ¹æ³ by dev.K | Webã¢ããªéçºè (@enjinia_f) on CodePen.
ãã®Navbarã¯ããã¾ãã¾ãªç»é¢ãµã¤ãºã«å¿ãã¦ã¬ã¤ã¢ã¦ãã¨è¡¨ç¤ºã調æ´ãã¾ãã
ã³ã³ãã¼ãã³ãã§ã¯ãuseStateããã¯ã使ã£ã¦isMenuOpenã¨ããç¶æ 夿°ã¨ãã®æ´æ°é¢æ°setMenuOpenã宣è¨ãã¦ãã¾ãã
isMenuOpenã¯åæå¤falseã§ãã¡ãã¥ã¼ãéãã¦ãããã©ããã管çãã¾ããã¯ãªãã¯ã¤ãã³ãã«ãã£ã¦toggleMenu颿°ãå¼ã³åºãããsetMenuOpenã使ã£ã¦ã¡ãã¥ã¼ã®è¡¨ç¤ºç¶æ ãåãæ¿ãã¾ãã
表示é¨åã§ã¯ã<nav>è¦ç´ ã§ããã²ã¼ã·ã§ã³ãã¼å
¨ä½ãå²ã¿ããã´ã¨ã¡ãã¥ã¼ã¢ã¤ã³ã³ã<div>è¦ç´ ã§é
ç½®ãã¾ããããã«ã{ }å
ã§JavaScriptã®å¼ã使ç¨ãã¦æ¡ä»¶ã«å¿ãã¦ã¡ãã¥ã¼ã表示ã¾ãã¯é表示ã«ãã¦ãã¾ãã
ã¹ã¿ã¤ãªã³ã°ã¯ãbg-gray-800ã¯èæ¯è²ãç°è²ã«è¨å®ããpx-4ã¨py-3ã¯ããã£ã³ã°ãæå®ãã¦ãã¾ããtext-whiteãtext-lgã¯æåã®è²ã¨ãµã¤ãºã調æ´ããflexãitems-centerãªã©ã¯ã¬ã¤ã¢ã¦ããå¶å¾¡ããã¯ã©ã¹åã§ãã
ããã«ããªã³ã¯ã¨ãã¦æ©è½ããã¡ãã¥ã¼ã¢ã¤ãã ã¯<ul>ã¨<li>ã使ç¨ãã¦ãªã¹ãå½¢å¼ã§è¡¨ç¤ºãã¦ãã¾ããåã¡ãã¥ã¼ã¢ã¤ãã ã«ã¯<a>è¦ç´ ã使ç¨ããhover:text-gray-300ã¯ã©ã¹ãé©ç¨ãããã¨ã§ããã¦ã¹ããã¼æã«ããã¹ãè²ãå¤ããããã«è¨å®ãã¦ãã¾ãã
ããã«ããããã®Navbarã³ã³ãã¼ãã³ãã¯ããã´ï¼ãµã¤ãåï¼ã¨4ã¤ã®ã¡ãã¥ã¼ã¢ã¤ãã ï¼HomeãAboutãServicesãContactï¼ãå«ãã·ã³ãã«ãªããã²ã¼ã·ã§ã³ãã¼ãã¬ã¹ãã³ã·ãã«è¡¨ç¤ºãã¾ãã
å°ããç»é¢ã§ã¯ãã³ãã¼ã¬ã¼ã¡ãã¥ã¼ã¢ã¤ã³ã³ã表示ãããã¯ãªãã¯ããã¨ã¡ãã¥ã¼ã表示ããã¾ãã
ä¸ç¨åº¦ã®ç»é¢ãµã¤ãºä»¥ä¸ã§ã¯é常ã®ã¡ãã¥ã¼ã表示ãããåã¡ãã¥ã¼ã¢ã¤ãã ã¯é©åãªã¹ã¿ã¤ã«ãé©ç¨ããã¾ãã
ã¾ãããã®ã³ã³ãã¼ãã³ããReact Router v6ã¨ã®çµã¿åããã¯é常ã«ä¾¿å©ã§ãã®ã§ãå§ãã§ãã
React Router v6ã¨Navbarããã¾ãçµ±åãããã¨ãNavbarå ã®ãªã³ã¯ã¨React Routerã®ã«ã¼ãã£ã³ã°ãã·ã¼ã ã¬ã¹ã«é£æºãã¾ããããã«ãããã¢ããªã±ã¼ã·ã§ã³å ¨ä½ã®ã¦ã¼ã¶ã¼ã¨ã¯ã¹ããªã¨ã³ã¹ãåä¸ããããã²ã¼ã·ã§ã³ãã¹ã ã¼ãºã«è¡ãããã§ãããã
Tailwind CSSã®extendãªãã·ã§ã³
Tailwind CSSã®extendãªãã·ã§ã³ã§ã¦ãã¼ã¯ãªãã¿ã³ã¹ã¿ã¤ã«ã使ãããã¨ãå¯è½ã§ãã
以ä¸ã®ããã«ãTailwind CSSã®è¨å®ãã¡ã¤ã«ã§extendãªãã·ã§ã³ã使ç¨ãã¦æ°ããã¹ã¿ã¤ã«ã追å ãã¾ãã
// tailwind.config.js module.exports = { theme: { extend: { colors: { customBlue: '#3366FF', }, fontFamily: { customFont: ['Helvetica', 'Arial', 'sans-serif'], }, }, }, variants: { extend: {}, }, plugins: [], }
ããã§ã¯ãthemeãªãã¸ã§ã¯ãå ã®extendãªãã·ã§ã³ã使ç¨ãã¦æ°ããã¹ã¿ã¤ã«ã追å ãã¦ãã¾ãã
colorsãªãã¸ã§ã¯ãå ã§customBlueã¨ããæ°ããã«ã¹ã¿ã ã«ã©ã¼ãå®ç¾©ããfontFamilyãªãã¸ã§ã¯ãå ã§customFontã¨ããæ°ãããã©ã³ããã¡ããªã¼ãå®ç¾©ãã¦ãã¾ãã
次ã«ãReactã³ã³ãã¼ãã³ãã§æ°ããã¹ã¿ã¤ã«ãé©ç¨ãã¾ãã
// Button.js const Button = () => { return ( <button className="bg-customBlue hover:bg-blue-700 text-white font-customFont py-2 px-4 rounded" > Click me </button> ); }; export default Button;
ä¸è¨ã§ã¯ãextendãªãã·ã§ã³ã使ç¨ãã¦è¿½å ããæ°ããã¹ã¿ã¤ã«ãReactã³ã³ãã¼ãã³ãã§ä½¿ç¨ãã¦ãã¾ãã
å ·ä½çã«ã¯ãæ°ããã«ã¹ã¿ã ã«ã©ã¼customBlueã¨æ°ãããã©ã³ããã¡ããªã¼customFontããã¿ã³ã«é©ç¨ããã¾ãã
ãã®ããã«ãTailwind CSSã®extendãªãã·ã§ã³ã使ç¨ããã¨ãæ¢åã®ãã¼ãã«æ°ããã¹ã¿ã¤ã«ãç°¡åã«è¿½å ã§ãã¾ãã
ããã«ãããããæè»ã§ã«ã¹ã¿ãã¤ãºæ§ã®é«ãã¹ã¿ã¤ã«ãå®ç¾ãããã¨ãã§ãã¾ãã
Tailwind CSSã®ããªã¢ã³ãæ¡å¼µï¼extendãªãã·ã§ã³ï¼
Tailwind CSSã¯ãè±å¯ãªã¹ã¿ã¤ãªã³ã°ãªãã·ã§ã³ã¨æè»æ§ãæä¾ããããã³ãã¨ã³ããã¬ã¼ã ã¯ã¼ã¯ã¨ãã¦ãWebéçºè ã«åºãæç¨ããã¦ãã¾ãã
ãã®ä¸ã§ãç¹ã«ä¾¿å©ãªæ©è½ã®ä¸ã¤ããvariantsãªãã¸ã§ã¯ãå ã§ä½¿ç¨ãããextendãªãã·ã§ã³ã§ãã
ãã®ãªãã·ã§ã³ãæ´»ç¨ãããã¨ã§ãæ°ããªå¤ç¨®ï¼variantsï¼ãå®ç¾©ããæ¢åã®variantsã«æ°ããã¹ã¿ã¤ã«ã追å ãããã¨ãã§ãã¾ãã
以ä¸ã«ãå®è·µçãªä¾ã交ããªãããvariantsã®extendãªãã·ã§ã³ã使ã£ããã¿ã³ã¹ã¿ã¤ãªã³ã°ã«ã¤ãã¦ç´¹ä»ãã¾ãã
ã¾ããtailwind.config.jsãã¡ã¤ã«ãè¦ã¦ã¿ã¾ãããã
// tailwind.config.js module.exports = { theme: { extend: { colors: { primary: '#FF5733', }, fontFamily: { customFont: ['Helvetica', 'Arial', 'sans-serif'], }, }, }, variants: { extend: { backgroundColor: ['active'], textColor: ['visited'], }, }, plugins: [], }
ä¸è¨ã®ä¾ã§ã¯ãvariantsãªãã·ã§ã³ã®extendå ã§ãæ°ããvariantsãå®ç¾©ãã¦ãã¾ãã
backgroundColorï¼ ['active']ï¼ããã¯ãactiveç¶æ ã®è¦ç´ ã«å¯¾ãã¦èæ¯è²ã夿´ããæ°ããvariantsã§ãã
textColor: ['visited']ï¼ããã¯ãè¨ªåæ¸ã¿ã®ãªã³ã¯ã«å¯¾ãã¦ããã¹ãã®è²ã夿´ããæ°ããvariantsã§ãã
ãã®ããã«ãextendãªãã·ã§ã³ã使ç¨ãããã¨ã§ãæ°ããvariantsãå®ç¾©ããæ¢åã®variantsã«æ°ããã¹ã¿ã¤ã«ã追å ãããã¨ãå¯è½ã¨ãªãã¾ããã¾ããcolorsãfontFamilyãªã©ã®ä»ã®ãã¼ãã®ããããã£ãåæ§ã«extendãªãã·ã§ã³ã§æ¡å¼µã§ãã¾ãã
ããã§ã¯ãå ç¨ã®tailwind.config.jsã§å®ç¾©ããvariantsã®extendãªãã·ã§ã³ãé©ç¨ãããå®éã®ã³ã³ãã¼ãã³ãä¾ã示ãã¾ãã
// CustomButton.js const CustomButton = ({ disabled, onClick }) => { const handleClick = () => { if (!disabled && onClick) { onClick(); } }; return ( <button onClick={handleClick} className={`py-2 px-4 rounded ${disabled ? 'bg-gray-300 cursor-not-allowed' : 'bg-primary hover:bg-blue-700'} text-white font-bold`} disabled={disabled} > Click me </button> ); }; export default CustomButton;
ãã®CustomButtonã³ã³ãã¼ãã³ãã§ã¯ãå ç¨å®ç¾©ããbackgroundColor: ['active']ã使ç¨ããã¦ããªããããactiveç¶æ ã®ã¹ã¿ã¤ã«ã¯bg-primaryã¨ãªãã¾ããããã§ãprimaryã¯å ç¨è¨å®ã§å®ç¾©ããã«ã¹ã¿ã ã«ã©ã¼ã§ãã
ã¾ããtextColor: ['visited']ã«ãããè¨ªåæ¸ã¿ã®ãªã³ã¯ã«å¯¾ãã¦ã¯text-blue-600ãé©ç¨ããã¾ãã
ããã«ãã³ã³ãã¼ãã³ãã«æ¸¡ãããdisabledã®Propsã«ãã£ã¦ããã¿ã³ãç¡å¹åãããå ´åã¯èæ¯è²ãbg-gray-300ã¨ãªããã«ã¼ã½ã«ãcursor-not-allowedã«è¨å®ããã¾ãã
handleClickã¨ããæ°ãã颿°ãå®ç¾©ããã¦ãã¾ãããã®é¢æ°ã¯ããã¿ã³ãã¯ãªãã¯ãããéã®æ¯ãèããå¶å¾¡ãã¾ãã
handleClick颿°ã§ã¯ãdisabledãfalseã§ããããã¤onClickã®Propsãæå®ããã¦ããå ´åã«ã®ã¿ãonClickã®é¢æ°ãå®è¡ãã¾ããããã«ããããã¿ã³ãç¡å¹ãªå ´åã¯ã¯ãªãã¯ã¤ãã³ããç¡è¦ãããããã«ãªã£ã¦ãã¾ãã
ããã«ãããtailwind.config.jsã§å®ç¾©ããvariantsã®extendãªãã·ã§ã³ããReactã³ã³ãã¼ãã³ãã®ãã¿ã³ã«é©ç¨ããããã¨ã§ããã¿ã³ã®ç¶æ ã«å¿ããæè»ãªã¹ã¿ã¤ãªã³ã°ãå®ç¾ããã¾ãã
æå¾ã«
æ¬è¨äºã§ã¯ãTailwind CSSã®å©ç¹ã¨èª²é¡ãããã¦Reactã¢ããªã±ã¼ã·ã§ã³ã§ãã®ã¦ã¼ãã£ãªãã£ã¯ã©ã¹ãæ´»ç¨ããæ¹æ³ã«ã¤ãã¦è©³ããããªãã¯å¦ã³ã¾ããã
Tailwind CSSã¯ç¬èªã®å©ç¹ã¨èª²é¡ãæ±ãã¦ãã¾ãããReactã¢ããªã±ã¼ã·ã§ã³ã«çµ±åããéã«ã¯éå¸¸ã«æè»ã§å¹æçãªãã¼ã«ã§ãããã¨ããããã¾ããã
ããã¸ã§ã¯ãã®ãã¼ãºã«åããã¦ä¸æã«æ´»ç¨ãããã¨ã§ãã¹ã¿ã¤ãªã³ã°é¢ã§ã®å¹çã¨ä¸è²«æ§ãé«ãããã¨ãã§ããã§ãããã
ãªããä»åã¯darkModeãªãã·ã§ã³ãpluginsã®è¨å®ã«ã¤ãã¦ã¯è©³ç´°ã«è§¦ãã¾ããã§ãããããããã«é¢ããå ·ä½çãªã³ã¼ãä¾ãå¥ã®è¨äºã§è§£èª¬ãã¾ãã®ã§ããæ¥½ãã¿ã«ãã¦ãã¦ãã ããã
ããã§æ¬æ¥ã®å 容ã¯ä»¥ä¸ã¨ãªãã¾ãã
æå¾ã¾ã§ãèªã¿ããã ãããããã¨ããããã¾ããã
ãããã®è¨äºããå½¹ã«ç«ã¦ãå ´åã¯ãããã¯ãã¼ã¯ãå ±æããã¦ããã ããã¨å¹¸ãã§ãã
