1"use strict";(self.webpackChunkpyjun01_blog=self.webpackChunkpyjun01_blog||[]).push([[268],{6869:function(e,n,t){t.r(n),t.d(n,{default:function(){return te}});var l=t(6540),r=t(8453);function a(e,n){return n||(n=e.slice(0)),e.raw=n,e}var s=t(1510);const c="undefined"!=typeof window;var o=t(4848);const m=s.default.div.withConfig({displayName:"Result__ResultWrapper",componentId:"sc-1jvsvol-0"})(["margin:1.5rem 0;border:1px solid #cdcdcd;> p{margin:0;padding:0.5rem 1rem;border-bottom:1px solid #cdcdcd;}> div{padding:1rem;max-height:370px;overflow-y:scroll;*{margin:0;padding:0;}}"]);var i=function(e){let{children:n}=e;return(0,o.jsxs)(m,{children:[(0,o.jsx)("p",{children:"Demo"}),(0,o.jsx)("div",{children:c&&n})]})};function u(e,n){if(null==e)return{};var t={};for(var l in e)if({}.hasOwnProperty.call(e,l)){if(n.includes(l))continue;t[l]=e[l]}return t}const d=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],p=["children"],E=function(e){const n=[e[0]];for(let t=0,l=arguments.length<=1?0:arguments.length-1;t<l;t++)n.push(t+1<1||arguments.length<=t+1?void 0:arguments[t+1],e[t+1]);return n.join("")};function h(e){return function(n){for(var t=arguments.length,l=new Array(t>1?t-1:0),r=1;r<t;r++)l[r-1]=arguments[r];const a=E.apply(void 0,[n].concat(l));return function(n){let{children:t}=n,l=u(n,p);return(0,o.jsxs)(e,Object.assign({},l,{children:[(0,o.jsxs)("p",{children:["style: ",a]}),t]}))}}}d.forEach((e=>{h[e]=h(e)}));var g,y,f=h;const x=f.div(g||(g=a(["\n display: flex;\n justify-content: space-between;\n color: ",";\n"])),"#f00"),j=f.span(y||(y=a(["\n color: #000;\n font-weight: bold;\n"])));var S=function(){return(0,o.jsx)(i,{children:(0,o.jsxs)(x,{children:["Hello,",(0,o.jsx)(j,{children:"World!"})]})})};let b=function(){function e(){c&&document.head.appendChild(this.tag=document.createElement("style"))}return e.get=function(){return e.item||(e.item=new e),c&&!e.item.tag&&document.head.appendChild(e.item.tag=document.createElement("style")),e.item},e.prototype.generateClassName=function(e){if(!c)return"";const n="hash"+e.split("").reduce(((e,n)=>0|(e<<5)-e+n.charCodeAt(0)),0);const t="."+n+" { "+e+" }";return!this.tag.innerText.includes(t)&&this.tag.appendChild(document.createTextNode(t)),n},e}();var v=()=>b.get();const C=["children"],N=function(e){const n=[e[0]];for(let t=0,l=arguments.length<=1?0:arguments.length-1;t<l;t++)n.push(t+1<1||arguments.length<=t+1?void 0:arguments[t+1],e[t+1]);return n.join("")};function w(e){return function(n){for(var t=arguments.length,l=new Array(t>1?t-1:0),r=1;r<t;r++)l[r-1]=arguments[r];const a=N.apply(void 0,[n].concat(l)),s=v().generateClassName(a);return function(n){let{children:t}=n,l=u(n,C);return(0,o.jsx)(e,Object.assign({},l,{className:s.concat(l.className?" "+l.className:""),children:t}))}}}d.forEach((e=>{w[e]=w(e)}));var T,A,k=w;const L=k.div(T||(T=a(["\n display: flex;\n justify-content: space-between;\n width: 100%;\n color: ",";\n"])),"#f00"),$=k.span(A||(A=a(["\n color: #000;\n font-weight: bold;\n"])));var W=function(){return(0,o.jsx)(i,{children:(0,o.jsxs)(L,{children:["Hello,",(0,o.jsx)($,{children:"World!"})]})})};const H=["children"],J=function(e){const n=[e[0]];for(let t=0,l=arguments.length<=1?0:arguments.length-1;t<l;t++)n.push(t+1<1||arguments.length<=t+1?void 0:arguments[t+1],e[t+1]);return n.join("")};function O(e){return function(n){for(var t=arguments.length,l=new Array(t>1?t-1:0),r=1;r<t;r++)l[r-1]=arguments[r];const a=J.apply(void 0,[n].concat(l)),s=v().generateClassName(a);return function(n){let{children:t}=n,l=u(n,H);return(0,o.jsx)(e,Object.assign({},l,{className:s.concat(l.className?" "+l.className:""),children:t}))}}}
1d.forEach((e=>{O[e]=O(e)}));var _,R,F,P=O;const z=P.div(_||(_=a(["\n display: flex;\n justify-content: space-between;\n width: 100%;\n color: ",";\n"])),"#f00"),V=P.span(R||(R=a(["\n color: #000;\n font-weight: bold;\n"]))),D=P(z)(F||(F=a(["\n justify-content: center;\n color: #666;\n"])));var G=function(){return(0,o.jsx)(i,{children:(0,o.jsxs)(D,{children:["Hello,",(0,o.jsx)(V,{children:"World!"})]})})};function I(e){const n=Object.assign({p:"p",h1:"h1",code:"code",a:"a",pre:"pre",ul:"ul",li:"li",ol:"ol",strong:"strong",hr:"hr"},(0,r.RP)(),e.components),{TableOfContents:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("TableOfContents",!0),l.createElement(l.Fragment,null,l.createElement(t),"\n",l.createElement(n.p,null,"ì´ í¬ì¤í¸ë styled-components를 리ë²ì¤ ìì§ëì´ë§ íë©´ì ì»ì ì§ìì ì´ì©í´ ê°ë¨í CSS-in-JS ìì¤í
ì ë§ë¤ì´ë³´ë ë´ì©ì´ë¤."),"\n",l.createElement(n.h1,null,"1. CSS-in-JS?"),"\n",l.createElement(n.p,null,"CSS-in-JSë ì¤íì¼ë§ì ",l.createElement(n.code,null,"Javascript"),"를 ì¬ì©íë ",l.createElement(n.code,null,"CSS")," ë°©ë²ë¡ ì´ë¤. ê·¸ë ë¤ë©´ ",l.createElement(n.code,null,"CSS"),"ë§ ì¬ì©í´ë ìë§ ì¤íì¼ë§ì´ ë í
ë° ì ì¤íì¼ë§ì ",l.createElement(n.code,null,"Javascript"),"를 ì¬ì©í ê¹?"),"\n",l.createElement(n.p,null,"ì¹ ë¬¸ìì ì¼ìì¼ì²´ì¸ ",l.createElement(n.code,null,"HTML"),", ",l.createElement(n.code,null,"CSS"),", ",l.createElement(n.code,null,"Javascript"),"ë ê¹ëí ê´ì¬ì¬ ë¶ë¦¬ë¥¼ ì ê³µíë¤.",l.createElement("br"),l.createElement(n.code,null,"HTML"),"ì ì¹ ë¬¸ìì 구조를 ë§ë¤ê³ ",l.createElement(n.code,null,"CSS"),"ë UI ì¤íì¼ë§ì ë´ë¹íê³ ",l.createElement(n.code,null,"Javascript"),"ë ëì ì¸ ê¸°ë¥ë¤ì ë´ë¹íë¤. 과거 ì½í
ì¸ ì ëë¶ë¶ì ì ì ì´ì기 ë문ì ë³ë¤ë¥¸ ì´ë ¤ì ìì´ ì¤íì¼ë§ ìì
ì í ì ììë¤."),"\n",l.createElement(n.p,null,"ê·¸ë¬ë ìê°ì´ ì§ë¨ì ë°ë¼ ",l.createElement(n.code,null,"Javascript"),"ê° ìì²ë ìëë¡ ë°ì íë©´ì ìì í ìë¡ì´ ê°ë° ìíê³(SPA)ê° ëëíë¤."),"\n",l.createElement("figure",null,l.createElement("img",{src:"/css-in-js/spa.jpeg",alt:"SPA EVERYWHERE"})),"\n",l.createElement(n.p,null,"SPAììë ëì± ë³µì¡íê³ ëì ì¸ ì½í
ì¸ , 기ë¥, 구조ë¤ì´ ì¶ê°ëë¤.",l.createElement("br"),"ì ì ì¹ì ê·ëª¨ê° 커ì§ê³ ì»´í¬ëí¸í ëë©´ì CSS ìì
ì ",l.createElement(n.a,{href:"https://speakerdeck.com/vjeux/react-css-in-js?slide=2"},"ì¬ë¬ê°ì§ 문ì ë¤"),"ì´ ë°ìíê³ , í´ê²°ë²ì¼ë¡ CSS-in-JSê° ë±ì¥í ê²ì´ë¤."),"\n",l.createElement("figure",null,l.createElement("img",{src:"/css-in-js/css-problem.png"}),l.createElement("figcaption",null,"React: CSS in JS, vjeux (November 08, 2014)")),"\n",l.createElement(n.p,null,"ì´ì ì§ì React CSS-in-JS ìì¤í
ì ë§ë¤ì´ ë³´ì."),"\n",l.createElement(n.h1,null,"2. Tagged templates"),"\n",l.createElement(n.p,null,"ë§ë¤ ìì¤í
ì styled-components를 기ë°ì¼ë¡ íë¯ë¡ 먼ì Tagged templatesì ëí´ ì´í´ê° íìíë¤."),"\n",l.createElement(n.p,null,"í
í릿 리í°ë´(`)ì 기ë¥ì¤ íëì¸ Tagged templatesë í
í릿 리í°ë´ì íì±íì¬ í¨ìì ì¸ìë¡ ë길 ì ìê² í´ì¤ë¤."),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-javascript"},"fn`some string here` === fn(['some string here']); // ð¢ true\n")),"\n",l.createElement(n.p,null,"첫ë²ì§¸ ì¸ìë¡ ë¬¸ìì´ ë°°ì´, ëë¨¸ì§ ì¸ìë¤ë¡ ì½ì
ë ííìì ë°ì¼ë©°, ì¸ìë¡ í
í릿 리í°ë´ì ì§ì ë기ë ê²ê³¼ ë¬ë¦¬ ííì ê°ë¤ì íì
ì ì ì§íì± ì¸ìë¡ ë°ì ì ìë¤ë ì¥ì ì´ ìë¤."),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-javascript"},"const aVar = 'good';\n\nfn`this is a ${aVar} day` === fn(['this is a ', ' day'], aVar); // ð¢ true\n\nfn`${true} === \"true\"` === fn([' === \"true\"'], true); // ð´ false\nfn`${true} === \"true\"` === fn(['', ' === \"true\"'], true); // ð¢ true\n\nfn`${true} === ${false}` === fn(['', ' === ', ''], true, false); // ð¢ true\n")),"\n",l.createElement(n.p,null,"Tagged templatesë¡ ë°ì ì¸ì를 ë¤ì ìë string ííë¡ ë³ê²½íë í¨ì를 ë§ë¤ì´ ë³´ì."),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-javascript"},"const getStyle = (styleStringArray, ...interpolations) =>
1 {\n const result = [styleStringArray[0]];\n\n for (let i = 0, len = interpolations.length; i < len; i ++) {\n result.push(interpolations[i], styleStringArray[i + 1]);\n }\n\n return result.join('');\n}\n\n\nconst color = '#f00';\n\ngetStyle`\n display: flex;\n color: ${color};\n` === `\n display: flex;\n color: ${color};\n` // ð¢ true\n")),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"L5: ë°°ì´ì [문ìì´, ííì, 문ìì´, ííì...] ììë¡ ê°ì ì ë ¬í´ì¤ë¤."),"\n",l.createElement(n.li,null,"L8: ì ë ¬ë ë°°ì´ì stringì¼ë¡ í©ì¹ë©´ ì본 í
í릿 리í°ë´ ê°ì´ ëì¨ë¤."),"\n"),"\n",l.createElement(n.p,null,"ì ì½ëë styled í¨ììì ì¬ì©ë ìì ì´ë¤."),"\n",l.createElement(n.h1,null,"3. styled"),"\n",l.createElement(n.p,null,"Tagged templates를 기ë°ì¼ë¡ ",l.createElement(n.code,null,"styled")," í¨ì를 ë§ë¤ì´ ë³´ì. í¨ìë ìë ììë¡ ìëí ê²ì´ë¤."),"\n",l.createElement(n.ol,null,"\n",l.createElement(n.li,null,"íê² íê·¸ or ì»´í¬ëí¸ë¥¼ ë°ëë¤."),"\n",l.createElement(n.li,null,"Tagged templatesë¡ css를 ë°ëë¤."),"\n",l.createElement(n.li,null,"css styleì´ ì ì©ë ì»´í¬ëí¸ë¥¼ return íë¤."),"\n"),"\n",l.createElement(n.p,null,"먼ì styleì ì ì©íì§ ìê³ ì»´í¬ëí¸ë¥¼ return íë ë¶ë¶ê¹ì§ ì½ë를 구ì±í´ë³´ì."),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-jsx"},"function styled(Tag) {\n // Tagged templatesë¡ styleì ë°ë í¨ì를 return íë¤\n}\n\nconst domElements = ['a', 'abbr', 'address', 'area', ...]; // ì ì²´ íê·¸ 리ì¤í¸\n\ndomElements.forEach(domElement => {\n styled[domElement] = styled(domElement); // styled.div íì ëì\n});\n")),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"L2: ",l.createElement(n.code,null,"styled")," í¨ìë Tagged templatesë¡ styleì ë°ë í¨ì를 return í´ì¼ íë¤."),"\n",l.createElement(n.li,null,"L8: HTML íê·¸ì ê²½ì° ",l.createElement(n.code,null,"styled('div')"),"ê° ìëë¼ ",l.createElement(n.code,null,"styled.div")," íìì ì£¼ë¡ ì¬ì©íë¯ë¡, ì ì²´ íê·¸ë¤ì ìì±ì¼ë¡ ì¤íí ì ìëë¡ ì¶ê°í´ì¤ë¤."),"\n"),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-jsx"},"function styled(Tag) {\n return function templateFunction(styleStringArray, ...interpolations) {\n // Tagged templates를 ì¤ëª
í ë ë§ë getStyleì ê·¸ëë¡ ì¬ì©íë¤.\n const style = getStyle(styleStringArray, ...interpolations);\n\n // ì»´í¬ëí¸ë¥¼ return íë¤\n }\n}\n\nconst domElements = ['a', 'abbr', 'address', 'area', ...];\n\ndomElements.forEach(domElement => {\n styled[domElement] = styled(domElement);\n});\n")),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"L4: Tagged templatesë¡ ë°ì íë¼ë¯¸í°ë ",l.createElement(n.code,null,"getStyle")," í¨ìë¡ ì¤ì styleê³¼ ëì¼íê² ë³ê²½ìì¼ ì¤ë¤."),"\n",l.createElement(n.li,null,"L6: ",l.createElement(n.code,null,"templateFunction")," ìì ì»´í¬ëí¸ë¥¼ return í´ì£¼ë©´ 기본ì ì¸ ",l.createElement(n.code,null,"styled")," í¨ìë ë§ë¬´ë¦¬ ëë¤."),"\n"),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-jsx"},"function styled(Tag) {\n return function templateFunction(styleStringArray, ...interpolations) {\n const style = getStyle(styleStringArray, ...interpolations);\n\n return function WrappedStyledComponent({ children, ...props }) {\n return (\n <Tag {...props}>\n <p>style: {style}</p>\n {children}\n </Tag>\n );\n }\n }\n}\n\nconst domElements = ['a', 'abbr', 'address', 'area', ...]; // ì ì²´ íê·¸ 리ì¤í¸\n\ndomElements.forEach(domElement => {\n styled[domElement] = styled(domElement); // styled.div íì ëì\n});\n")),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"L7: ì»´í¬ëí¸ì propsë¤ì íê² ì»´í¬ëí¸ì ê·¸ëë¡ ë겨ì¤ë¤."),"\n",l.createElement(n.li,null,"L8: styleì ì ì©íì§ë ìê³ ì¼ë¨ íë©´ì íìíëë¡ íë¤."),"\n"),"\n",l.createElement(n.p,null,"ì ì²´ ì½ëë ìëì ê°ë¤."),"\n",l.createElement(n.p,null,l.createElement(n.strong,null,"styled.jsx")),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-jsx"},"const getStyle = (styleStringArray, ...interpolations) =>
1 {\n const result = [styleStringArray[0]];\n\n for (let i = 0, len = interpolations.length; i < len; i++) {\n result.push(interpolations[i], styleStringArray[i + 1]);\n }\n\n return result.join('');\n};\n\nfunction styled(Tag) {\n return function templateFunction(styleStringArray, ...interpolations) {\n const style = getStyle(styleStringArray, ...interpolations);\n\n return function WrappedStyledComponent({ children, ...props }) {\n return (\n <Tag {...props}>\n <p>style: {style}</p>\n {children}\n </Tag>\n );\n }\n }\n}\n\nconst domElements = ['a', 'abbr', 'address', 'area', ...]; // ì ì²´ íê·¸ 리ì¤í¸\n\ndomElements.forEach(domElement => {\n styled[domElement] = styled(domElement);\n});\n\nexport default styled;\n")),"\n",l.createElement(n.p,null,"ì´ì ì¤ì Appì ì ì©íê³ ê²°ê³¼ë¥¼ íì¸í´ë³´ì."),"\n",l.createElement(n.p,null,l.createElement(n.strong,null,"App.jsx")),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-jsx"},"import styled from './styled';\n\nconst color = '#f00';\n\nconst Container = styled.div`\n display: flex;\n justify-content: space-between;\n color: ${color};\n`;\n\nconst World = styled.span`\n color: #000;\n font-weight: bold;\n`;\n\nfunction App() {\n return (\n <Container>\n Hello,\n <World>World!</World>\n </Container>\n );\n}\n\nexport default App;\n")),"\n",l.createElement(S),"\n",l.createElement(n.p,null,'"Hello, World!" í
ì¤í¸ì í¨ê» ì ì©í styleì´ ì íìëë걸 ë³¼ ì ìë¤.'),"\n",l.createElement(n.hr),"\n",l.createElement(n.p,null,"ì´ì styleì ì»´í¬ëí¸ì ì§ì ì ì©ì í´ë³´ì. ì ì©ì íë ¤ë©´ css styleì ì¶ê°í ",l.createElement(n.code,null,"<style>")," Elementì styleì´ ì ì©ë classNameì´ íìíë¤."),"\n",l.createElement(n.p,null,"styleì ê´ë¦¬í ",l.createElement(n.code,null,"Sheet class"),"를 ë§ë¤ì´ ë³´ì."),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-js"},"class Sheet {\n constructor() {\n document.head.appendChild(this.ele = document.createElement('style'));\n }\n\n // classNameì ìì±íë í¨ìê° íìíë¤.\n}\n")),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"L3: ìì±ì ë´ìì headì ",l.createElement(n.code,null,"<style>")," Element를 ìì±í´ì¤ë¤."),"\n",l.createElement(n.li,null,"L3: ìì±í ",l.createElement(n.code,null,"<style>")," Elementë ",l.createElement(n.code,null,"ele")," ìì±ì¼ë¡ ì ì¥íë¤."),"\n"),"\n",l.createElement(n.p,null,"classNameì styleì ë°ë¼ ì ëí¬íê² ìì±í´ì¼ íë¯ë¡ hash í¨ì를 ë§ë¤ì´ì¤ë¤."),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-js"},"const hash = (s) =>\n `hash${s.split('').reduce((num, t) => {\n num = (num << 5) - num + t.charCodeAt(0);\n\n return num & num;\n }, 0)}`;\n")),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"hash í¨ìë¡ ì¤íì¼ì ë기면 ",l.createElement(n.code,null,"hash${hashedStyle}")," íìì 문ìì´ì return íë¤. ",l.createElement(n.a,{href:"https://stackoverflow.com/a/15710692"},"(참조í stackoverflow)")),"\n"),"\n",l.createElement(n.p,null,"ì´ì hash í¨ìì ",l.createElement(n.code,null,"<style>")," Element를 ì´ì©í´ className ìì± í¨ì를 ë§ë¤ì´ì¤ë¤."),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-js"},"const hash = (s) =>\n `hash${s.split('').reduce((num, t) => {\n num = (num << 5) - num + t.charCodeAt(0);\n\n return num & num;\n }, 0)}`;\n\nclass Sheet {\n constructor() {\n document.head.appendChild(this.ele = document.createElement('style'));\n }\n\n generateClassName(style) {\n const styledClassName = hash(style);\n\n const rule = `.${styledClassName} { ${style} }`;\n\n if (!this.ele.innerText.includes(rule)) {\n this.ele.appendChild(document.createTextNode(rule));\n }\n\n return styledClassName;\n }\n}\n")),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"L14: hashë¡ classNameì ìì±íë¤."),"\n",l.createElement(n.li,null,"L16: ",l.createElement(n.code,null,"selector { style }")," íìì css code를 ìì±íë¤."),"\n",l.createElement(n.li,null,"L18: ì´ë¯¸ styleì´ ì¡´ì¬íëì§ ì²´í¬íê³ ìë ruleì´ë¼ë©´ ì¶ê°í´ì¤ë¤."),"\n",l.createElement(n.li,null,"L22: classëª
ì returníë¤."),"\n"),"\n",l.createElement(n.p,null,"ì ì²´ Sheet ì½ëë ë¤ìê³¼ ê°ë¤."),"\n",l.createElement(n.p,null,l.createElement(n.strong,null,"sheet.js")),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-js"},"const hash = (s) =>\n `hash${s.split('').reduce((num, t) => {\n num = (num << 5) - num + t.charCodeAt(0);\n\n return num & num;\n }, 0)}`;\n\nclass Sheet {\n constructor() {\n document.head.appendChild(this.ele = document.createElement('style'));\n }\n\n generateClassName(style) {\n const styledClassName = hash(style);\n\n const rule = `.${styledClassName} { ${style} }`;\n\n !this.ele.innerText.includes(rule) && this.ele.appendChild(document.createTextNode(rule));\n\n return styledClassName;
1\n }\n}\n\nexport default Sheet;\n")),"\n",l.createElement(n.p,null,"ìì±ë class를 ",l.createElement(n.code,null,"styled")," í¨ìì ì ì©í´ë³´ì."),"\n",l.createElement(n.p,null,l.createElement(n.strong,null,"styled.jsx")),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-jsx"},"import Sheet from './sheet';\n\nconst sheet = new Sheet();\n\n// getStyle function...\n\nfunction styled(Tag) {\n return function templateFunction(styleStringArray, ...interpolations) {\n const style = getStyle(styleStringArray, ...interpolations);\n\n const styledClassName = sheet.generateClassName(style);\n\n return function WrappedStyledComponent({ children, ...props }) {\n return (\n <Tag {...props} className={styledClassName.concat(props.className ? ` ${props.className}` : '')}>\n {children}\n </Tag>\n );\n };\n };\n}\n\nconst domElements = ['a', 'abbr', 'address', 'area', ...];\n\ndomElements.forEach((domElement) => {\n styled[domElement] = styled(domElement);\n});\n\nexport default styled;\n")),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"L11: styleì ì´ì©í´ classNameì ìì±í´ì¤ë¤."),"\n",l.createElement(n.li,null,"L15: classNameì Tagì ì¶ê°í´ì£¼ê³ , 기존ì íë©´ì íìíë styleì ì ê±°íë¤."),"\n"),"\n",l.createElement(n.p,null,"classNameì ë긴í Demo를 íì¸í´ë³´ë©´ styleì´ ì ì©ë걸 íì¸í ì ìë¤."),"\n",l.createElement(W),"\n",l.createElement(n.hr),"\n",l.createElement(n.p,null,"ë§ì§ë§ì¼ë¡ ë¤ë¥¸ ì»´í¬ëí¸ë¥¼ extend í´ì ìë¡ì´ ì»´í¬ëí¸ë¥¼ ë§ë¤ì´ ë³´ì."),"\n",l.createElement(n.p,null,l.createElement(n.strong,null,"App.jsx")),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-jsx"},"// ...\n\nconst Container = styled.div`\n display: flex;\n justify-content: space-between;\n color: ${color};\n`;\n\nconst Container2 = styled(Container)`\n justify-content: center;\n color: #666;\n`;\n\n// const World...\n\nfunction App() {\n return (\n <Container2>\n Hello,\n <World>World!</World>\n </Container2>\n );\n}\n\nexport default App;\n")),"\n",l.createElement(G),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"L9: ",l.createElement(n.code,null,"Container"),"를 ",l.createElement(n.code,null,"styled()"),"ë¡ ê°ì¸ ",l.createElement(n.code,null,"Container2"),"를 ë§ë¤ìë¤."),"\n",l.createElement(n.li,null,"L10 ~ 11: 기존ì ",l.createElement(n.code,null,"justify-content"),", ",l.createElement(n.code,null,"color")," styleì override íë¤."),"\n"),"\n",l.createElement(n.p,null,"Demo를 íµí´ ",l.createElement(n.code,null,"justify-content"),", ",l.createElement(n.code,null,"color")," ìì±ì´ ì override ë걸 íì¸í ì ìë¤."),"\n",l.createElement(n.h1,null,"4. ë§ë¬´ë¦¬"),"\n",l.createElement(n.p,null,"ê°ë¨í CSS-in-JS ìì¤í
ì ë§ë¤ì´ ë³´ìë¤. í¬ì¤í¸ë¥¼ ì¬ë°ê² ë´¤ë¤ë©´ í
í릿 리í°ë´ë¡ ë긴 functionì ëí ì²ë¦¬ ë¶ë¶ì ì§ì 구íí´ë´ë ì¢ì ê² ê°ë¤."),"\n",l.createElement(n.pre,null,l.createElement(n.code,{className:"language-jsx"},"const Container = styled.div`\n display: flex;\n justify-content: space-between;\n color: ${props => props.primary ? 'white' : 'palevioletred'};\n`;\n")),"\n",l.createElement(n.p,null,"í¬ì¤í¸ìë ìëì¨ ì¤ì ë¼ì´ë¸ë¬ë¦¬ë¤ì 기ë¥ê³¼ ìµì íì ëí´ ê¶ê¸íë¤ë©´ ",l.createElement(n.a,{href:"https://styled-components.com/docs"},"ê³µì 문ì"),"ì ",l.createElement(n.a,{href:"https://github.com/styled-components/styled-components"},"github ì¤í ìì¤"),"를 ì°¸ê³ íì."),"\n",l.createElement(n.p,null,"ì´ í¬ì¤í¸ìì ì¬ì©ë ì½ëë ",l.createElement(n.a,{href:"https://github.com/pyjun01/css-in-js"},"ì¬ê¸°"),"ì íì¸í´ë³¼ ì ìë¤."),"\n",l.createElement(n.h1,null,"ì°¸ê³ "),"\n",l.createElement(n.ul,null,"\n",l.createElement(n.li,null,"https://levelup.gitconnected.com/a-brief-history-of-css-in-js-how-we-got-here-and-where-were-going-ea6261c19f04"),"\n",l.createElement(n.li,null,"https://speakerdeck.com/vjeux/react-css-in-js?
1slide=2"),"\n",l.createElement(n.li,null,"https://developer.mozilla.org/en-US/docs/Web/Javascript/Reference/Template_literals"),"\n"))}var M=function(e){void 0===e&&(e={});const{wrapper:n}=Object.assign({},(0,r.RP)(),e.components);return n?l.createElement(n,e,l.createElement(I,e)):I(e)};var q=t(7717),U=t(6089),Y=t(1042),B=t(5242),K=t(7271),Q=t(5109),X=t(1869);const Z={Tweet:q.Yk,CodeSandbox:q.dH},ee=s.default.div.withConfig({displayName:"mdxparent__File__name__Container",componentId:"sc-15llss4-0"})(["padding:32px 0;> h2{margin:0;font-size:3rem;line-height:3.75rem;letter-spacing:-0.0625rem;font-weight:100;font-family:Georgia,Times,serif;}> .date{margin:32px 0 56px;text-align:right;}img{max-width:100%;}figure{margin:1.5rem 0;img{display:block;margin:0 auto;}figcaption{font-size:0.875rem;color:#757575;text-align:center;}}@media (max-width:680px){> .date{font-size:1.3rem;}> .content{font-size:1.5rem;line-height:2.25rem;}}"]);function ne(e){let{data:n,children:t}=e;return l.createElement(U.A,{pageTitle:n.mdx.frontmatter.title},l.createElement(Y.A,{title:n.mdx.frontmatter.title,description:n.mdx.frontmatter.preview,slug:n.mdx.frontmatter.slug}),l.createElement(ee,null,l.createElement("h2",null,n.mdx.frontmatter.title),l.createElement("p",{className:"date"},n.mdx.frontmatter.date),l.createElement("div",{className:"content"},l.createElement(r.xA,{components:Object.assign({pre:B.A,a:Q.A,h1:K.H1,h2:K.H2,h3:K.H3,h4:K.H4,h5:K.H5,h6:K.H6,TableOfContents:e=>l.createElement(X.A,Object.assign({},e,{headings:n.mdx.headings}))},Z)},t))))}function te(e){return l.createElement(ne,e,l.createElement(M,e))}}}]); 2//# sourceMappingURL=component---src-pages-v-mdx-parent-file-name-tsx-content-file-path-src-blog-css-in-js-mdx-0265d7109475e87f2632.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.