[HTML/CSS] ์ ์ฉํ HTML ํ๊ทธ ๋ชจ์
<progress>
— ์งํ ์ํ ๋ง๋
<progress>
ํ๊ทธ๋ ์์
์ ์๋ฃ ์ ๋๋ฅผ ๋ํ๋ธ๋ค. progress ํ๊ทธ์์ ์ต์๊ฐ์ ํญ์ 0
์ด๋ฉฐ, ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ง์ ํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ตณ์ด min
์์ฑ์ ๋ช
์ํ์ง ์์๋ ๋๋ค(๋ฐ๋ฉด meta
ํ๊ทธ์์ min
์์ฑ์ ์ง์ ํด์ผ ํ๋ค).
See the Pen <progress> element by ColorFilter (@colorfilter) on CodePen.
์์ฑ
<label for="file">File progress</label>
<progress id="file" max="100" value="70"></progress>
min
์์ฑ : ์ต์๊ฐ / ๊ธฐ๋ณธ๊ฐ0
/ ์ฌ์ฉ์ ์ง์ ๋ถ๊ฐmax
์์ฑ : ์ต๋๊ฐ(0
๋ณด๋ค ์ปค์ผํจ) / ๊ธฐ๋ณธ๊ฐ1
value
์์ฑ : ํ์ฌ๊ฐ /0
์ด์max
์ดํ
์ปค์คํ ์คํ์ผ
progress ํ๊ทธ๋ ๊ฐ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๊ธฐ๋ณธ ์คํ์ผ์ ๊ฐ์ง๋ค. ํฌ๋กฌ์ ::-webkit-progress...
์๋ ์๋ฆฌ๋จผํธ๋ก ์ํ๋ ์คํ์ผ์ ์ง์ ํ ์ ์๋ค. ๋ ์์ธํ ์คํ์ผ ์ง์ ๋ฐฉ๋ฒ์ CSS Tricks์ฐธ๊ณ .
โถ progress[value]
: ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ Progress ์คํ์ผ ๋ฆฌ์
progress[value] {
-webkit-appearance: none;
appearance: none;
width: 200px;
height: 24px;
}
โท progress[value]::-webkit-progress-bar
: Progress ๋ง๋ ์คํ์ผ ์ง์
โธ progress[value]::-webkit-progress-value
: ์งํ ๋ง๋ ์คํ์ผ ์ง์
<meter>
— ์งํ ์ํ ๋ง๋
<meter>
ํ๊ทธ ์ญ์ <progress>
์ฒ๋ผ ์งํ ์ํ๋ฅผ ํํํ๋ ํ๊ทธ์ง๋ง ๋ ๋ง์ ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค. ํ์ฌ value
๊ฐ ์ง์ ํ ๋ฒ์์ ์์ ๊ฒฝ์ฐ ๋ง๋ ์์๋ ๊ทธ์ ๋ง๊ฒ ๋ณ๊ฒฝ๋๋ค(็บข, ้ป, ็ปฟ).
<label for="fuel">Fuel level:</label>
<meter id="fuel" min="0" max="100" low="33" high="66" optimum="80" value="50">
at 50/100
</meter>
See the Pen <meter> element by ColorFilter (@colorfilter) on CodePen.
์์ฑ โญ๏ธ
min
์์ฑ : ์ธก์ ๋ฒ์์ ์ต์๊ฐ(max
๋ฏธ๋ง๊ฐ ๋ช ์) / ๋ฏธ์ง์ ์ ๊ธฐ๋ณธ๊ฐ0
max
์์ฑ : ์ธก์ ๋ฒ์์ ์ต๋๊ฐ(min
์ด๊ณผ๊ฐ ๋ช ์) / ๋ฏธ์ง์ ์ ๊ธฐ๋ณธ๊ฐ1
value
์์ฑ : ํ์ฌ ๊ฐ /min
์ด์max
์ดํ / ๋ฏธ์ง์ ํน์ ์๋ชป๋ ๊ฐ์ด๋ฉด0
์ผ๋ก ๊ฐ์ฃผlow
์์ฑ : ๋ฎ์ ๊ฐ์ผ๋ก ๊ฐ์ฃผ๋ ๋ฒ์(min
์ด๊ณผ ~high|max
๋ฏธ๋ง๊ฐ ๋ช ์) / ๋ฏธ์ง์ ์min
๊ณผ ๋์ผhigh
์์ฑ : ๋์ ๊ฐ์ผ๋ก ๊ฐ์ฃผ๋ ๋ฒ์(max
๋ฏธ๋ง ~low|min
์ด๊ณผ๊ฐ ๋ช ์) / ๋ฏธ์ง์ ์max
์ ๋์ผoptimum
์์ฑ : ์ต์ ๋ฒ์๋ก ์ถ์ ํ ๊ฐ. ์๋ต์optimum
๊ฐ์(์ต์๊ฐ + ์ต๋๊ฐ) / 2
low
≤optimum
≤high
ํน์optimum
๋ฏธ์ง์ : ์ค๊ฐ ์ซ์๊ฐ ์ด์์ ์ธ ๊ฒฝ์ฐlow
์ด์high
์ดํ : ์ด๋ก์low
๋ฏธ๋ง ํน์high
์ด๊ณผ : ๋ ธ๋์
min
≤optimum
<low
(low
์ดํ) : ์ซ์๊ฐ ์์์๋ก ์ด์์ ์ธ ๊ฒฝ์ฐlow
์ดํ : ์ด๋ก์low
์ด๊ณผhigh
์ดํ : ๋ ธ๋์high
์ด๊ณผ : ๋นจ๊ฐ์
max
≥optimum
>high
(high
์ด์) : ์ซ์๊ฐ ํด์๋ก ์ด์์ ์ธ ๊ฒฝ์ฐhigh
์ด์ : ์ด๋ก์low
์ด์high
๋ฏธ๋ง : ๋ ธ๋์low
๋ฏธ๋ง : ๋นจ๊ฐ์
์ปค์คํ ์คํ์ผ
<meter>
์ ์๋ ์๋ฆฌ๋จผํธ๋ ์์ง ํ์ค(Standard)๊ฐ ์๋๋ฏ๋ก ๋ฐฐํฌ ๋ฒ์ ์ ์ฌ์ฉํ์ง ๋ง๊ฒ — via MDN
::-webkit-meter-inner-element
: WebKit ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์์<meter>
์์ ๋ด๋ถ ์คํ์ผ๋ง ์ง์ ::-webkit-meter-bar
: ๋ฏธํฐ ๋ง๋ ์ปจํ ์ด๋์ ๋ํ ์คํ์ผ ์ง์ ::-webkit-meter-optimum-value
: ์ ์ ์์น(์ด๋ก์) ๋ง๋์ ๋ํ ์คํ์ผ ์ง์ ::-webkit-meter-suboptimum-value
: ํ์ ์ ์ ์์น(๋ ธ๋์) ๋ง๋์ ๋ํ ์คํ์ผ ์ง์
<details>
— ํ ๊ธ
<details>
<summary>
ํ๊ทธ๋ฅผ ์ด์ฉํด ํผ์น๊ณ ์ ํ๋ ํ ๊ธ์ ๊ตฌํํ ์ ์๋ค. <details>
์ ์ฒซ๋ฒ์งธ ์์๊ฐ <summary>
๋ฉด ๋ ์ด๋ธ๋ก(ํผ์น๊ธฐ ์ ์ ๋ชฉ์ผ๋ก ๋ณด์ด๋ ๊ณณ) ์ฌ์ฉ๋๋ค. <summary>
์์ญ์ ํด๋ฆญํ๋ฉด ํ ๊ธ๋๋ค.
<details>
<summary>ํ ๊ธ ์ ๋ชฉ</summary>
<span>ํผ์น ํ ๋ด์ฉ</span>
</details>
์์ฑ
<details>
ํ๊ทธ๋ open
์์ฑ์ ๊ฐ์ง๋ฉฐ ํผ์น๊ธฐ ์ ์(๊ธฐ๋ณธ๊ฐ) false
, ํผ์น ํ์ true
๊ฐ์ ๊ฐ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ผ๋ก ํผ์ณ์ง๋๋ก ๋ง๋ค๊ณ ์ถ์ผ๋ฉด open=true
์์ฑ์ ์ฃผ๋ฉด ๋๋ค.
<details open><!-- ... --></details>
์คํ์ผ
<details>
ํ๊ทธ๋ open
์์ฑ ์ ํ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํด ํผ์ณ์ง ์ํ์ ์คํ์ผ์ ์ง์ ํ ์ ์๋ค.
details[open] {
background: Lavender; /* ํ ๊ธ์ด ํผ์ณ์ง๋ฉด ๋ผ๋ฒค๋ ๋ฐฐ๊ฒฝ์์ผ๋ก ๋ณ๊ฒฝ */
}
details[open] summary:after {
content: " ๐๐ผ"; /* ํ ๊ธ์ด ํผ์ณ์ง๋ฉด summary ํ
์คํธ ๋ค์ ๐๐ผ ์ฝํ
์ธ ์ถ๊ฐ */
}
์ด๋ฒคํธ
<details>
์๋ฆฌ๋จผํธ๋ ํ ๊ธ์ ์ ๊ณ ํผ์น ๋๋ง๋ค ๋ฐ์ํ๋ toggle
์ด๋ฒคํธ๋ฅผ ์ง์ํ๋ค. ์ด๋ฒคํธ๋ ํ ๊ธ ์ํ๊ฐ ๋ณํํ์ ๋ฐ์ํ๋ฉฐ, ์ด๋ฒคํธ๊ฐ ํธ์ถ๋๊ธฐ ์ ์ ์ํ๊ฐ ์ฌ๋ฌ๋ฒ ๋ฐ๋๋ฉด ํตํฉํ์ฌ ํ๋์ ์ด๋ฒคํธ๋ง ์ ์ก๋๋ค.
$details.addEventListener('toggle', ({ target }) => {
if (target.open) console.log('open');
else console.log('close');
});
๋ ์ง / ์๊ฐ ์ ํ input ํ์
๐ก ์บ๋ฆฐ๋ Date-Picker ์คํ์ผ์ ๋ธ๋ผ์ฐ์ / ๋๋ฐ์ด์ค๋ง๋ค ๋ค๋ฅด๋ฏ๋ก ์ฃผ์.
input type="date"
1๊ฐ ๋ ์ง๋ฅผ ์ ํํ ์ ์๋ ์ ๋ ฅ ์์
<!-- ์ฝ๋ ์ฐธ๊ณ via MDN -->
<label for="start">input type="date"</label>
<input
type="date"
id="start"
name="trip-start"
value="2022-01-01"
min="2022-01-01"
max="2022-12-31"
/>
- (์ ํ)
value
์์ฑ : ๊ธฐ๋ณธ ๋ ์ง ์ง์ —'yyyy-mm-dd'
ํฌ๋งท - (์ ํ)
min
์์ฑ : ์ ๋ ฅํ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ ์ง - (์ ํ)
max
์์ฑ : ์ ๋ ฅํ ์ ์๋ ๊ฐ์ฅ ๋ฆ์ ๋ ์ง - (์ ํ)
list
์์ฑ :<datalist>
ID.'yyyy-mm-dd'
ํฌ๋งท์ผ๋ก ์ต์ ๊ฐ์ ๋ง์ถฐ์ผ ์ ์ ๋ชฉ๋ก์ด ํ์๋จ
input type="week"
์ฃผ ๋จ์ ๋ ์ง๋ฅผ ์ ํํ ์ ์๋ ์ ๋ ฅ ์์
<!-- ์ฝ๋ ์ฐธ๊ณ via MDN -->
<label for="week">input type="week"</label>
<input type="week" name="week" id="camp-week" min="2022-W01" max="2022-W26" />
- (์ ํ)
value
์์ฑ : ๊ธฐ๋ณธ ์ฃผ(week) ์ง์ —'yyyy-W00'
ํฌ๋งท - (์ ํ)
min
์์ฑ : ์ ๋ ฅํ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์ฃผ(week) - (์ ํ)
max
์์ฑ : ์ ๋ ฅํ ์ ์๋ ๊ฐ์ฅ ๋ฆ์ ์ฃผ(week) - (์ ํ)
list
์์ฑ :<datalist>
ID.'yyyy-W00'
ํฌ๋งท์ผ๋ก ์ต์ ๊ฐ์ ๋ง์ถฐ์ผ ์ ์ ๋ชฉ๋ก์ด ํ์๋จ
input type="time"
์๊ฐ์ ์ ํํ ์ ์๋ ์ ๋ ฅ ์์
<!-- ์ฝ๋ ์ฐธ๊ณ via MDN -->
<label for="appt">input type="time"</label>
<input type="time" id="appt" name="appt" min="09:00" max="18:00" required />
<small>Office hours are 9am to 6pm</small>
- (์ ํ)
value
์์ฑ : ๊ธฐ๋ณธ ์๊ฐ ์ง์ —'hh:mm'
ํฌ๋งท - (์ ํ)
min
์์ฑ : ์ ๋ ฅํ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ - (์ ํ)
max
์์ฑ : ์ ๋ ฅํ ์ ์๋ ๊ฐ์ฅ ๋ฆ์ ์๊ฐ - (์ ํ)
list
์์ฑ :<datalist>
ID.'hh:mm'
ํฌ๋งท์ผ๋ก ์ต์ ๊ฐ์ ๋ง์ถฐ์ผ ์ ์ ๋ชฉ๋ก์ด ํ์๋จ
list ์์ฑ ์ฌ์ฉ ์์
๊ฐ Input ํ์
์ ํด๋นํ๋ ํฌ๋งท์ผ๋ก ์ต์
๊ฐ(value
)์ ์ง์ ํด์ผ ์ ์ ๋ชฉ๋ก์ด ํ์๋๋์ ์ฃผ์.
<input type="time" list="time-option" />
<datalist id="time-option">
<option value="13:00"></option>
<option value="14:00"></option>
</datalist>
์ ํจ์ฑ ๊ฒ์ฌ
:valid
, :invalid
์์ฌ ํด๋์ค๋ก ์ ํจ/์ ํจํ์ง ์์ ๋ ์ง์ ๋ฐ๋ผ ๋ค๋ฅธ ์คํ์ผ์ ์ง์ ํ ์ ์๋ค.
input:invalid + span::after {
content: "โ";
}
input:valid + span::after {
content: "โ
";
}
์๋ฐ์คํฌ๋ฆฝํธ์์ elem.validity.valid
์์ฑ์์ ์ ํจ์ฑ์ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.
$input.validity.valid; // true | false
<picture>
— ๋ฐ์ํ ์ด๋ฏธ์ง
<picture>
ํ๊ทธ๋ ๋๋ฐ์ด์ค, ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ฅผ ํ์ํ ๋ ์ฌ์ฉํ๋ค. <picture>
ํ๊ทธ๋ฅผ ์ด์ฉํด โํ๋ฉด ํฌ๊ธฐ๊ฐ ์์ ๋ชจ๋ฐ์ผ ์ ์ ์๊ฒ ๋ฎ์ ํ์ง์ ์ด๋ฏธ์ง๋ฅผ ํ์ํด์ ๋ก๋ฉ ์๋๋ฅผ ๊ฐ์ ํ๊ณ , โ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ํน์ ์ด๋ฏธ์ง ํ์์ ์ง์ํ์ง ์์ ๋ ๋ค๋ฅธ ๋์์ ์ ๊ณตํ๋ ๋ฑ ๋ค์ํ๊ฒ ํ์ฉํ ์ ์๋ค.
<picture>
ํ๊ทธ๋ 0๊ฐ ์ด์์ <source>
ํ๊ทธ์, 1๊ฐ์ <img>
ํ๊ทธ(๊ฐ์ฅ ๋ง์ง๋ง์ ์์น)๋ก ๊ตฌ์ฑ๋๋ค. ํ์ฌ ๋ทฐํฌํธ์ <source>
ํ๊ทธ์ media
์์ฑ์ ๋ช
์ํ ์กฐ๊ฑด์ด ์ผ์นํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํด๋น <source>
ํ๊ทธ๋ฅผ ํ๋ฉด์ ํ์ํ๋ค.
๐ก <picture>
ํ๊ทธ ์ ์์ค ์ค ์ ์ ๊ฐ ๋ณด๊ฒ๋ 1๊ฐ ์ด๋ฏธ์ง๋ง ๋ค์ด๋ก๋ ํ๋ค.
<source>
์์์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ์ง ๋ชปํ๊ฑฐ๋, ๋ธ๋ผ์ฐ์ ๊ฐ <picture>
์์๋ฅผ ์ง์ํ์ง ์์๋ <img>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ค(ํ์ ํธํ์ฑ).
์ฃผ์ํ ์ ์ 2๊ฐ์ง ์ด์์ ์กฐ๊ฑด์ ๋์์ ๋ง์กฑํ๋ฉด ๊ฐ์ฅ ์(์)์ ์ง์ ํ ์กฐ๊ฑด์ด ์ ์ฉ๋๋ค. ๋ฐ๋ผ์ CSS ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋์ ์ ๋ฐ๋ ๋ฐ๋ ์์๋ก ์์ฑํด์ผ ๋๋ค(min-width
๊ธฐ์ค).
- CSS ๋ฏธ๋์ด์ฟผ๋ฆฌ : ๊ธฐ๋ณธ → 320px ์ด์ → 768px ์ด์ → 1024px ์ด์
<picture>
Art Direction ์์ โญ๏ธ
๐ก Art Direction์ sizes
๋์ media
์์ฑ์ ์ด์ฉํด ๋ฏธ๋์ด ์กฐ๊ฑด๋ฌธ์ ์์ฑํ๋ค. srcset
์์ฑ์ ๋ณดํต 1๊ฐ ์ด๋ฏธ์ง์ ๋ํ ์์ค๋ฅผ ์์ฑํ๋ค. media
์์ฑ์ ์ํธ ๋๋ ์
์๋ง ์ฌ์ฉํ ๊ฒ. — via MDN
ํน์ ํ๊ฒฝ์ ๋ง๊ฒ ์ด๋ฏธ์ง ์ฝํ
์ธ ๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ Art Direction์ด๋ผ๊ณ ํ๋ค. ์ธ๋ก/๊ฐ๋ก ๋ชจ๋์ ๋ํ ์ฝํ
์ธ ํน์ ์ฌ์ฉ์๋ง๋ค ๋ค๋ฅธ ์ฌ์ด์ฆ์ ๋์คํ๋ ์ด์ ๋์ํ ๋ ์ฌ์ฉํ๋ค. Art Direction์ ์๋์ฒ๋ผ media
์์ฑ์ ํ์ฉํด์ ๊ตฌํํ๋ค.
<picture>
<source
media="(min-width: 1440px)"
srcset="https://picsum.photos/id/1033/300"
/>
<source
media="(min-width: 1024px)"
srcset="https://picsum.photos/id/1025/300"
/>
<source
media="(min-width: 768px)"
srcset="https://picsum.photos/id/1014/300"
/>
<source
media="(min-width: 320px)"
srcset="https://picsum.photos/id/101/300"
/>
<img src="https://picsum.photos/id/1005/300" alt="fallback-image" />
</picture>
์๊ฐ์ ์ธ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๋ทฐํฌํธ ์ฌ์ด์ฆ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ด๋ฏธ์ง๊ฐ ๋์ค๋๋ก ์์ฑํ๋ค โผ
<source>
ํ๊ทธ ์์ฑ ํบ์๋ณด๊ธฐ โญ๏ธ
๐ก ์ฐธ๊ณ ๋ด์ฉ
srcset
์์ฑ์<img>
ํ๊ทธ์์๋ ์ฌ์ฉํ ์ ์๋ค.srcset
์ ์ด๋ฏธ์ง ์ ํ๊ถ์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์์ํ๋ ์์ฑ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์ด๋ ํ๊ฒฝ์์ ์ด๋ค ํฌ๊ธฐ์ ์ด๋ฏธ์ง๊ฐ ์ ํ๋ ์ง ์ ํํ ์๊ธฐ ํ๋ค๋ค.w
,x
๋์คํฌ๋ฆฝํฐ๋ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์๋ ค์ฃผ๋ ์ฉ๋๋ก, ์ด๋ฏธ์ง์ ์ ํํ ํฌ๊ธฐ๋ฅผ ํ์ธํ๊ณ ์ ๋ ฅํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๐ก sizes
, srcset
์์ฑ์ ๋ช
์ํ์ ๋ ๋ธ๋ผ์ฐ์ ๋์
- ๊ธฐ๊ธฐ ๋๋น ํ์ธ
sizes
์์ฑ์์ ๊ฐ์ฅ ๋จผ์ ์ฐธ์ด ๋๋ ์กฐ๊ฑด๋ฌธ ํ์ธ- ํด๋น ์กฐ๊ฑด๋ฌธ์์ ์ ๊ณตํ๋ ์ฌ๋กฏ ํฌ๊ธฐ ํ์ธ
- ํด๋น ์ฌ๋กฏ ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง๋ฅผ
srcset
์์ ๊ฒ์ ํ ์ ์ฉ
media
์์ฑ
์ด๋ฏธ์ง ํ์๋ฅผ ์ํ ์กฐ๊ฑด. ๋ฏธ๋์ด ์ฟผ๋ฆฌ์ ์ ์ฌ.
srcset
์์ฑ
๋ธ๋ผ์ฐ์ ๊ฐ ๋ทฐํฌํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ํํ ์ ์๋ ์ด๋ฏธ์ง ์์ค ๋ฆฌ์คํธ๋ฅผ ๋ช ์ํ๋ ์์ฑ
(๋ธ๋ผ์ฐ์ ์๊ฒ ์ด๋ฏธ์ง ์ ํ๊ถ ์์)
๋ค์ํ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ๋์ผ ๋น์จ์ ์ด๋ฏธ์ง๋ค์ ์ต์ 2๊ฐ ์ด์ ๋ช
์ํ๋ ์์ฑ(์ด๋ฏธ์ง ์์ค ๋ฆฌ์คํธ). ,
์ผํ๋ก ๊ตฌ๋ถํ์ฌ 1๊ฐ ์ด์์ ์ด๋ฏธ์ง ๋ชฉ๋ก์ผ๋ก ๊ตฌ์ฑ๋๋ค. w
, x
๋จ์๋ px
ํฝ์
๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋์คํฌ๋ฆฝํฐ(descriptor)๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ ์์ ์์๋๋ก ์
๋ ฅํ๋ค.
<!-- srcset ์์ฑ ๋ฐ w ๋์คํฌ๋ฆฝํฐ ์ฌ์ฉ ์์ -->
<picture>
<source srcset="small.png 320w, medium.png 640w, large.png 1280w" />
<!-- (Non-Retina) ๋ทฐํฌํธ 100vw ์ด์ ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง ์ ํ -->
<!-- (Retina) ๋ทฐํฌํธ 100vw * 2 ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง ์ ํ -->
<img src="logo-320.png" alt="logo" />
<!-- ๋ธ๋ผ์ฐ์ ๊ฐ <picture> ํ๊ทธ๋ฅผ ์ง์ํ์ง ์์ผ๋ฉด <img> ํ๊ทธ ์ฌ์ฉ -->
</picture>
w
๋์คํฌ๋ฆฝํฐ๋ ํ๋ฉด ๋๋น์ ๋ฐ๋ผ ์ ์ ํ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋๋ก ํ ๋ ์ฌ์ฉํ๊ณ , x
๋์คํฌ๋ฆฝํฐ๋ ํฝ์
๋ฐ๋๋ฅผ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ๊ณ ์ ํฌ๊ธฐ ์ด๋ฏธ์ง์ ๋ ์ ํฉํจ. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ w
๋์คํฌ๋ฆฝํฐ ์ฌ์ฉํ๋๊ฑธ ์ถ์ฒ. w
๋์คํฌ๋ฆฝํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด x
๋์คํฌ๋ฆฝํฐ๋ ๋ช
์ ์ํด๋ ๋จ.
๐ ๋ ํฐ๋ ๋์คํ๋ ์ด๋ ํฝ์
๋ฐ๋(Pixel Density)๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋์ผํ ํ๋ฉด ํฌ๊ธฐ๋ผ๋ 2๋ฐฐ ํฐ ์ฌ์ด์ฆ์ ์ด๋ฏธ์ง๊ฐ ํ์ํ๋ค. ์ฐธ๊ณ ๋ก ๋ ํฐ๋ ๋์คํ๋ ์ด์ window.devicePixelRatio
์์ฑ ๊ฐ์ 2
์ด๋ค. ์๋ฅผ๋ค์ด ๋ ํฐ๋ ์คํฌ๋ฆฐ์ ๋ทฐํฌํธ ๋๋น๊ฐ 400px
๋ผ๋ฉด 800px
ํฌ๊ธฐ์ ์ด๋ฏธ์ง ์ ํ.
w
๋์คํฌ๋ฆฝํฐ : ์ด๋ฏธ์ง ๋๋น(๊ฐ๋ก) /px
๊ณผ ๋์ผํ ํฌ๊ธฐ๋ก ๋ณด๋ฉด ๋จ. ๋ธ๋ผ์ฐ์ ๋w
๋์คํฌ๋ฆฝํฐ๋ฅผ ํตํด ๊ฐ ์ด๋ฏธ์ง์ ์ต์ ํ๋ ํฝ์ ๋ฐ๋๋ฅผ ๊ณ์ฐํด์ ์ ์ ํ ์ด๋ฏธ์ง๋ฅผ ์ ํํจ — ex)768w
x
๋์คํฌ๋ฆฝํฐ : ์ด๋ฏธ์ง ๋น์จ(ํฝ์ ๋ฐ๋) / ์์ ์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ1x
. Device Pixel Ratio ๊ณผ ์ผ์นํ๋ ์ด๋ฏธ์ง๋ฅผ ์ ํํจ. DPR ๊ฐ์window.devicePixelRatio
์์ฑ์์ ํ์ธ ๊ฐ๋ฅ — ex)1.5x
- My Device์์ ํ์ฌ ๋๋ฐ์ด์ค์ ์คํฌ๋ฆฐ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋๋ฐ,
CSS pixel ratio
ํญ๋ชฉ๊ณผ Device Pixel Ratio๋ ๋์ผํ ์ ๋ณด๋ค — ํ์ ์ฅ์น์ ๋ฌผ๋ฆฌ์ ํฝ์ ๊ณผ CSS ํฝ์ ์ ๋น์จ(MDN)
sizes
์์ฑ
๋ฏธ๋์ด ์กฐ๊ฑด์ ํด๋นํ๋ ์ด๋ฏธ์ง์ ์ต์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ์์ฑ
sizes
์์ฑ์ ๋ช
์ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 100vw
. width
์์ฑ์ ์ด๋ฏธ์ง ์ถ๋ ฅ ํฌ๊ธฐ๋ง ์ง์ ํ์ง๋ง, sizes
๋ ์ถ๋ ฅ ํฌ๊ธฐ + ์ต์ ํฌ๊ธฐ๋ ํจ๊ป ์ง์ ํ๋ ๊ฐ๋
.
๋ธ๋ผ์ฐ์ ๋ ๋ ๋๋งํ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ์ง๊ฐ ํ์ด์ง์ ์ ์ฒด ๋๋น๋ฅผ ์ฐจ์งํ๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฆ, ์ํฉ์ ๋ฐ๋ผ ๋ถํ์ํ๊ฒ ํฐ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ์๋ ์๋ค๋ ๋ง์ด๋ค. sizes
์์ฑ์ผ๋ก ์ด๋ฏธ์ง ๋๋น(์ด๋ฏธ์ง ์ฌ๋กฏ ๋๋น)๊ฐ ์ผ๋ง๋ ๋๋์ง ๋ธ๋ผ์ฐ์ ์๊ฒ ์๋ ค์ฃผ๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
๐ ๋ฏธ๋์ด ์กฐ๊ฑด๋ฌธ(min-width: 640px
๋ถ๋ถ)์ ๋ํ ์ด๋ฏธ์ง ์ฌ๋กฏ ๋๋น์ %
๋จ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฏธ์ง ์ฌ๋กฏ์ ์ฑ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๋ ๋ณดํต ์ด๋ฏธ์ง ์ฌ๋กฏ ํฌ๊ธฐ์ ๊ฐ๊ฑฐ๋ ๋ ํฐ ์ด๋ฏธ์ง๋ฅผ ์ ํํ๋ค.
<!-- sizes ์์ฑ ์ฌ์ฉ ์์ -->
<picture>
<source
srcset="small.png 320w, medium.png 640w, large.png 1280w"
sizes="(min-width: 640px) 50vw, 100vw"
/>
<img src="logo-320.png" alt="logo" />
<!-- ๋ธ๋ผ์ฐ์ ๊ฐ <picture> ํ๊ทธ๋ฅผ ์ง์ํ์ง ์์ผ๋ฉด <img> ํ๊ทธ ์ฌ์ฉ -->
</picture>
- ๋ทฐํฌํธ ๋๋น๊ฐ
640px
"์ด์"์ด๋ฉด ์ด๋ฏธ์ง ์ฌ๋กฏ ์ฌ์ด์ฆ50vw
- Non-Retina : ๋ทฐํฌํธ
50vw
์ด์ ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง ์ ํ - Retina : ๋ทฐํฌํธ
50vw * 2
ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง ์ ํ
- Non-Retina : ๋ทฐํฌํธ
- ๋ทฐํฌํธ ๋๋น๊ฐ
640px
"๋ฏธ๋ง"์ด๋ฉด ์ด๋ฏธ์ง ์ฌ๋กฏ ์ฌ์ด์ฆ100vw
- Non-Retina : ๋ทฐํฌํธ
100vw
์ด์ ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง ์ ํ - Retina : ๋ทฐํฌํธ
100vw * 2
ํฌ๊ธฐ์ ๊ฐ์ฅ ๊ทผ์ ํ ์ด๋ฏธ์ง ์ ํ
- Non-Retina : ๋ทฐํฌํธ
type
์์ฑ
MIME ์ ํ. ๋ธ๋ผ์ฐ์ ๊ฐ ๋ช
์ํ ํ์
์ ์ง์ํ์ง ์์ผ๋ฉด ํด๋น <source>
์์๋ฅผ ๊ฑด๋๋.
<picture>
<source srcset="logo.webp" type="image/webp" />
<img src="logo.png" alt="logo" />
<!-- ๋ธ๋ผ์ฐ์ ๊ฐ webp ํ์
์ ์ง์ํ์ง ์์ผ๋ฉด <img> ํ๊ทธ ์ฌ์ฉ -->
</picture>
๋ ํผ๋ฐ์ค
- HTML IMG์ srcset๊ณผ sizes ์์ฑ | Heropy
- ๋ฐ์ํ ์ด๋ฏธ์ง - Web ๊ฐ๋ฐ ํ์ตํ๊ธฐ | MDN
- HTML srcset sizes ํ๊ตญ์์ ์ ์ผ ์ฝ๊ฒ ์ค๋ช (retina ํฌํจ)
- The <picture> tag | raresportan.com
<detalist>
— ์๋์์ฑ ๊ธฐ๋ฅ
๐ก <datalist>
ํ๊ทธ์ ๋น์ทํ <select>
ํ๊ทธ๋ ์ ํํ ์ ์๋ ํญ๋ชฉ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉ์๋ ํด๋น ๋ฒ์ ๋ด์์๋ง ์ ํํ ์ ์๋ ์ ์ด ๋ค๋ฅด๋ค. datalist ํ๊ทธ๋ option ๋ชฉ๋ก์ ์๋ ๊ฐ๋ ์ฌ์ฉ์ ์
๋ ฅ์ผ๋ก ๋ฐ์ ์ ์๊ณ , ์๋์์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ ํํ ๋ชฉ๋ก์ด ๋ง์ ๋ ์ ์ฉํ๋ค.
<datalist>
๋ ์ฌ์ฉ์ ์
๋ ฅ์ ๋์์ฃผ๋ ํ๊ทธ๋ค. <datalist>
ํ๊ทธ๋ฅผ ์ด์ฉํด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์๋์์ฑ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค. ํด๋ฆญ ์ด๋ฒคํธ, ์ต์
ํํฐ ๋ฑ์ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๊ฐํธํ๊ฒ ๋ง๋ค ์ ์๋ค.
๋จผ์ <input>
ํ๊ทธ์ list
์์ฑ ๊ฐ์ <datalist>
ํ๊ทธ์ id
์์ฑ๊ฐ๊ณผ ๋์ผํ๊ฒ ์์ฑํ๋ค. ๊ทธ๋ผ input ํ๊ทธ๊ฐ datalist ํ๊ทธ๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ค. ์๋์์ฑ ์ ๋ณด๊ธฐ๋ก ๋ณด์ฌ์ค ๋ชฉ๋ก์ datalist ์์์ผ๋ก <option>
ํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค. <option>
ํ๊ทธ์ ๊ฐ์ value
์์ฑ ํน์ textContent
์ ์
๋ ฅํ ์ ์๋ค.
<label for="country"> choose your country </label>
<input
id="country"
type="text"
list="country-list"
size="50"
autocomplete="off"
/>
<datalist id="country-list">
<option value="Afghanistan" />
<!-- <option>Afghanistan</option> -->
<option value="Albania" />
<!-- <option>Albania</option> -->
</datalist>
ํ
์คํธ ํ์
์ <input>
ํ๊ทธ๋ autocomplete="on"
์์ฑ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ฐ์ง๋ค. ์ฌ์ฉ์๊ฐ ์ด์ ์ ์
๋ ฅํ๋ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์
๋ ฅํ ๊ฐ๊ณผ ๋น์ทํ ๊ฐ์ ๋๋กญ๋ค์ด์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. <datalist>
ํ๊ทธ๋ฅผ ์ฌ์ฉํด ์๋์์ฑ ๋ชฉ๋ก์ ์ ๊ณตํ๋ฏ๋ก ์ด ์์ฑ์ off
๋ก ์ค์ ํ๋ค.
size
์์ฑ์ Input ์์์ ๋๋น๋ฅผ ๋ฌธ์์(in characters) ๋จ์๋ก ๋ช
์ํ ๋ ์ฌ์ฉํ๋ฉฐ, ๊ธฐ๋ณธ๊ฐ์ 20
์ด๋ค.
์์
์์ฑ์ ์๋ฃํ <input>
์ฐฝ์ ํด๋ฆญํด๋ณด๋ฉด ์ต์
์ผ๋ก ์ ๊ณตํ ์๋์์ฑ ๋ชฉ๋ก(์ต์
)์ด ๋์จ๋ค. ์ฌ์ฉ์๊ฐ ๊ธ์๋ฅผ ํ์ดํํ๋ฉด ํด๋น ๋จ์ด๋ฅผ “ํฌํจ”ํ๋ ์ต์
์ ์๋์ผ๋ก ํํฐ๋งํด์ ๋ณด์ฌ์ค๋ค. ์ต์
์ ํ ํ ์ํฐ ๋ฒํผ์ ๋๋ฅด๋ฉด Input ์ฐฝ์ ์๋์ผ๋ก ์
๋ ฅ๋๋ค.
๋ค๋ฅธ Input ํ์ ์ ํ์ฉ
ํ ์คํธ ํ์ ์ Input ์ธ์๋ ๋ค์ํ ํ์ ์์ ํ์ฉํ ์ ์๋ค.
<input type="color" list="colorlist" id="color" name="color" required />
<datalist id="colorlist">
<option>#ff0000</option>
<!-- HEX ์ปฌ๋ฌ ์ฝ๋๋ง ๊ฐ๋ฅ -->
<option>#00ff00</option>
<option>#0000ff</option>
<option>#ffff00</option>
<option>#ff00ff</option>
</datalist>
<label for="date">choose a date:</label>
<input
type="date"
list="datedata"
id="date"
name="date"
min="0"
max="20"
required
/>
<datalist id="datedata">
<option>2020-12-31</option>
<option>2021-12-31</option>
<option>2022-12-31</option>
</datalist>
<label for="experience">years experience:</label>
<input
type="range"
list="experiencedata"
id="experience"
name="experience"
min="0"
max="20"
required
/>
<datalist id="experiencedata">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>5</option>
<option>10</option>
<option>15</option>
<option>20</option>
</datalist>
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTML/CSS] ์์ดํฐ ์ฌํ๋ฆฌ 100vh ์ด์ ํด๊ฒฐ (0) | 2024.05.03 |
---|---|
[HTML/CSS] ์์ดํฐ ์ฌํ๋ฆฌ ํ ๋ง ์ปฌ๋ฌ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ (0) | 2024.05.03 |
[React] ๋ฆฌ์กํธ useRef ํ์ฉ ์ผ์ด์ค ๋ชจ์ (0) | 2024.05.03 |
[HTML/CSS] CSS ์ธ์ ํ๋ ์๋ฆฌ๋จผํธ๋ค์ border ๊ฒน์นจ ๋ฌธ์ ํด๊ฒฐ (0) | 2024.05.03 |
[HTML/CSS] ์ด๋ฉ์ผ ํ ํ๋ฆฟ ์์ฑ๋ฒ (feat. ํ ์ด๋ธ ์ฝ๋ฉ) (0) | 2024.05.03 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[HTML/CSS] ์์ดํฐ ์ฌํ๋ฆฌ 100vh ์ด์ ํด๊ฒฐ
[HTML/CSS] ์์ดํฐ ์ฌํ๋ฆฌ 100vh ์ด์ ํด๊ฒฐ
2024.05.03 -
[HTML/CSS] ์์ดํฐ ์ฌํ๋ฆฌ ํ ๋ง ์ปฌ๋ฌ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ
[HTML/CSS] ์์ดํฐ ์ฌํ๋ฆฌ ํ ๋ง ์ปฌ๋ฌ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ
2024.05.03 -
[React] ๋ฆฌ์กํธ useRef ํ์ฉ ์ผ์ด์ค ๋ชจ์
[React] ๋ฆฌ์กํธ useRef ํ์ฉ ์ผ์ด์ค ๋ชจ์
2024.05.03 -
[HTML/CSS] CSS ์ธ์ ํ๋ ์๋ฆฌ๋จผํธ๋ค์ border ๊ฒน์นจ ๋ฌธ์ ํด๊ฒฐ
[HTML/CSS] CSS ์ธ์ ํ๋ ์๋ฆฌ๋จผํธ๋ค์ border ๊ฒน์นจ ๋ฌธ์ ํด๊ฒฐ
2024.05.03