[TIL] Embedded content

최영준·2022년 9월 8일
2
post-thumbnail

학습한 내용을 정리하고 복습할 겸, 타이핑 하면서 머리에 넣어야지 하고 생각 했는데 머리에 전혀 들어오지 않았다.
블로그를 하는 본래의 목적과도 맞지 않는 삽질이어라...

img

img 태그는 html 페이지에 이미지를 삽입할 때 사용하는 태그이다.

외부 이미지 사용 시 주의할 점

상업적 용도로 사용한다면 가능한지가 중요
그렇지 않다면 출처 안밝혀도 된다
그랬다간 소송당한다
사업적 용도로 사용하여 돈을 벌었는지가 쟁점

이미지의 경로

-절대경로 : 현재 파일 위치와 상관없이 열 수 있는 경로
-상대경로 : 현재 파일을 기준

src(source)

img 태그는 src라는 필수 속성이 있어야 한다. src 속성은 브라우저에게 이미지 파일의 위치 및 파일명을 알려준다. 큰따옴표 안에 들어가는 경로는 절대경로이거나 상대경로이어야 한다,

alt(alternative text)

alr 속성은 이미지가 보이지 않을 때 alt 속성에 적힌 텍스트를 이미지 대신 보여준다. 한 스크린리더와 같은 접근성을 위한 프로그램에 정보를 제공하기 위한 용도로 사용되며, 브라우저에 이미지에 대한 정보를 전달함으로써 SEO(Search Engine Optimization)에 도움을 주기도 한다.

    <!-- 스크린 리더가 읽지 않는다 -->
    <img src="a.jpg" alt="">
    <!-- 스크린 리더가 a를 읽는다 -->
    <img src="a.jpg">
    <!-- 스크린 리더가 이미지를 읽는다 -->
    <img src="a.jpg" alt="이미지">

반응형 이미지를 위한 srcset

srcset 속성을 사용하면 여러 해상도에 대응하여 브라우저가 최상의 이미지를 로딩하는데 도움을 줄 수 있다. srcset 속성은 다양한 크기를 가지는 동일 이미지를 최소 2개 이상 사용할 때 사용하며, 브라우저에게 이미지의 선택권을 위임하는 속성이다.

x서술자, w서술자, sizes 속성

x서술자는 화소의 밀도(pixel density)를 나타낸다. 디바이스의 화소 밀도에 따른 이미지를 로딩하도록 브라우저에 알려준다.

<img
width="200px"
srcset="img/logo_1.png 2x,
        img/logo_2 png 3x"
src="a.png"
alt="test">     

💡 Pixel density : 동일한 면적에 들어가는 화소의 수를 의미한다. 화소의 갯수가 많을수록 더 높은 해상도의 기기임을 알 수 있다.

여러분이 보고있는 화면의 화소 밀도를 알고 싶으시다면 브라우저 api를 이용해서 볼 수 있다. 개발자 화면의 콘솔창에서 window.devucePixelRatio 명령어를 입력해보라.

w서술자는 원본 이미지의 넓이가 차례대로 300px, 600px, 700px 임을 브라우저에게 알려준다. px이 아닌 w로 표기하는 것에 주의하자.

<img
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 을 사용할 수 없는 브라우저(Internet Explorer)를 대비해 사용하는 이미지다.

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

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>

media 속성

위의 코드에서 source 요소 안의 media 속성을 볼 수 있다.
picture 요소는 media 속성의 값을 통해 조건을 알맞는 이미지를 찾게 된다. 조건에 맞는 source 요소 안의 srcset 속성 값을 찾아 img 태그의 src에 넣어 화면에 보여주게된다.
이러한 구조로 작동하기 때문에 img 요소가 없다면 이미지가 화면에 나타나지 않는다는 점에 주의해야 한다.
picture와 source 요소 자체는 이미지를 표현하지 않는다.

type 속성

이미지의 포맷 타입을 브라우저에게 알려준다.

<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 처럼 투명도 표현 가능하며, GIF 처럼 애니메이션 표현도 가능한 만능 포맷입니다.
  • AVIF (AV1 Image File Format) :

    WebP 처럼 뛰어난 색상표현, 애니메이션 지원, 투명도 표현 모두 가능하며 JPEG 이미지의 50% 수준인 용량을 자랑하는 차세대 이미지 포맷입니다. 아직 지원하지 않는 브라우저가 많음에 주의해야합니다.

💡 picture VS srcset

해상도에 따라 '다른 이미지(포맷 포함)'를 보여주고 싶을 때에는 picture를, '같은 이미지’인데 해상도에 따라 더 높은 해상도 이미지를 보여주고 싶을 때에는 srcset을 사용한다!!!!!!!!!!!

iframe

iframe은 현재 HTML 페이지에서 또 다른 HTML 페이지를 보여주고 싶을 때 사용한다. iframe은 width 혹은 hegiht 속성으로 크기를 조절한다. 따로 값을 설정하지 않는다면 hegiht는 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

audio는 음악 컨텐츠를 재생하기 위한 태그이다. src 속성은 브라우저에게 오디오 파일의 위치 및 파일명을 알려준다.

