img 태그는 html 페이지에 이미지를 삽입할 때 사용하는 태그 입니다.
img 태그는 src 라는 필수 속성이 있어야 합니다. src속성은 브라우저에게 이미지 파일의 위치 및 파일명을 알려줍니다. 큰따옴표 안에 들어가는 경로는 절대경로이거나 상대경로 이어야 합니다.
alt 속성은 이미지가 보이지 않을 때 alt 속성에 적힌 텍스트를 이미지 대신 보여줍니다. 또한 스크린 리더와 같은 접근성을 위한 프로그램에 정보를 제공하기 위한 용도로 사용되며, 브라우저에 이미지에 대한 정보를 전달함으로써 SEO에 도움을 주기도 합니다.
srcset 속성을 사용하면 여러 해상도에 대응하여 브라우저가 최상의 이미지를 로딩하는데 도움을 줄 수 있습니다. srcset 속성은 다양한 크기를 가지는 동일 이미지를 최소 2개 이상 사용할 때 사용하며, 브라우저에게 이미지의 선택권을 위임하는 속성입니다.
x서술자는 화소의 밀도(pixel density)를 나타냅니다. 디바이스의 화소 밀도에 따른 이미지를 로딩하도록 브라우저에 알려줍니다.
pixel density : 동일한 면적에 들어가는 화소의 수를 의미 합니다. 화소의 갯수가 많을수록 더 높은 해상도의 기기임을 알 수 있습니다.
w서술자는 원본 이미지의 넓이가 차례대로 300px, 600px, 700px 임을 브라우저에게 알려줍니다. px가 아닌 w로 표기하는것에 주의 하세요.
예시) 사이즈가 큰 이미지 먼저 작성하기
width="200px" srcset="img/logo_3.png 700w, img/logo_2.png 600w, img/logo_1.png 300w" src="a.png" alt="test">
w서술자와 x서술자는 동시에 사용할 수 없다.
또한 src 속성을 유지하는 것은 필수.
srcset을 사용할 수 없는 브라우저를 대비해 사용하는 이미지 입니다.
sizes 속성은 뷰포트의 조건에 따라 이미지가 UI 안에서 차지하게 될 사이즈를 브라우저에 알려줍니다.
<img
srcset="img/logo_3.png 700w,
img/logo_2.png 600w,
img/logo_1.png 300w"
sizes="(min-width: 960px) 250px,
(min-width: 620px) 150px,
300px"
src="a.png"
alt="test">
브라우조는 우리가 제공한 이미지의 원본 사이즈와 뷰포트에 따른 이미지의 사이즈 정보를 통합해 가장 적절한 이미지를 로딩하게 됨.
srcset 속성은 sizes 속성이 없다고 해도 잘 동작하겠지만, 웹표준을 준수하기 위해서는 srcset속성을 사용하면 그에 맞는 sizes 속성도 반드시 명시되어야 합니다.
sizes 속성을 사용할 때 주의할 점은 css를 통한 이미지의 사이즈를 컨트롤 하는 방법과 충돌 할 수 있다는 점. CSS 스타일이 sizes 속성보다 우선합니다. 협업할 때는 사전에 반드시 동료들에게 어떠한 방법으로 반응형 이미지를 처리했는지 공유합니다.
picture 요소는 source 요소와 img 요소를 통해 각기 다른 디스플레이 혹은 디바이스에 따라 조건에 맞는 이미지를 보여주는 요소 입니다. img 요소의 srcset이 화면에 따른 이미지의 크기를 조절한다면 picture 요소는 이미지 포맷 자체를 변경 할 수 있습니다.
<picture>
<source srcset="babies_large.jpeg" media="(min-width:960px)">
<source srcset="babies.jpeg" media="(min-width:620px)">
<img src="babies_small.jpeg" alt="귀여운 아기 팽귄들">
</picture>
위의 코드에서 source 요소 안의 media 속성을 볼 수 있습니다. picture 요소는 media 속성의 값을 통해 조건에 알맞는 이미지를 찾게 됩니다. 조건에 맞는 source 요소 안의 srcset 속성 값을 찾아 img 태그에 src에 넣어 화면에 보여주게 됩니다. 이러한 구조로 작동하기 때문에 img 요소가 없다면 이미지가 화면에 나타나지 않는다는 점에 주의 하세요.
picture 와 source 요소 자체는 이미지를 표현하지 않습니다.
이미지의 포맷 타입을 브라우저에게 알려줍니다.
<picture>
<source srcset="babies.webp" type="image/webp">
<source srcset="babies.avif" type="image/avif">
<img src="babies.jpeg" alt="귀여운 아기 팽귄들">
</picture>
위에서부터 차례대로 브라우저가 지원하는 포맷인지 탐색하며 만약 지원하지 않는 포맷이라고 판단되면 다음 source 요소로 넘어갑니다.
만약 모든 source 요소의 이미지 사용이 불가능하면 최후에 img 요소의 이미지를 랜더링 합니다. 때문에 Webp나 AVIF와 같은 최신 포맷의 이미지를 지원하고 싶다면 크로스 브라우징을 위해 picture 요소와 함께 사용 하는것이 좋습니다.
이러한 방식의 크로스 브라우징 기법을 점진적 향상기법 이라고 합니다.
점진적 향상 기법
기본적으로 예전 기술 환경에서 동작할 수 있는 기능을 구현해두고, 최신 기술을 사용할 수 있는 환경에서는 최신 기술을 제공하여 더 나은 사용자 경험을 제공할 수 있는 방법 입니다.
이미지 포맷의 종류
GIF (Graphics Interchange Format) :
256색의 컬러만 표현 가능하기 때문에 선명하진 않지만 용량이 적게 듭니다. 투명은 표현 가능하지만 그 정도를 조절하는건 불가능하며, 때문에 그림자 표현도 불가능함. 애니메이션 처리가 가능하여 짤로 이용
JPG / JPEG (Joint Photographic Expert Group image) :
매우 화소가 높고, 용량도 적지만 투명처리가 불가능 합니다.
PNG (Portable Network Graphics) :
왠만한 컬러는 모두 표현 가능하여 투명 영역을 처리 가능하지만 용량이 큼.
SVG (Scalable Vector Graphics) :
SVG 형식의 벡터 이미지는 손실이나 품질 저하 없이 모든 크기에서 렌더링이 가능합니다.
WebP (Web Picture Format) :
압축률이 좋다고 소문난 JPEG 이미지에 비해 무려 용량은 70% 수준으로 낮지만 더 뛰어난 색상을 지원하는 포맷 입니다. 그럼에도 불구하고 PNG 처럼 애니메이션 표현도 가능한 만능 포맷 입니다.
AVIF (AV1 Image File Format) :
WebP처럼 뛰어난 색상표현, 애니메이션 지원, 투명도 표현 모두 가능하며 JPEG 이미지의 50% 수준인 용량을 자랑한느 차세대 이미지 포맷입니다. 아직 지원하지 않는 브라우저가 많음에 주의
iframe은 현재 HTML 페이지에서 또 다른 HTML 페이지를 보여주고 싶을 때 사용합니다. iframe은 width 혹은 height 속성으로 크기를 조절 합니다. 따로 값을 설정하지 않는다면 height는 150px, width는 300px을 기본값
<iframe src="링크"></iframe>
src 속성으로 불러올 HTML링크를 설정할 수 있으며 보통 youtube 영상을 불러올 때 많이 사용합니다.
youtube 영상을 불러오게 되면 보통 아래와 같은 속성 값들을 가지게 됩니다.
<iframe width="1280" height="720" src="https://www.youtube.com/embed/-iuX3r8PSzU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>
frameborder - 테두리를 그려줄지 결정합니다. 0 혹은 1의 값을 가집니다. 이제 더는 사용하지 않음, css border 속성으로 대체
allow - iframe 에서 허용할 기능들을 지정
allowfullscreen - 전체화면을 지원
autoplay 속성은 브라우저 정책 상 일부 모바일 브라우저에 작동하지 않을 수 있으며, 항상 mute 속성과 함께 사용되어야 합니다.
이는 모바일 환경에서 autoplay 기능으로 인한 의도하지 않은 트래픽 유발을 방지하고 접근성 측면에서 좋지 않기 때문입니다. 이러한 특징은 iframe, audio, video 요소 모두 동일하게 적용됩니다.
audio는 음악 컨텐츠를 재생하기 위한 태그 입니다. src 속성은 브라우저에게 오디오 파일의 위치 및 파일명을 알려줌
<audio src="폴더/파일명" controls autoplay loop ></audio>
음악 파일을 제어할 수 있는 컨트롤러를 불러 옵니다.
로딩이 완료된 파일을 자동 재생
음악을 반복함. audio 역시 source 요소를 자식으로 사용할 수 있음. 크로스 브라우징을 위해 여러 포맷으로 지원 가능
동영상 파일을 재생하기 위한 태그 입니다. 기본적인 사용법은
<video src="batman.mp4" controls autoplay loop width="450" height="300"></video>
다음과 같은 코드 사용 시 크로스 브라우징과 사용자 친화적인 비디오 구현가능
<video controls poster="batman.jpeg" preload="auto" width="450" height="300"> <source src="batman.mp4" type="video/mp4"> <source src="batman.ogv" type="video/ogg"> <source src="batman.webm" type="video/webm"> <track kind="subtitles" src="foo.en.vtt" srclang="ko" label="batman"> </video>
preload - 좋은 사용자 경험을 위한 속성
none - 비디오 파일을 미리 로딩하지 x, 서버가 최소한의 트래픽을 유지하며 페이지 로딩이 좀 더 빨라짐
metadata - 비디오 파일을 미리 로딩하지 않지만 파일의 메타데이터를 미리 가져오도록 함 (영상의 길이 같은)
auto - -미리 로딩하여 바로 볼수 있도록 준비
poster - 영상이 로딩 중 일 때 대신해서 화면에 보여줄 이미지를 지정
source - 다른 embedded 요소들과 마찬가지로 source 요소를 통해 브라우저가 지원하는 파일 포멧을 여러가지 지정할 수 있음.
track - audio 혹은 video 요소의 자식으로 자막과 같은 시간 기반 텍스트 데이터(텍스트 트랙)을 보여주고자 할 때 사용
kind - 텍스트 트랙의 종류를 지정함. subtitles, captions 등을 지정
srclang - 언어를 지정
label - 제목을 정함
WebVTT(Web Video Text Tracks)
track 요소에서 사용할 자막 파일 포맷. vtt로 표시함
subtitles VS captions
자막 - 사청자가 이해할 수 없는 언어에 대한 번역을 제공
설명 - 자막을 포함한 오디오 트랜스크립션을 제공. 오디오 트랜스크립션이란 소리를 내는 주체, 음악이나 효과와 같은 비 언어적 소리를 포함한 모든 소리 데이터를 문자로 표현하는것을 말함.