Animated Hello Kitty Wink

๐Ÿถ๐Ÿพ/frontend

    [css] height ๊ธธ์ด ๋Š˜๋ ธ์„ ๋•Œ, ์œ„์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๋Š˜์–ด๋‚˜๊ฒŒ ํ•˜๊ธฐ

    ๋ฌธ์ œ ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„(?)์ฒ˜๋Ÿผ ์œ„์ชฝ์œผ๋กœ ๋Š˜์–ด๋‚˜๋Š” ์‚ฌ๊ฐํ˜•์„ ๋งŒ๋“ค๊ณ ์ž ํ–ˆ๋Š”๋ฐ height๊ธธ์ด๋ฅผ ๋Š˜๋ฆฌ๋ฉด ์•„๋ž˜ ๋ฐฉํ–ฅ์œผ๋กœ ๋Š˜์–ด๋‚˜์„œ ์œ„์น˜๋ฅผ ๋งž์ถ”๊ธฐ ์‰ฝ์ง€ ์•Š์•˜๋‹ค (height๊ธธ์ด๊ฐ€ props์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์—ˆ์Œ) ๋‚ด๊ฐ€ ์ฒดํฌํ•œ ๊ฐœ์ˆ˜๋งŒํผ ๊ทธ๋ž˜ํ”„์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ ธ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์ค€์ด ์•„๋ž˜์ชฝ์ด ๋˜์–ด์•ผํ–ˆ์Œ ํ•ด๊ฒฐ transform: scaleY(-1); transform-origin: top; ์š”์†Œ์˜ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์š”์†Œ๋ฅผ ์ˆ˜์ง์œผ๋กœ ๋’ค์ง‘์–ด ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๋ฉด heigth๋ฅผ ๋Š˜๋ ธ์„๋•Œ ์œ„์ชฝ์œผ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    [react] div ํฌ๊ธฐ content ๊ธธ์ด์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

    ๋ฌธ์ œ {field} {date} navigate(`/edit/${date}`)} /> ๐Ÿ“ {title} {content} PostConatiner๊ฐ€ ํ•˜์–€์ƒ‰ ๋ฐ•์Šค์ผ ๋•Œ, content์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ์„ธ๋กœ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์ ธ์•ผํ–ˆ๋‹ค. ํ•ด๊ฒฐ const textBoxRef = useRef(null); useEffect(() => { if (textBoxRef.current) { const textBoxHeight = textBoxRef.current.clientHeight + 70; const container = document.getElementById("PostsContaioner"); if (container) { container.style.height = `${textBoxHeight}px`; } } }, [..

    [redux] react์—์„œ redux-toolkit ์‚ฌ์šฉ

    ๊ฐœ์ธํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๋„ ๊ณ„์† props๋กœ ์—ฐ๊ฒฐ-์—ฐ๊ฒฐํ•ด์„œ ๋„˜๊ฒจ์•ผํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ท€์ฐฎ์Œ๊ณผ .. ๊ทธ๋ ‡๊ฒŒ ๊ณ„์† ์ž์‹์œผ๋กœ ๋„˜๊ธฐ๋‹ค๋ณด๋‹ˆ ์—ฐ๊ด€๋˜์ง€ ์•Š์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋“ค๊นŒ์ง€ ๋ฆฌ๋žœ๋”๋ง์ด ๋˜์–ด์•ผํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ฌธ์ œ๋ฅผ ๋Š๋ผ๊ณ  ์žˆ๋Š” ์™€์ค‘ ์ƒํ™œ์ฝ”๋”ฉ ๋ฆฌ๋•์Šค ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜๊ณ , ์ด์–ด ๋ฆฌ๋•์Šค ํˆดํ‚ท๊นŒ์ง€ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. redux - js ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - store๋ผ๋Š” ํ•˜๋‚˜๋ฟ์ธ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„ - action์„ ํ†ตํ•ด์„œ ์ƒํƒœ ๋ณ€๊ฒฝ - ๋ณ€๊ฒฝ์€ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ๋งŒ ๊ฐ€๋Šฅ ๐ŸŒŸ store ์ƒํƒœ๊ฐ€ ๊ด€๋ฆฌ๋˜๋Š” ํ•˜๋‚˜์˜ ๊ณต๊ฐ„ ๐ŸŒŸ action store์— ์šด๋ฐ˜ํ•  ๋ฐ์ดํ„ฐ ๐ŸŒŸ reducer action์„ reducer๊ฐ€ ๋ฐ›์•„ store์˜ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ๐ŸŒŸ dispatch store์˜ ๋‚ด์žฅํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋กœ action์„ ๋ฐœ์ƒ์‹œํ‚ด ac..

    [styled-components] styled-components ์žฌ์‚ฌ์šฉ & props

    ์ปดํฌ๋„ŒํŠธ ํ™•์žฅ(์žฌ์‚ฌ์šฉ)ํ•˜๊ธฐ ๋ฒ„ํŠผ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ทธ ๋ฒ„ํŠผ์„ ์žฌ์‚ฌ์šฉํ•ด ๊ธ€์žํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๋ฒ„ํŠผ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ const SimpleBtn = syteld.button` color:white; background-color:green; `; const LargeBtn = styeld(SimpleBtn)` font-size: 50px; `; ๊ด„ํ˜ธ () ์•ˆ์— ๋„ฃ์–ด์คŒ์œผ๋กœ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ LargeBtn์€ color, background-color๋ฅผ ์ƒ์†(?) ๋ฐ›๊ฒŒ ๋จ Props ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ const ReactBtn = styled.button` color: ${(props)=> props.primary? "white" : "black"} `; // 1. Normal // 2. Primary 1์€ pr..

    [css] cursor ๋ณ€๊ฒฝ

    cursor๋ฅผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์คฌ๋‹ค ์ด๋ฏธ์ง€๊ฐ€ ๋กœ๋“œ ๋˜์ง€ ์•Š์„๊ฒฝ์šฐ ๋’ค์— auto๋กœ ์‹คํ–‰๋œ๋‹ค cursor: url("/public/images/cur.png"), auto; โœ”๏ธ ์ด๋ฏธ์ง€ ์ ์šฉ์ด ์•ˆ๋  ๊ฒฝ์šฐ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๊ฐ€ 128px์ดํ•˜์—ฌ์•ผ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•˜๋‹ˆ๊นŒ ์ด๊ฑฐ ๊ผญ ํ™•์ธ ! ๊ฒฝ๋กœ ํ™•์ธ ! ๋‚˜๋Š” ์ด๋ฏธ์ง€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ ์šฉ์ด ์•ˆ๋˜์—ˆ์—ˆ๋‹ค ๐Ÿ˜… ๐Ÿ’ญ ๋งŒ๋“ค์–ด์ง„ ์ปค์„œ ์ด์šฉ https://www.cursors-4u.com/cursor/2009/11/11/animated-hello-kitty-wink.html Animated Hello Kitty Wink Cursor Option #1 - Universal CSS/HTML Code This CSS/HTML Code of Animated ..

    [css] Animate.css ์‚ฌ์šฉ

    https://animate.style/ Animate.css | A cross-browser library of CSS animations. Animate.css is a library of ready-to-use, cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and attention-guiding hints. animate.style ์‚ฌ์ดํŠธ์—์„œ ๋‹ค์–‘ํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์›ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋‚ด ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค ! ์„ค์น˜ npm install animate.css --save ์ ์šฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ์„ ์œ„ํ•œ js ํŒŒ์ผ์— import 'animate.cs..

    [js] localStorage์— ์ €์žฅ & login

    localStorage ? - localStorage์€ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์†ํ•ด์„œ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. firebase๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ์ธ & ํšŒ์›๊ฐ€์ž…์„ ๊ตฌํ˜„ํ•˜๊ณ , ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ localStorage์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•ด๋ณด์•˜๋‹ค. ์šฐ์„  ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ localStorage์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” localStorage.setItem(key, value)๋ฅผ ์ด์šฉํ•œ๋‹ค. const handleSubmit = (e) => { e.preventDefault(); signInWithEmailAndPassword(auth, id, password) .then((userCredential) => { const user = userCre..

    [html] Open Graph

    Open Graph ? - sns๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์ดํŠธ๊ฐ€ ๊ณต์œ ๋  ๋•Œ, ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ํƒœ๊ทธ index.html ์ด์™ธ ๋‹ค๋ฅธ property๋Š” https://ogp.me/ ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ +) ์นด์นด์˜ค์—์„œ ๋ฐ”๋กœ ๋ณ€๊ฒฝ์ด ์•ˆ๋  ๊ฒฝ์šฐ ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ์‚ฌ์ดํŠธ > ๋„๊ตฌ > ๋””๋ฒ„๊ฑฐ ๋„๊ตฌ > ๊ณต์œ  ๋””๋ฒ„๊ฑฐ > URL ์ž…๋ ฅ์„ ํ†ตํ•ด ์บ์‹œ ์‚ญ์ œ

    [react] Firebase๋กœ ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ

    https://firebase.google.com/?hl=ko Firebase | Google’s Mobile and Web App Development Platform ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์ข‹์•„ํ•  ๋งŒํ•œ ์•ฑ๊ณผ ๊ฒŒ์ž„์„ ๋นŒ๋“œํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” Google์˜ ๋ชจ๋ฐ”์ผ ๋ฐ ์›น ์•ฑ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์ธ Firebase์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์„ธ์š”. firebase.google.com ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ์˜† ์นดํ…Œ๊ณ ๋ฆฌ์—์„œ ๋นŒ๋“œ > ํ˜ธ์ŠคํŒ… ํด๋ฆญ 1. Firebase CLI ์„ค์น˜ $ npm install -g firebase-tools ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰ 2. ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™” $ firebase login $ firebase init vscode์—์„œ ์‹คํ–‰ (ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰์‹œ rootํด๋”๊นŒ์ง€ ๊ฐ€์„œ ์‹คํ–‰) firebase init (๋ฐ˜๋“œ์‹œ root ํด๋”์—..