๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ19

[CSS] aspect-ratio ์—†์ด ์š”์†Œ ๋น„์œจ ์œ ์ง€ํ•˜๊ธฐ ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ๋กœ ํšŒ์‚ฌ์—์„œ caniuse์—์„œ 95%์ด์ƒ ์ง€์›๋˜๋Š” css์†์„ฑ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐasepct-ratio๋Š” 95%๊ฐ€ ๋˜์ง€ ์•Š์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค๐Ÿฅน  aspect-ratio์—†์ด ์–ด๋–ป๊ฒŒ ์š”์†Œ์˜ ๋น„์œจ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?๋ฐ”๋กœ padding-top(๋˜๋Š” padding-bottom)์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.โญ๏ธ๊ธฐ๋ณธ์ ์œผ๋กœ padding๊ฐ’์˜ ๋ฐฑ๋ถ„์œจ์€ ๋ถ€๋ชจ ์š”์†Œ์˜ width๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ์ด ๋ฉ๋‹ˆ๋‹ค.โญ๏ธ-> ์ปจํ…Œ์ด๋‹๋ธ”๋ก์œผ๋กœ๋ถ€ํ„ฐ_๋ฐฑ๋ถ„์œจ_๊ณ„์‚ฐํ•˜๊ธฐ(MDN๋ฌธ์„œ ์ฐธ๊ณ ) ์ด๋Ÿฌํ•œ ์„ฑ์งˆ์„ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ css ํŠธ๋ฆญ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. See the Pen without aspect-ratio by JM K (@JM-K-the-selector) on CodePen.  ์ด ์ƒ.. 2024. 8. 11.
[JS]๋ณ‘๋ ฌ์ ์œผ๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋น„๋™๊ธฐ๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1. Promise.all ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์— ์ฃผ์–ด์ง„ ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ดํ–‰ํ•œ ํ›„, ํ˜น์€ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ฃผ์–ด์ง€์ง€ ์•Š์•˜์„ ๋•Œ ์ดํ–‰ํ•˜๋Š” Promise๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ํ”„๋กœ๋ฏธ์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ๋กœ ๊ฑฐ์ ˆํ•œ ํ”„๋กœ๋ฏธ์Šค์˜ ์ด์œ ๋ฅผ ์‚ฌ์šฉํ•ด ์ž์‹ ๋„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ๋“ค์–ด์˜จ ํ”„๋กœ๋ฏธ์Šค ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ฑฐ๋ถ€ ๋‹นํ•˜๋ฉด Promise.all()์€ ์ฆ‰์‹œ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. const promise1 = Promise.resolve(3); const promise2 = 42; const promise3 = new Promise((resolve, reject) => { setTimeout(resolve, 100, 'foo'); }); Promise.all([.. 2024. 4. 19.
React Native - ์›น๋ทฐ ํ†ต์‹  ๊ตฌํ˜„(TypeScript) ์šฐ์„  React Native์—์„œ ์›น๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ react-native-webivew ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. RN Webview ๋ฉ”์‹œ์ง€ ๋ณด๋‚ผ ๋•Œ webviewRef.current.postMessage(JSON.stringify(message)); window.ReactNativeWebView?.postMessage(JSON.stringify(message)); ๋ฉ”์‹œ์ง€ ๋ฐ›์„ ๋•Œ WebView ์ปดํฌ๋„ŒํŠธ์˜ onMessage ์†์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค //์•ˆ๋“œ document.addEventListener('message', getMessageListener); //ios window.addEventListener('message', getMessageListener); RN์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ ref๋ฅผ ์‚ฌ์šฉํ•ด.. 2024. 1. 27.
Next scss ์ „์—ญ๋ณ€์ˆ˜ ์ ์šฉํ•˜๊ธฐ ์ „์—ญ ์Šคํƒ€์ผ ๋ณ€์ˆ˜๋“ค์„ ํ•œ ๋ฒˆ์— ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  next.config.js ํŒŒ์ผ์—์„œ sassOptions์„ ์‚ฌ์šฉํ•˜์—ฌ Sass compiler๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. sassOptions์€ sass-loader์˜ ์„ค์ •์ž…๋‹ˆ๋‹ค https://github.com/webpack-contrib/sass-loader?tab=readme-ov-file#additionaldata addtionalData๋Š” ์‹ค์ œ ํ•ญ๋ชฉ ํŒŒ์ผ ์•ž์— Sass ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ์Šคํƒ€์ผ ํŒŒ์ผ์— ์ „์—ญ ๋ณ€์ˆ˜ ํŒŒ์ผ๋“ค์„ ์ž„ํฌํŠธ ํ•˜์ง€ ์•Š์•„๋„ scssํŒŒ์ผ ์•ˆ์—์„œ ์ „์—ญ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. /** @type {import('next').NextConfig} */ const nextConfig = { ... sassOptio.. 2024. 1. 17.
React Native ์›น์†Œ์ผ“ ์ฑ„ํŒ… ๊ตฌํ˜„ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ RN์œผ๋กœ ์ฑ„ํŒ…์„ ๊ตฌํ˜„ ์ค‘์ด๋‹ค ์ผ๋‹จ ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ธ ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ๊ตฌํ˜„ํ•ด๋ดค๋‹ค ์šฐ์„  ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ WebSocketProvider๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฑ„ํŒ…๋ฐฉ์„ ๊ฐ์‹ธ์คฌ์Šต๋‹ˆ๋‹ค. ์›น์†Œ์ผ“๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ๋“ค์„ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค๊นŒ ํ•˜๋‹ค๊ฐ€ ์–ด์ฐจํ”ผ ํ•˜๋‚˜์˜ ์›น์†Œ์ผ“ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. useMemo๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ† ํฐ์ด ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์„ ๋•Œ ์ƒˆ๋กœ์šด ์›น์†Œ์ผ“์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. WebSocketContext๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฑ„ํŒ…๋ฐฉ์—์„œ ์›น์†Œ์ผ“์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. import {tokenState} from '@/store/loginAtom'; import React, {createContext, useMemo} from 'react'; import {useReco.. 2024. 1. 10.
CSS ์ž์‹ ์š”์†Œ๊ฐ€ focus ๋  ๋•Œ ๋ถ€๋ชจ ์š”์†Œ ํšจ๊ณผ ์ฃผ๊ธฐ ๋ณดํ†ต ์ธํ’‹์˜ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ธํ’‹ํƒœ๊ทธ์™€ ์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ ๋“ฑ์„ ๋‹ด๊ณ  ์žˆ๊ณ  ์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” ์ž…๋ ฅ๊ฐ’์ด ๋“ค์–ด์™”์„ ๋•Œ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ border ์ƒ‰์ƒ์— ๋ณ€ํ™”๋ฅผ ์ค˜์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค ์ด๋Ÿด ๋•Œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ :focust-within ์‚ฌ์šฉํ•˜๊ธฐ! MDN์— ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฒ•์ด ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-within :focus-within CSS:focus-within ์˜์‚ฌ ํด๋ž˜์Šค๋Š” ํฌ์ปค์Šค๋ฅผ ๋ฐ›์•˜๊ฑฐ๋‚˜, ํฌ์ปค์Šค๋ฅผ ๋ฐ›์€ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰ ์Šค์Šค๋กœ :focus ์˜์‚ฌ ํด๋ž˜์Šค์™€ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜, ๊ทธ ์ž์† ์ค‘ ํ•˜๋‚˜๊ฐ€ :focus์™€ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Which flavor would you.. 2024. 1. 8.