๋ฐ˜์‘ํ˜•

<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
    • lowoptimumhigh ํ˜น์€ optimum ๋ฏธ์ง€์ •: ์ค‘๊ฐ„ ์ˆซ์ž๊ฐ€ ์ด์ƒ์ ์ธ ๊ฒฝ์šฐ
      • low ์ด์ƒ high ์ดํ•˜ : ์ดˆ๋ก์ƒ‰
      • low ๋ฏธ๋งŒ ํ˜น์€ high ์ดˆ๊ณผ : ๋…ธ๋ž€์ƒ‰
    • minoptimum < low (low ์ดํ•˜) : ์ˆซ์ž๊ฐ€ ์ž‘์„์ˆ˜๋ก ์ด์ƒ์ ์ธ ๊ฒฝ์šฐ
      • low ์ดํ•˜ : ์ดˆ๋ก์ƒ‰
      • low ์ดˆ๊ณผ high ์ดํ•˜ : ๋…ธ๋ž€์ƒ‰
      • high ์ดˆ๊ณผ : ๋นจ๊ฐ„์ƒ‰
    • maxoptimum > 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> ํƒœ๊ทธ : 1024px ์ด์ƒ → 768px ์ด์ƒ → 320px ์ด์ƒ → ๊ธฐ๋ณธ

 

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 ์†์„ฑ์„ ๋ช…์‹œํ–ˆ์„ ๋•Œ ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘

  1. ๊ธฐ๊ธฐ ๋„ˆ๋น„ ํ™•์ธ
  2. sizes ์†์„ฑ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์ฐธ์ด ๋˜๋Š” ์กฐ๊ฑด๋ฌธ ํ™•์ธ
  3. ํ•ด๋‹น ์กฐ๊ฑด๋ฌธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์Šฌ๋กฏ ํฌ๊ธฐ ํ™•์ธ
  4. ํ•ด๋‹น ์Šฌ๋กฏ ํฌ๊ธฐ์— ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์ด๋ฏธ์ง€๋ฅผ 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 ํฌ๊ธฐ์™€ ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์ด๋ฏธ์ง€ ์„ ํƒ
  • ๋ทฐํฌํŠธ ๋„ˆ๋น„๊ฐ€ 640px "๋ฏธ๋งŒ"์ด๋ฉด ์ด๋ฏธ์ง€ ์Šฌ๋กฏ ์‚ฌ์ด์ฆˆ 100vw
    • Non-Retina : ๋ทฐํฌํŠธ 100vw ์ด์ƒ ํฌ๊ธฐ์™€ ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์ด๋ฏธ์ง€ ์„ ํƒ
    • Retina : ๋ทฐํฌํŠธ 100vw * 2 ํฌ๊ธฐ์™€ ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์ด๋ฏธ์ง€ ์„ ํƒ

 

type ์†์„ฑ

MIME ์œ ํ˜•. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ช…์‹œํ•œ ํƒ€์ž…์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น <source> ์š”์†Œ๋ฅผ ๊ฑด๋„ˆ๋œ€.

<picture>
  <source srcset="logo.webp" type="image/webp" />
  <img src="logo.png" alt="logo" />
  <!-- ๋ธŒ๋ผ์šฐ์ €๊ฐ€ webp ํƒ€์ž…์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด <img> ํƒœ๊ทธ ์‚ฌ์šฉ -->
</picture>

 

๋ ˆํผ๋Ÿฐ์Šค

 

<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"

<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>

 

input type="date"

<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>

 

input type="range" (datalist์— ์ œ๊ณตํ•œ ์˜ต์…˜ ๊ฐ’๋“ค์ด Range ๋ง‰๋Œ€์˜ ๋ˆˆ๊ธˆ์œผ๋กœ ํ‘œ์‹œ๋˜๊ณ  ์žˆ๋‹ค)

<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>

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•