ํฐ์คํ ๋ฆฌ ๋ทฐ
์นดํ
๊ณ ๋ฆฌ ์์
๐จ Tailwind๋ก ๋ง๋๋ ์ด๋ฏธ์ง ๋ฒํผ ์ปดํฌ๋ํธ (์ ํ ํ ๋๋ฆฌ + ์ปค์คํ X๋ฒํผ ์์น)
B_log 2025. 5. 17. 22:51๋ฐ์ํ
๐จ Tailwind๋ก ๋ง๋๋ ์ด๋ฏธ์ง ๋ฒํผ ์ปดํฌ๋ํธ (์ ํ ํ ๋๋ฆฌ + ์ปค์คํ X๋ฒํผ ์์น)
์ด๋ฒ ๊ธ์์๋ ๋ค์ ๊ธฐ๋ฅ์ ๊ฐ์ง UI ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ๋ ๊ธฐ์ด ์ง์์ ์๊ฐํฉ๋๋ค.
- ์ด๋ฏธ์ง๋ฅผ ํ์ํ๋ ์ฌ๊ฐํ ๋ฒํผ
- ํด๋ฆญ ์ ์ ํ๋จ ์ํ๋ก ์ ํ๋๋ฉฐ border ํ์
- X ๋ฒํผ์ ์ค๋ฅธ์ชฝ ์๋จ์ ์์นํ๋ฉฐ, ์์น๋ ์์ ๋กญ๊ฒ ์กฐ์ ๊ฐ๋ฅ
- ์ด๋ฏธ์ง ๊ต์ฒด๊ฐ ๊ฐ๋ฅํ๋๋ก props ๊ธฐ๋ฐ ์ค๊ณ
โ ์ปดํฌ๋ํธ ๊ตฌ์กฐ
React ๊ธฐ์ค์ผ๋ก ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค:
๐ก ํต์ฌ ๊ธฐ๋ฅ
๊ธฐ๋ฅ | ๊ตฌํ ์์ |
---|---|
์ ํ ์ฌ๋ถ | selected prop์ผ๋ก ์ ์ด |
์ด๋ฏธ์ง ๊ฒฝ๋ก | imageSrc prop |
X ๋ฒํผ ์์น | closeButtonPosition prop (absolute + Tailwind ์กฐํฉ) |
ํด๋ฆญ ํธ๋ค๋ฌ | onClick , onClose ๋ถ๋ฆฌ |
โ ์์ ์ฝ๋
import React from 'react'
import { X } from 'lucide-react' // X ์์ด์ฝ (lucide-react ๋๋ HeroIcons ์ฌ์ฉ ๊ฐ๋ฅ)
function ImageSelectButton({
imageSrc,
selected = false,
onClick,
onClose,
closeButtonPosition = 'top-1 right-1',
}) {
return (
<div
onClick={onClick}
className={`relative w-20 h-20 rounded-lg flex items-center justify-center
${selected ? 'border-4 border-blue-500' : 'border border-transparent'}
bg-yellow-200 hover:cursor-pointer transition`}
>
<img src={imageSrc} alt="์ ํ ์์ด์ฝ" className="w-10 h-10" />
{onClose && (
<button
onClick={(e) => {
e.stopPropagation()
onClose()
}}
className={`absolute ${closeButtonPosition} bg-white rounded-full p-1 shadow-md`}
>
<X size={12} />
</button>
)}
</div>
)
}
export default ImageSelectButton
๐งช ์ฌ์ฉ ์์
<ImageSelectButton
imageSrc="/icons/rice.png"
selected={true}
onClick={() => console.log('์นดํ
๊ณ ๋ฆฌ ์ ํ')}
onClose={() => console.log('X ํด๋ฆญ๋จ')}
closeButtonPosition="top-2 right-2"
/>
๐ฏ ๋ง๋ฌด๋ฆฌ
์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์์ต๋๋ค:
- ๋ค์ํ ์ด๋ฏธ์ง๋ฅผ props๋ก ๊ต์ฒด ๊ฐ๋ฅ
- ์ํ์ ๋ฐ๋ผ border ์คํ์ผ๋ง ๋ณ๊ฒฝ
- ๋ซ๊ธฐ ๋ฒํผ์ ์์น๋ฅผ Tailwind ํด๋์ค ์กฐํฉ์ผ๋ก ์์ ๋กญ๊ฒ ์ค์
์์ผ๋ก ์ด ์ปดํฌ๋ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์นดํ ๊ณ ๋ฆฌ ์ ํ ๊ทธ๋ฆฌ๋, ์ญ์ ๊ฐ๋ฅํ ํ๊ทธ ๋ชฉ๋ก, ์ปค์คํ ๊ฐค๋ฌ๋ฆฌ ๋ฑ ๋ค์ํ ํํ๋ก ํ์ฅํ ์ ์์ต๋๋ค.
๐ ์ฐธ๊ณ
- X ์์ด์ฝ์ lucide-react ๋๋
@heroicons/react
ํจํค์ง๋ฅผ ์ถ์ฒํฉ๋๋ค. - Tailwind์
absolute
,top-1
,right-1
์กฐํฉ์ ํ์ฉํ๋ฉด ๋ฒํผ ์์น๋ฅผ ์์ ๋กญ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
๋ฐ์ํ
๋๊ธ
๋ฐ์ํ
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- ๊ณต์ ๊ธฐ ์ค์น#BOJ#์ด๋ถํ์#Python
- ๋ฐฐ์ดํฉ์น๊ธฐ#๋ถํ ์ ๋ณต#BOJ#Python
- ๋ฆฌ๋ชจ์ปจ#์์ ํ์#BOJ#Python
- Brackets#Stacks and Queues#Codility#Python
- ํ์ด์ฌ์๊ณ ๋ฆฌ์ฆ์ธํฐ๋ทฐ#4์ฅ
- ์ํธ์ฝ๋#dp#BOJ#Python
- ์ฟผ๋ํธ๋ฆฌ#BOJ#๋ถํ ์ ๋ณต#Python
- NumberofDiscIntersections#Codility#Sort#Python
- ๋ณ๋ ๋์ดํธ#BOJ#ํ์๋ฒ#Python
- ๋ฏธ๋ก ํ์#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ์ฌ์๊ฐ์#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- Triangle#Sorting#Codility#Python
- ๋์ ์๋ฅด๊ธฐ#์ด๋ถํ์#BOJ#Python
- ๋๋ฌด์๋ฅด๊ธฐ#BOJ#์ด๋ถํ์#Python
- ์์ด์ฌ์ดํด#BOJ#Python
- ํฐํ๋น์น#๋ฆฌ์ฝ#xbox#controller
- Distinct#Codility#Python
- ํ ๋งํ #๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ์ข ์ด์๋ฅด๊ธฐ#๋ถํ ์ ๋ณต#BOJ#Python
- N์ผ๋ก ํํ#DP#Programmers#Python
- Swift#Tuples#Range
- ๋ ์ง ๊ณ์ฐ#BOJ#์์ ํ์#Python
- PassingCars#Codility#Python
- django#slicing
- django
- ํ ํ๋ก์ ํธ#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- API#lazy#
- ๋ฐ๋ณต์์ด#๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ#Python
- ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ#BackTracking
- filter#isalnum#lower
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
๊ธ ๋ณด๊ดํจ