picture
<picture>은 HTML5에서 추가된 요소 중 하나다. 미디어 쿼리를 이용해서 다양한 디스플레이에서 특정 이미지를 변경할 수 있기 때문에 반응형 웹페이지에서 쓰일 수 있다. 여러개의 source 요소와 하나의 img 요소를 사용할 수 있다.
<picture>
<!-- 480px 이하 디바이스에서 노출되는 이미지 -->
<source media="(max-width: 480px)" srcset="images/hero_mobile.png">
<!-- 481px 이상 1025px 이하 디바이스에서 노출되는 이미지 -->
<source media="(min-width: 481px) and (max-width: 1025px)" srcset="images/hero_tablet.png">
<!-- picture을 지원하지 않거나 앞서 선언한 속성 이외 디바이스에서 노출되는 이미지 -->
<img src="images/hero.png" alt="">
</picture>
위 소스에서 images 폴더 안엔 총 3장의 png가 있고 source 속성에서 노출될 디바이스 크기를 미디어 쿼리로 선언하고 srcset으로 출력될 이미지 경로를 작성해줬다. 참고로 source는 개수가 여러개 추가될 수 있지만 Img는 한장만 추가할 수 있다.
단순히 반응형 이미지 뿐만 아니라 파일 형식 지원이 한정적인 avif, webp 확장자는 대체 이미지를 제공할 수도 있다.
<picture>
<source srcset="images/hero.webp" type="image/webp">
<img src="images/hero.png" alt="">
</picture>
webp 확장자 이미지를 png로 변경하는 법: https://m.post.naver.com/viewer/postView.nhn?volumeNo=9688816&memberNo=1834
object-fit, background-size
object-fit은 CSS에서 <img>와 <video>의 크기를 디바이스 크기가 변할 때 어떤 식으로 조절이 될 지 결정하는 속성이다.
background-size도 object-fit과 비슷하지만 외부 객체 요소와 달리 background의 url 경로 이미지를 조정할 수 있는 속성이다. object-fit의 속성값을 일부 가져가지만 px 단위 등으로 크기를 조정할 수 있는 성향이 훨씬 더 강하다.
속성값
- contain
- cover
- fill
- none
- scale-down
object-fit은 위의 속성값을 전부 가져가지만 background-size는 contain과 cover만 가져간다.
contain
가로세로 비율은 유지한 채 요소가 박스 안에 들어가게 된다. 박스와 요소의 비율이 동일하지 않으면 박스에 공백이 생기게 된다.
<div class="imgbox" style="width: 300px; height: 300px;">
<img src="images/hero.png" alt="" style="width: 100%; height: 100%; object-fit: contain;">
</div>
cover
가로세로 비율은 유지한 채 요소가 박스를 가득 채우게 된다. 박스와 요소의 비율이 동일하지 않으면 요소의 일부가 잘리게 된다.
<div class="imgbox" style="width: 300px; height: 300px;">
<img src="images/hero.png" alt="" style="width: 100%; height: 100%; object-fit: cover;">
</div>
fill
가로세로 비율을 유지하지 않고 요소가 박스를 가득 채우게 된다.
<div class="imgbox" style="width: 300px; height: 300px;">
<img src="images/hero.png" alt="" style="width: 100%; height: 100%; object-fit: fill;">
</div>
none
object-fit 요소를 사용하지 않는다.
scale-down
none과 contain 중 대체 콘텐츠의 크기가 더 작아지는 값을 선택한다.
'TIL LIST > HTML, CSS' 카테고리의 다른 글
[HTML, CSS] border 속성을 사용하지 않은 border 만들기 (2) | 2022.08.03 |
---|---|
[Udemy] 가격표 페이지 만들기 (0) | 2022.08.01 |
[CSS] calc() 사칙연산으로 속성값 정하는 방법 (0) | 2022.07.22 |
[SCSS] mixin을 이용한 폰트 적용 방법 (0) | 2022.07.20 |
[HTML, CSS] 글자 백그라운드에 svg 파일을 삽입하는 법 (0) | 2022.07.20 |