<audio src="폴더/파일명" controls autoplay loop ></audio>  

controls : 음악 파일을 제어할 수 있는 컨트롤러를 불러온다.
autoaplay : 로딩이 완료된 파일을 자동으로 재생한다.(Chrome에서 정책상 auto가 안됨. 가끔되나 안되는게 맞음. 그래서 js로 컨트롤한다.)
loop : 음악을 반복한다.

<audio controls>
    <source src="flow.ogg" type="audio/ogg">
    <source src="flow.mp3" type="audio/mpeg">
</audio>  

audio 요소 역시 source 요소를 자식으로 사용할 수 있다. 다른 요소와 마찬가지로 크로스 브라우징을 위해 여러 포맷의 파일을 지원할 수 있다.

video

video는 동영상 파일을 재생하기 위한 태그이다. 기본적인 사용법을 알아보자.

  <video src="batman.mp4" controls autoplay loop width="450" height="300"></video>  
  • src : 브라우저에게 비디오 파일의 위치 및 파일명을 알려준다.
  • controls : 영상 파일을 재생하는데 필요한 컨트롤러를 불러온다.
  • autoplay : 로딩이 완료되면 자동으로 영상 파일을 재생시킨다.
  • loop : 영상이 종료되면 다시 반복해서 재생한다.

다음과 같은 코드를 사용하면 크로스브라우징과, 좀 더 사용자 친화적인 비디오를 구현 할 수 있다.

<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 : 비디오 파일을 미리 로딩하지 않는다. 서버가 최소한의 트래픽을 유지하며 페이지 로딩이 좀 더 빨라진다.
    • metadata : 비디오 파일을 미리 로딩하지 않지만 파일의 메타데이터(예를 들어서 영상의 길이)를 미리 가져오도록 한다.
    • auto : 비디오 파일을 미리 로딩하여 사용자가 바로 영상을 볼 수 있도록 준비한다.
  • poster : 영상이 로딩 중 일 때 대신해서 화면에 보여줄 이미지를 지정한다.
  • <source> : 다른 embedded 요소들과 마찬가지로 source 요소를 통해 브라우저가 지원하는 파일 포멧을 여러가지 지정할 수 있다.
  • <track> : <audio> 혹은 <video> 요소의 자식으로 자막과 같은 시간 기반 텍스트 데이터(텍스트 트랙)를 보여주고자 할 때 사용한다.
    • kind : 텍스트 트랙의 종류를 지정한다. subtitles(자막), captions(설명) 등을 지정할 수 있다.
    • srclang : 텍스트 트랙의 언어를 지정한다.
    • label : 텍스트 트랙의 제목을 정한다.

💡 자막 (subtitles) VS 설명 (captions)

자막 (subtitles) : 시청자가 이해할 수 없는 언어에 대한 번역을 제공한다.
설명 (captions) : 자막을 포함한 오디오 트랜스크립션을 제공한다. 오디오 트랜스크립션이란 소리를 내는 주체, 음악이나 효과와 같은 비 언어적 소리를 포함한 모든 소리 데이터를 문자로 표현하는것을 말한다. 주로 청각장애를 가진 사용자에게 적합하다.

💡코덱(codec)과 포맷(format)

웹에서 최적의 비디오 영상을 출력하는 것은 이미지 포맷을 선택하는것에 비해 복잡합니다.
그 이유는 코덱과 포맷(확장자) 때문인데요.

  1. 코덱은 촬영을 통해 얻은 원본 영상을 편집하여 압축한 결과물을 의미하고 (H.246, ProRes 등등)
  2. 포맷은 코덱을 담아 재생 가능한 플레이어에 전달되는 컨테이너의 역할을 합니다. (mp4, WebM 등등)
    결국 비디오 파일은 코덱과 포맷의 조합임을 알 수 있습니다.
    사용한 코덱의 종류에 따라 영상의 퀄리티와 용량이 결정되고, 코덱에 따라 담을 수 있는 포맷도 다르며, 브라우저에 따라 지원하는 코덱과 포맷이 모두 다르기 때문에 사용하고자 하는 용도에 따라 신중하게 결정하도록 합니다.
profile
기록하는 습관을 들여보자!

4개의 댓글

comment-user-thumbnail
2022년 9월 12일

어딘가 귀여운 이번 포스팅 ㅋㅋ 저도 TIL 쓴 것들을 보다가,, 문득,, 복습에 도움이 안 되는 걸 깨달아서 혼란스럽더라구요 ㅎ,, 그래도 이렇게 깨닫고 발전해 나가는 게 어디야~ 싶습니다~! 연휴 기간에 푹 쉬셨다니 다행이에요 크크 이번 주도 게더타운에서 만나요!!! 😎💪🏻

1개의 답글
comment-user-thumbnail
2022년 9월 12일

저도 교안 따라치기만 한것 아닌가 뭔가 고민됐는데 그래도 이렇게 자세히 다시 한번 읽으면서 옮겨보는것도 큰 공부가 되는 것 같아요!!

1개의 답글