๋ฐ˜์‘ํ˜•

๊ฐœ๋ฐœ ๐Ÿพ 64

input search x ๋ฒ„ํŠผ ์‚ญ์ œ ๋ฐ ํด๋ฆฌ์–ด ๋ฒ„ํŠผ ์ง์ ‘ ๋งŒ๋“ค์–ด ๋„ฃ๊ธฐ

input์˜ ํƒ€์ž…์„ search๋กœ ์ง€์ •ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ input ์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ๋””์ž์ธ์„ ์ค‘์š”์‹œ ํ•˜๋Š” ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๊ฒƒ๋งˆ์ € ์ปค์Šคํ…€ํ•ด์ฃผ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์‹ค์ƒ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ € ์ž์ฒด๋ฅผ ์ปค์Šคํ…€ ํ•  ์ˆ˜๋Š” ์—†๊ณ , ์ด๋ฅผ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•œ ๋’ค ์ถ”๊ฐ€๋กœ ๋””์ž์ธ๊ณผ ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์€ ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ์ƒ์„ฑํ•œ ์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ์„ ์—†์• ๋ ค๋ฉด ๋‹จ์ˆœํžˆ input์˜ ํƒ€์ž…์„ text๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ css์—์„œ ํ•ด๊ฒฐํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /* IE์˜ ๊ฒฝ์šฐ */ input::-ms-clear, input::-ms-reveal{ display:none; } /* ํฌ๋กฌ์˜ ๊ฒฝ์šฐ */ input::-webkit-search-decoration, ..

React ์—์„œ select ์‚ฌ์šฉํ•˜๊ธฐ

