🌐
κ°œλ°œβ€’ν”„λ‘ νŠΈμ—”λ“œ

Safari μ—μ„œ 이미지에 white borderκ°€ κΉœλ°˜μ΄λŠ” 이슈 κ°œμ„ 

2024.08.15

ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ μ‚¬νŒŒλ¦¬ λΈŒλΌμš°μ €μ—μ„œ λ°œμƒν•˜λŠ” μŠ€νƒ€μΌ 이슈 κ°œμ„ κ³Όμ •μ„ κ°„λž΅ν•˜κ²Œ 기둝해두렀고 ν•œλ‹€.

μ˜μƒμ„ 보면 μ•„λž˜ μ΄λ―Έμ§€μ²˜λŸΌ ν•˜μ–—κ²Œ ν…Œλ‘λ¦¬κ°€ κΉœλΉ‘μ΄λŠ” ν˜„μƒμ„ λ°œκ²¬ν–ˆλ‹€.

μ‚¬νŒŒλ¦¬ 이미지 이슈

safari white border κ΄€λ ¨ ν‚€μ›Œλ“œλ‘œ 검색을 ν•˜λ‹ˆ λ‚΄κ°€ κ²ͺ은 μ΄μŠˆμ™€ λ™μΌν•œ ν˜„μƒμœΌλ‘œ λ³΄μ΄λŠ” μŠ€νƒμ˜€λ²„ν”Œλ‘œμš° 제보λ₯Ό λ°œκ²¬ν–ˆλ‹€.

λ‚΄μš©μ„ λ³΄λ‹ˆ μ΄λŸ¬ν•œ ν˜„μƒμ΄ λ°œμƒν•œ μ΄μœ λŠ” μ‚¬νŒŒλ¦¬ 15의 버그인데, μ§€μ—°λ‘œλ”©(loading='lazy')을 μ μš©ν•˜λ©΄ λ°œμƒν•˜λŠ” μ΄μŠˆμ˜€κ³ , next.jsλŠ” 기본적으둜 μ§€μ—°λ‘œλ”©μ΄ μ μš©λ˜μ–΄ μžˆμœΌλ‹ˆ 버그가 λ°œμƒν–ˆλ‹€.

16.4 버전 λΆ€ν„°λŠ” ν•΄κ²°λ˜μ—ˆλ‹€κ³  λ˜μ–΄μžˆμ§€λ§Œ νšŒμ‚¬ 개발 μ •μ±… 상 latest λ²„μ „μœΌλ‘œλΆ€ν„° 3개 μ΄ν•˜μ˜ λ²„μ „κΉŒμ§€ 지원해야 ν–ˆλ‹€. κ·Έλž˜μ„œ 이슈 κ°œμ„ μ΄ ν•„μš”ν–ˆλŠ”λ°, priorityλ₯Ό μ„€μ •ν•˜κ±°λ‚˜ loading을 eagal둜 변경해도 해결은 κ°€λŠ₯ν–ˆμ§€λ§Œ, μ„±λŠ₯상 μŠ€νƒ€μΌλ‘œ κ°œμ„ ν•˜λŠ”κ²Œ 베슀트라고 μƒκ°λ˜μ–΄ μŠ€νƒμ˜€λ²„ν”Œλ‘œμš° 해결방법인 clip-pathλ₯Ό μ μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€.

@supports (font: -apple-system-body) and (-webkit-appearance: none) {
  img[loading='lazy'] {
    clip-path: inset(0.6px);
  }
}

κ°œλ°œν™˜κ²½μ—μ„œ μŠ€νƒ€μΌ ν”„λ ˆμž„μ›Œν¬λ‘œ tailwindλ₯Ό μ‚¬μš©μ€‘μ΄λΌ 그에 맞게 μ μš©ν–ˆλ‹€.

const [isLoaded, setIsLoaded] = useState(false);

<Image
    ...
    onLoad={() => setIsLoaded(true)}
    className={`... ${isLoaded ? '' : '[clip-path:inset(0.6px)]'}`}
    ...
/>

μ μš©ν•˜κ³  λ‚˜λ‹ˆ ν•˜μ–—κ²Œ ν…Œλ‘λ¦¬κ°€ λ³€ν•˜λŠ” ν˜„μƒμ€ ν•΄κ²°ν–ˆλŠ”λ° 또 λ‹€λ₯Έ λ¬Έμ œκ°€ λ°œμƒν–ˆλ‹€.

ν¬λ‘¬μ—μ„œλ„ λ™μΌν•˜κ²Œ clip-pathκ°€ μ μš©λ˜μ–΄ 였히렀 ν¬λ‘¬μ—μ„œ μ΄μƒν•˜κ²Œ λ³΄μ΄κ²Œλλ‹€.

κ·Έλž˜μ„œ ν•΄ν‚€ν•˜μ§€λ§Œ, μ‚¬νŒŒλ¦¬μ—μ„œλ§Œ μ μš©λ˜λ„λ‘ ν•˜λŠ” 방법을 μ°Ύκ²Œλλ‹€.

@supports (-webkit-hyphens: none) {
    display: none;
}

κ²°λ‘ 

결둠적으둜 μ΅œμ’… μ½”λ“œλŠ” μ•„λž˜μ™€ 같이 μˆ˜μ •ν–ˆλ‹€.

const [isLoaded, setIsLoaded] = useState(false);

<Image
    ...
    onLoad={() => setIsLoaded(true)}
    className={`... ${isLoaded ? '' : 'supports-[-webkit-hyphens:none]:[clip-path:inset(0.6px)]'}`}
    ...
/>

supports-[-webkit-hyphens:none] 뢀뢄은 config둜 λΉΌμ„œ μž¬μ‚¬μš© ν•  수 μžˆλ„λ‘ μˆ˜μ •ν–ˆλ‹€.