์…€๋ ‰ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด jsx ๊ตฌ๋ฌธ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. 0.1ํ†ค 0.2ํ†ค 0.3ํ†ค 0.4ํ†ค {/* ์„ ํƒํ•˜๋ ค๋˜ ๋ถ€๋ถ„! */} 0.5ํ†ค ๊ธฐ์กด html ์—์„œ ๋””ํดํŠธ ์˜ต์…˜์„ ์„ ํƒํ•˜๋ ค๋ฉด option ํƒœ๊ทธ์•ˆ์— selected ์†์„ฑ์„ ์ฃผ์–ด ๋™์ž‘ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ์—์„œ ์ด์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋ฑ‰์–ด๋ƒ…๋‹ˆ๋‹ค. React์—์„œ๋Š” selected ๋Œ€์‹  value๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ selected์˜ ์„ ํƒ๋œ value ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด, onChange๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•ด ๋ณด๋ฉด ์ด๋ ‡์Šต๋‹ˆ๋‹ค. 0.1ํ†ค 0.2ํ†ค 0.3ํ†ค 0.4ํ†ค 0.5ํ†ค ์œ„์˜ ๋‚ด์šฉ์œผ๋กœ๋„ ์†Œ์Šค๋ฅผ ์ ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ๋ด์ฃผ์„ธ์š”! export default function App() { const sel..

๊ฐ€์šด๋ฐ์„œ ์ขŒ์šฐ๋กœ ํŽผ์ณ์ง€๊ฒŒ ํ•˜๊ธฐ

๋ฉ”๋‰ด๋ฅผ hover ํ–ˆ์„ ๋•Œ ์•„๋ž˜์—์„œ underline์ด ๊ฐ€์šด๋ฐ๋ถ€ํ„ฐ ์—ด๋ฆฌ๋Š” ๋ชจ์…˜์„ ๊ตฌํ˜„ํ•ด ๋ณด๊ณ  ์‹ถ์–ด์„œ ๋งŒ๋“ค์–ด๋ดค์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชจ์…˜์ž…๋‹ˆ๋‹ค. ๐Ÿ˜Š ํ•ด๋‹น ๋ชจ์…˜์€ border ๋‚˜ text-decoration ์œผ๋กœ๋Š” ๊ตฌํ˜„ํ•  ์ˆ˜์—†๊ณ , a ํƒœ๊ทธ์˜ :after๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. HOME ABOUT Q&A ๋จผ์ € ๋งˆํฌ์—…์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์–ด์ฐจํ”ผ :after ๋ฅผ ์‚ฌ์šฉํ•  ๊บผ๋ผ ๋ณ„๋‹ค๋ฅธ ํƒœ๊ทธ๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜์ง„ ์•Š์Šต๋‹ˆ๋‹ค. ๋จผ์ € a:after ์— absolute ์†์„ฑ์„ ์ฃผ์–ด a ๋ณด๋‹ค ์•„๋ž˜์— ์œ„์น˜์‹œ์ผœ์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  transform์˜ scale์„ ์‚ฌ์šฉ ํ•˜๋Š”๊ฒŒ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. scale ์†์„ฑ์€ ํ˜„์žฌ์˜ element๋ฅผ ํ™•๋Œ€ ์‹œ์ผœ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค. .wrap { padding: 15px; } .wrap > a { position: re..

React div ์Šคํฌ๋กค์‹œ Fix ํ•˜๊ธฐ (Element scroll)

์ด์ „์— window์—์„œ ์Šคํฌ๋กคํ•  ๋•Œ ํŠน์ • ์—˜๋ ˆ๋ฉ˜ํŠธ๊ฐ€ ๊ณ ์ •์ด ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” window๊ฐ€ ์•„๋‹Œ ํŠน์ • div ์—์„œ ์Šคํฌ๋กคํ–ˆ์„ ๋•Œ div์•ˆ์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๊ณ ์ •์ด ๋˜๋„๋ก ๊ตฌํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๊ตฌํ˜„ ๋ฐฉ์‹์€ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ window ์™€๋Š” ๋‹ฌ๋ฆฌ ๊ฐ์ฒด์˜ scroll ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” useRef๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋„ ์ด ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์žˆ์–ด ๋งŽ์€ ๊ณต๋ถ€๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ ๊ฐ์ฒด์—์„œ ๊ณ ์ •์„ ์‹œํ‚ค๋ ค๋ฉด fixed ์™€๋Š” ๋‹ฌ๋ฆฌ absolute๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ„์น˜์˜ ๊ธฐ์ค€์ด viewport ๊ฐ€ ๋˜๋Š” fixed์™€ ๋‹ค๋ฅด๊ฒŒ absolute๋Š” ์ƒ์œ„ ๊ฐ์ฒด๋“ค ์ค‘ relative๊ฐ€ ๋˜๋Š” ๊ฐ’์„ ์ฐธ์กฐํ•˜์—ฌ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ œ๊ฐ€ ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๊ฐ™์œผ๋ฉด์„œ๋„ ํ™œ์šฉ์„ฑ์ด ์กฐ๊ธˆ ๋‹ค..

React ์Šคํฌ๋กค์‹œ Fix ํ•˜๊ธฐ (Window scroll)

์Šคํฌ๋กค๋ฐ”๋ฅผ ์–ด๋Š ๊ฐ’๋งŒํผ ๋‚ด๋ฆฌ๋ฉด ํŠน์ • ์—˜๋ ˆ๋จผํŠธ์˜ css ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ํ•ด๋‹น ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋งˆํฌ์—…์„ ํ•ฉ๋‹ˆ๋‹ค. Window๊ฐ€ ์•„๋‹Œ div ์Šคํฌ๋กค์ธ ๊ฒฝ์šฐ - App.js 'I will be fixed! ๐Ÿ˜˜' Lorem ipsum dolor sit amet consectetur adipisicing elit. Animi at nihil sit fugit adipisci aperiam alias enim sed voluptates quo! Quam inventore officia commodi laudantium amet in sunt est quasi. Lorem ipsum dolor sit amet consectetur adipisicing elit. Animi at ..

์ฒดํฌ๋ฐ•์Šค CSS ์ปค์Šคํ…€

์ฒดํฌ๋ฐ•์Šค๋Š” ๋Œ€๋ถ€๋ถ„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋””์ž์ธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. input ํƒ€์ž…์„ checkbox๋กœ ์‚ฌ์šฉ์‹œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณต๋˜๋Š” ์ฒดํฌ๋ฐ•์Šค์˜ ํ˜•ํƒœ๋Š” ๋ณ€ํ˜•ํ•˜๋Š” ๊ฒƒ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. CSS์—์„œ ์…€๋ ‰ํ„ฐ์™€ labelํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ปค์Šคํ…€์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 1. ๋งˆํฌ์—… input์˜ id์™€ label์˜ for ์†์„ฑ ๊ฐ‘์„ ๋™์ผํ•˜๊ฒŒ ํ•ด์•ผ input์˜ ์ฒดํฌ ์—ฌ๋ถ€๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ฒดํฌ๋ฐ•์Šค 2. ์Šคํƒ€์ผ ์ปค์Šคํ…€ ๋ฐฉ์‹์„ ์ด๋ ‡์Šต๋‹ˆ๋‹ค. - ๊ธฐ์กด checkbox๋ฅผ ์ˆจ๊น€ - checkbox + label์„ ํ†ตํ•ด ์ฒดํฌ๋ฐ•์Šค ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ฆ - checkbox:checked + label ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒดํฌํ–ˆ์„ ๋•Œ์— ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ฆ .checkboxwrap .checkbox{display: none!important;} .checkboxwrap..

React์—์„œ ๊ฐ€๋กœ ์Šคํฌ๋กค ๊ตฌํ˜„ํ•˜๊ธฐ (react-horizontal-scrolling-menu)

๋ฆฌ์•กํŠธ์—์„œ ๋งˆ์šฐ์Šค ํœ ๋กœ ๊ฐ€๋กœ ์Šคํฌ๋กค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ง์ ‘ ๋งŒ๋“ค์–ด๋„ ๋˜์ง€๋งŒ, width๊ฐ’ ์„ค์ •๋ถ€ํ„ฐ wheel๊ฐ’๋„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๊ณ  ๋งŽ์€ ๊ณต์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์–ด์„œ ๊ณต์‹ ์‚ฌ์ดํŠธ์˜ ์˜ˆ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  hook๋ฒ„์ „์œผ๋กœ ๊ตฌํ˜„ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. URL : https://www.npmjs.com/package/react-horizontal-scrolling-menu DEMO: https://codesandbox.io/s/lpjol1opmq 1. ์„ค์น˜ npm install --save react-horizontal-scrolling-menu 2. ์ ์šฉํ•˜๊ธฐ ์ €๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ ์šฉํ•˜๊ณ  ์‹ถ์–ด ์žก๋‹คํ•œ ๊ธฐ๋Šฅ์€ ๋ฐฐ์ œํ•˜๊ณ  ์•„์ฃผ ์‹ฌํ”Œํ•˜๊ฒŒ ๋งˆ์šฐ์Šค ํœ  ์Šคํฌ๋กค๋งŒ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋Š” ์ฝ”๋“œ ..

[React][ํ™˜๊ฒฝ์„ธํŒ…] react-router-dom ์‚ฌ์šฉํ•˜๊ธฐ

React ๊ฐœ๋ฐœ ์‹œ ๊ท€์ฐฎ์€ ํ™˜๊ฒฝ ์„ธํŒ…์„ ๊ธฐ์–ต์ด ๋‚˜์ง€ ์•Š์„ ๋•Œ ์ผ์ผ์ด ์ฐพ์•„ ์‚ฌ์šฉํ•˜๊ธฐ ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ์ •๋ฆฌํ•ด ๋†“๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ 1: https://reactrouter.com/web/guides/quick-start ์ฐธ์กฐ 2: ๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ  ์„œ์  - ๋ฒจ๋กœ ํผํŠธ ๊ฐœ์š” SPA์˜ ๋‹จ์ ์ค‘ ํ•˜๋‚˜๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•œ ๋ฒˆ์— ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, ์ด ๋ฌธ์ œ๋Š” ์ฝ”๋“œ์Šคํ”Œ๋ฆฟ์„ ํ†ตํ•ด ํ•ด์†Œํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ผ์šฐํŠธ ๋ณ„๋กœ ํŒŒ์ผ๋“ค์„ ๋‚˜๋ˆ„์–ด ํŠธ๋ž˜ํ”ฝ๊ณผ ๋กœ๋”ฉ ์†๋„๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด ์ง€์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ์‚ฌ์ดํŠธ๋Š” ๊ฑฐ์˜ ํ•„์ˆ˜๋กœ ์ ์šฉ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์„ค์น˜ yarn add react-router-dom ์„ค๋ช… BrowserRouter: ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ props์— ๋‹ด์•„ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. : HTML..

[์—๋Ÿฌ๋…ธํŠธ] defaultState for reducer handling [object Object] should be defined

๋ฆฌ๋•์Šค ์Šคํ„ฐ๋””์ค‘ handleAction์„ ์‚ฌ์šฉํ•˜๋˜ ์ค‘ ํ•ด๋‹น ์†Œ์Šค์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•จ // ๋ฆฌ๋•์Šค ๋ชจ๋“ˆ import { createAction, handleAction } from 'redux-actions' const INCREASE = 'counter/INCREASE' const DECREASE = 'counter/DECREASE' export const increase = createAction(INCREASE) export const decrease = createAction(DECREASE) const initialState = 0 const counter = handleAction({ [INCREASE]: state => state + 1, [DECREASE]: state => sta..

React Hook ์—์„œ Scroll ์ปจํŠธ๋กค ํ•˜๊ธฐ! top๋ฒ„ํŠผ ๊ตฌํ˜„

How can I make a Top Button, click to scroll to the top ?! ์„œ๋น„์Šค์šฉ ํ™ˆํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ํ•ญ์ƒ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ์Šคํฌ๋กค ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ฌด์กฐ๊ฑด ref ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปจํŠธ๋Ÿด ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, ์–ด์จŒ๋“  ๋ฆฌ์•กํŠธ๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‹ค ๋ณด๋‹ˆ ๊ผญ ๊ทธ๋ ‡์ง€๋งŒ์€ ์•Š๋”๋ผ๊ตฌ์š”. useEffect์—์„œ addEventListener๋ฅผ ๊ฑธ์–ด์ฃผ๊ณ  removeEventListener๋กœ clean-up์„ ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋”๋ผ๊ตฌ์š”. ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํด๋ฆญํ•˜๋ฉด ํŽ˜์ด์ง€ ์ตœ์ƒ๋‹จ์œผ๋กœ ์Šคํฌ๋กค ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ๊ตฌ์กฐ๋ฅผ ์žก์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. TOP Fixed Scroll Top Lorem ipsum dolor sit amet consect..

๋ฐ˜์‘ํ˜•