Skip to content

Latest commit

ย 

History

History
1312 lines (1052 loc) ยท 30.3 KB

README.md

File metadata and controls

1312 lines (1052 loc) ยท 30.3 KB

1. ์›นํผ๋ธ”๋ฆฌ์‹ฑ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์ •

  • ํšŒ์‚ฌ์—์„œ ๋‹นํ™ฉํ•˜์ง€ ์•Š๊ณ  ์—…๋ฌดํ™˜๊ฒฝ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์•„๋ž˜ ์ˆœ์„œ๋Œ€๋กœ ํผ๋ธ”๋ฆฌ์‹ฑ ์…‹ํŒ…ํ•˜์‹œ๋ฉด ๋ฌธ์ œ์—†์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ถ”์ฒœ ํ”„๋กœ๊ทธ๋žจ ใ„ด Byeond Compare ์ฝ”๋“œ ๋น„๊ต ๋„๊ตฌ (์ƒ์šฉ๋ฒ„์ „) : ๋น„์šฉ์ง€๋ถˆ -https://www.scootersoftware.com/

1.1. Node.js ์„ค์น˜

  • node.js

  • Node.js๋Š” ๋กœ์ปฌPC ๋ฐ ์„œ๋ฒ„PC ์—์„œ JS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ ๊ตฌ์„ฑ.

    ใ„ด ์„œ๋ฒ„๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ์›น ์„œ๋ฒ„(PC), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„(PC) ๋“ฑ์ด ์žˆ์Œ. ใ„ด ์„œ๋ฒ„๋Š” ๊ณ ๊ฐ๋“ค์ด ์ธํ„ฐ๋„ท์œผ๋กœ ์ ‘์†ํ•ด์„œ ์ž๋ฃŒ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” PC

  • ์ถ”ํ›„ React์—์„œ NVM(Node version Manage) ์„ ํ†ตํ™˜ ๊ด€๋ฆฌ ์˜ˆ์ •

1.2. VSCode ์„ค์น˜

-VSCode

1.3. VSCode Extenstion ์„ค์น˜

  • ์•„๋ž˜ ๋ชฉ๋ก์„ ์œ„์ฃผ๋กœ ์„ค์น˜ ํ•œ๋‹ค.
- PostCSS Sorting : ์ถ”ํ›„ ์„ค์ • (css ์ฝ”๋“œ ์ˆœ์„œ ์ •๋ ฌ ๋„๊ตฌ - ์„ค์ • ํ•„์š”)
- Auto Colse Tag
- Auto Rename Tag
- Bracket Pari Clor DLW
- CSS Peak
- HTML CSS Support
- HTML to CSS autocompletion
- Image preview
- indent-rainbow
- Korean Language Pack for... (VSCode ์žฌ์‹คํ–‰ ํ›„ ํ™•์ธ)
- Live Server
- Markdown Preview Enhanced
- Material Icon Theme
- Night Owl (ํ…Œ๋งˆ)
- Prettier - Code formatter (๋ณ„๋„ ์ฐธ์กฐ)

1.4. Prettier ์…‹ํŒ…

  • ์ค„๋งž์ถค, ๋“ค์—ฌ์“ฐ๊ธฐ, ๋”ฐ์˜ดํ‘œ, ์„ธ๋ฏธ์ฝœ๋ก  ๋“ฑ์— ๋Œ€ํ•œ ๋ฌธ์„œ์˜ ํฌ๋งท(์ปจ๋ฒค์…˜)์„ ๋งž์ถ”์–ด ์คŒ
  • ์„ค์ • ๋ฒ„ํŠผ(VScode์˜ ๋ชจ์„œ๋ฆฌ ์™ผ์ชฝ ์•„์ด์ฝ˜) ํด๋ฆญ > Settings ๋ฉ”๋‰ด ์„ ํƒ Image
  • ๊ฒ€์ƒ‰ ๋‚ด์šฉ์œผ๋กœ format ์œผ๋กœ ์ž‘์„ฑ
  • Editor:Default Formatter ์„ค์ •(Prettier ์„ ํƒ)
  • Editor:Format On Save ์„ค์ • Image
  • VSCode ์žฌ์‹คํ–‰ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

2. ์›นํผ๋ธ”๋ฆฌ์‹ฑ ๊ฐœ๋ฐœ ๊ตฌ์กฐ ์„ค์ •

  • ๋ฐ˜๋“œ์‹œ ํ”„๋กœ์ ํŠธ๋ช…์€ ์˜์–ด์†Œ๋ฌธ์ž, ๋‹จ์–ด_๋‹จ์–ด ๋“ฑ์˜ ํŠน์ˆ˜๊ธฐํ˜ธ ์ถ”์ฒœ
  • git ์…‹ํŒ… ๋จผ์ € ์ง„ํ–‰ ํ•„์š” : GitHub ํฌํ•จํ•ด์„œ

2.1. ์ถ”์ฒœ ํด๋” ๊ตฌ์กฐ

  • images : ํŒŒ์ผ๋ช….jpg, ํŒŒ์ผ๋ช….png, ํŒŒ์ผ๋ช….gif, ํŒŒ์ผ๋ช….svg

  • jpg : ์‚ฌ์ง„

  • gif : ๊ทธ๋ฆผ(์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ทธ๋ฆผ ๊ฐ€๋Šฅ, ๋ฐฐ๊ฒฝ ํˆฌ๋ช… ๊ฐ€๋Šฅ)

  • png : ์‚ฌ์ง„ + ๋ฐฐ๊ฒฝ ํˆฌ๋ช…

  • svg : ๋””์ง€ํ„ธ ์ˆซ์ž๋กœ (๋ฒกํ„ฐ) ๊ณ„์‚ฐํ•ด์„œ ๊ทธ๋ฆผ์„ ๋งŒ๋“ฆ(์•„์ด์ฝ˜, ๋ฐ˜์‘ํ˜• ๋“ฑ์— ์ ๊ทน ํ™œ์šฉ)

  • css ํด๋” : ๋ชจ๋“ˆ๋ณ„.css ํŒŒ์ผ๋“ค

  • js ํด๋” : ๋ชจ๋“ˆ๋ณ„.js ํŒŒ์ผ๋“ค

  • assets ํด๋” : ๊ธฐํƒ€ ํŒŒ์ผ๋“ค(์˜์ƒ, ์Œ์•…, ๊ณ„์•ฝ์„œ, ์—ฐ๋ฝ์ฒ˜..ํฌํ•จ)

  • apis ํด๋” : ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ ์—ฐ๋™๊ด€๋ จ ํŒŒ์ผ๋“ค(ํŒŒ์ผ๋ช….json, ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋“ฑ)

  • json : JavaScript Object Notation (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ๋ฌธ๋ฒ•์ ์šฉ๋œ ํŒŒ์ผ)

2.2. ๊ธฐ๋ณธ ํŒŒ์ผ

  • index.html ์•ฝ์† ๋จ.(ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ : ์—”ํŠธ๋ฆฌํฌ์ธํŠธ)
  • ๋ถ€๊ฐ€์ ์œผ๋กœ index ๋งŒ ์ž‘์—…ํ•˜๋Š” ์ด์œ ๊ฐ€ ๊ฐ€์žฅ ์–ด๋ ต๊ณ , ๋ณต์žกํ•˜๊ณ , ๋น„์ฃผ์–ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ถ•ํ‚ค : ! + tab ํ‚ค๋กœ html ๊ธฐ๋ณธํ˜•์„ ์ƒ์„ฑํ•˜์ž.(๋ฐ˜๋“œ์‹œ ํŒŒ์ผ ์ €์žฅ ํ›„)

3.HTML ํƒœ๊ทธ์˜ ์ดํ•ด

  • ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•Œ์•„๋ณผ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•๊ตฌ์กฐ

  • DOM ๊ตฌ์กฐ๋กœ ํ•ด์„ : Document Object Model

  • https://velog.io/@clydehan/HTML-DOCTYPE%EC%9D%B4%EB%9E%80

  • <!DOCTYPE html>

  • html ์„ ํ•ด์„ํ•  ๋•Œ ์ตœ์‹  html5 ๊ทœ์น™์œผ๋กœ ํ•ด์„ํ•˜๋ผ.

  • ์ˆ˜์ •์€ ์ฃผ์˜ํ•ด์„œ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ํ•˜์‹œ๋Š” ๊ฒฝ์šฐ์—๋Š” html์˜ ์ฒซ ์ค„์„ ๋ฐ˜๋“œ์‹œ ๋ฌธ์˜ํ•˜๊ณ  ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • head ํƒœ๊ทธ

  • ๋ฌธ์„œ์˜ ํ•„์š”๋กœํ•œ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณณ

  • ์ถ”ํ›„ icon ๋ฐ sns ์—ฐ๋™ ๋ถ€๋ถ„์—์„œ ์ฃผ๋กœ ํ™œ์šฉ(meta ํƒœ๊ทธ)

  • SEO ( ์ƒ‰์—”์ง„ ์ตœ์ ํ™” ๋‚ด์šฉ)

  • js ํŒŒ์ผ, css ํŒŒ์ผ์„ ์—ฐ๊ฒฐ ๋ฐฐ์น˜ ํ™œ์šฉ

  • ๋ฐ˜๋“œ์‹œ tittle ํƒœ๊ทธ ๋‚ด์šฉ ์ž‘์„ฑ ํ•„์š”

  • GA4 ์„ค์ • ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋Š” ๊ณณ (Google Analytics)

  • body ํƒœ๊ทธ

  • ์‹ค์ œ ํ™”๋ฉด์— ๋ณด์—ฌ์งˆ ๋‚ด์šฉ์„ ๋ฐฐ์น˜ํ•จ

  • <ํƒœ๊ทธ>๋‚ด์šฉ</ํƒœ๊ทธ>

  • ๋ฐ˜๋“œ์‹œ ์†Œ๋ฌธ์ž๋กœ ๋ชจ๋‘ ๊ตฌ์„ฑํ•จ.

3.1. div ํƒœ๊ทธ

  • ๋‚ด์šฉ
  • ๋‚ด์šฉ ๋ฐฐ์น˜์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋‹ด๋‹นํ•จ.

  • ๊ธฐ๋ณธ์ ์œผ๋กœ <div class="wrap"></div> ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ๋‚ด์šฉ ์ž‘์„ฑํ•จ

  • ์ตœ์ดˆ ๊ตฌ์„ฑ ํ•„์ˆ˜(๊ฒฝํ—˜-๊ฒฝ๋ ฅ์ด ํ•„์š”ํ•จ.)

  • ๋‚ด์šฉ์„ ์ถฉ๋ถ„ํžˆ ๋ถ„์„(Figma, PRD ๋ถ„์„)๋ถ„์„ํ•˜๊ณ  ๋‚œ ์ดํ›„์— ์ฃผ์„์„ ๋ช…์‹œ ํ›„ div ์‚ฌ์šฉ

  • div ํƒœ๊ทธ์— ์—ญํ• ์— ๋งž๋Š” ์ด๋ฆ„์„ class ๋กœ ์ง€์ • ํ•จ.

3.2. ์‹œ๋ฉ˜ํ‹ฑ ํƒœ๊ทธ

  • ์‹œ๋ฉ˜ํ‹ฑ ํƒœ๊ทธ๋Š” ํƒœ๊ทธ ๋‹จ์–ด ์ž์ฒด๊ฐ€ ๋‚ด์šฉ์„ ์œ ์ถ”ํ•˜๋„๋ก ํ•œ๋‹ค.
  • div ๋กœ ๋‚ด์šฉ์„ ๊ตฌ๋ถ„ ํ›„ ์•„๋ž˜ ์˜์—ญ์€ ํƒœ๊ทธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.
  • header ํƒœ๊ทธ : ๊ฒ€์ƒ‰์—”์ง„์—์„œ ๋‚ด์šฉ์„ ๊ธฐ๋Œ€ํ•จ(๋กœ๊ณ , ํƒ€์ดํ‹€, ์ฃผ๋ฉ”๋‰ด, ๊ฒ€์ƒ‰, ํšŒ์›๊ธฐ๋Šฅ ...)
  • main ํƒœ๊ทธ : ์ปจํ…์ธ  ๋ชจ์Œ
  • footer ํƒœ๊ทธ : ๊ฒ€์ƒ‰์—”์ง„์—์„œ ๋‚ด์šฉ์„ ๊ธฐ๋Œ€ํ•จ(์นดํ”ผ๋ผ์ดํ„ฐ, ์ฃผ์†Œ, ์—ฐ๋ฝ์ฒ˜, ์‚ฌ์ดํŠธ ๋งต ๋“ฑ)

3.3. ํ•„์ˆ˜ ํƒœ๊ทธ

3.3.1. a ํƒœ๊ทธ : anchor

  • ํ˜„์žฌ ์›น๋ธŒ๋ผ์šฐ์ € ๋‚ด์šฉ ๊ฐฑ์‹ (ํŽ˜์ด์ง€ ์ด๋™) : <a href="์ฃผ์†Œ">๊ธ€์ž/๊ทธ๋ฆผ</a>
  • ์›น๋ธŒ๋ผ์šฐ์ € ํƒญ ์ƒ์„ฑ(์ƒˆํƒญ ํŽ˜์ด์ง€) : <a href="์ฃผ์†Œ" target="_blank">๊ธ€์ž/๊ทธ๋ฆผ</a>

3.3.2. form ํƒœ๊ทธ : ์‚ฌ์šฉ์ž ์ž…๋ ฅ์–‘์‹

  • ์ถ”์ฒœ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ใ„ดshadCN : https://ui.shadcn.com/docs/components ใ„ดAntDesign : https://ant.design/components/overview/ ใ„ดMUI : https://mui.com/material-ui/all-components/

  • action ๊ณผ method ์˜ ์ดํ•ด

  • <form action="๋ฐฑ์—”๋“œ์ฃผ์†Œ"></form>

  • <form action="๋ฐฑ์—”๋“œ์ฃผ์†Œ" method="get"></form>

  • ๋ฐ์ดํ„ฐ ๊ณต๊ฐœ๋จ http://127.0.0.1:5500/good.html?id=is&pass=1234

  • <form action="๋ฐฑ์—”๋“œ์ฃผ์†Œ" method="post"></form>

  • ๋ฐ์ดํ„ฐ ๊ณต๊ฐœ๋จ http://127.0.0.1:5500/good.html

  • input ํƒœ๊ทธ ์˜ˆ์ œ

<form action="good.html" method="post">
  <!-- ๊ธฐ๋ณธ์ •๋ณด -->
  <fieldset>
    <legend>๊ธฐ๋ณธ์ •๋ณด</legend>
    <label for="userid">์•„์ด๋””(4์ž~12์ž)</label> <br />
    <input
      type="text"
      id="userid"
      name="id"
      minlength="4"
      maxlength="12"
      required
      placeholder="์•„์ด๋””๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”."
    />
    <button>์•„์ด๋”” ์ค‘๋ณตํ™•์ธ</button>
    <br />
    <br />
    <label for="useremail">์ด๋ฉ”์ผ</label> <br />
    <input
      type="email"
      id="useremail"
      name="email"
      required
      placeholder="example@example.com"
    />
    <br />
    <br />
    <label for="userpass">๋น„๋ฐ€๋ฒˆํ˜ธ(6์ž~16์ž)</label> <br />
    <input
      type="password"
      id="userpass"
      name="pwd"
      minlength="6"
      maxlength="16"
      required
      placeholder="๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
      autocomplete="off"
    />
  </fieldset>
  <!-- ์ƒ์„ธ์ •๋ณด -->
  <fieldset>
    <legend>์ƒ์„ธ์ •๋ณด</legend>
    <label for="country">๊ตญ๊ฐ€ ์„ ํƒ:</label>
    <select id="country" name="country">
      <option value="kr">ํ•œ๊ตญ</option>
      <option value="us">๋ฏธ๊ตญ</option>
      <option value="cn">์ค‘๊ตญ</option>
      <option value="jp">์ผ๋ณธ</option>
    </select>
    <br />
    <br />
    <label>์„ฑ๋ณ„</label> <br />
    <input type="radio" id="male" name="gender" value="male" checked />
    <label for="male">๋‚จ์„ฑ</label>
    <input type="radio" id="female" name="gender" value="female" />
    <label for="female">์—ฌ์„ฑ</label>
    <br />
    <br />
    <label>์ทจ๋ฏธ(๋‹ค์ค‘์„ ํƒ๊ฐ€๋Šฅ)</label> <br />

    <input type="checkbox" id="coding" name="hobby" value="coding" checked />
    <label for="coding">์ฝ”๋”ฉ</label>

    <input type="checkbox" id="tour" name="hobby" value="tour" checked />
    <label for="tour">์—ฌํ–‰</label>

    <input type="checkbox" id="music" name="hobby" value="music" checked />
    <label for="music">์Œ์•…</label>
    <br />
    <br />
    <label for="birthday">์ƒ๋…„์›”์ผ</label> <br />
    <input type="date" id="birthday" name="birthday" />
    <br />
    <br />
    <label for="file">์ฒจ๋ถ€ํŒŒ์ผ</label> <br />
    <input type="file" id="file" name="file" />
    <br />
    <br />
    <label for="intro">์ž๊ธฐ์†Œ๊ฐœ : </label> <br />
    <textarea
      id="intro"
      name="intro"
      rows="5"
      cols="40"
      placeholder="์ž๊ธฐ์†Œ๊ฐœ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”."
    ></textarea>
  </fieldset>
  <!-- ์ •๋ณด์ž…๋ ฅ -->
  <fieldset>
    <legend>์ •๋ณด์ž…๋ ฅ</legend>
    <input type="reset" value="์žฌ์ž‘์„ฑ" />
    <input type="submit" value="๋“ฑ๋ก" />
  </fieldset>
</form>

3.3.3 ul ํƒœ๊ทธ : unOrderList (๋ชฉ๋กํƒœ๊ทธ)

  • ๋™์ผํ•œ ํ˜•ํƒœ์˜ ๋ ˆ์ด์•„์›ƒ์ด ๋ฐ˜๋ณต๋œ๋‹ค๋ฉด ๋ฌถ์–ด์„œ ํ™œ์šฉ
  • ๋™์ผํ•œ ๊ธฐ๋Šฅ์ด ๋ฐ˜๋ณต๋œ๋‹ค๋ฉด ๋ฌถ์–ด์„œ ํ™œ์šฉ

3.3.4 image ํƒœ๊ทธ

  • ์•„์ด์ฝ˜์€ https://react-icons.github.io/react-icons ํ™œ์šฉ
  • <img src="์ด๋ฏธ์ง€๊ฒฝ๋กœ/ํŒŒ์ผ๋ช….ํ™•์žฅ" alt="๋Œ€์ฒด๊ธ€" />

3.3.5. ํƒœ๊ทธ(Heading)

  • ๋ฌธ์„œ์˜ ํƒ€์ดํ‹€ ์—ญํ• ์„ ํ•จ์„ ํ‘œํ˜„ํ•จ.
  • h1~h6 ๋กœ ๊ตฌ์„ฑ
  • html ๋ฌธ์„œ์—์„œ h1 ์€ ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅ
  • ๊ฐ ์˜์—ญ๋ณ„๋กœ h2 ๋„ ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ถŒ์žฅ

3.3.6

ํƒœ๊ทธ(parpagraph)

  • ๊ธ€์ž๋กœ ๋œ ๋ฌธ๋‹จ ์ž‘์„ฑ์‹œ ํ™œ์šฉ
  • display : block;

3.3.7
ํƒœ๊ทธ

  • ํ•œ ์ค„ ๋‚ด๋ฆผ

3.3.8. ํƒœ๊ทธ

  • ๋ฌธ์ž๋ฅผ ๊ตต๊ฒŒ ํ‘œํ˜„ํ•จ

3.3.9
ํƒœ๊ทธ

  • ์‹œ๋ฉ˜ํ‹ฑ ํƒœ๊ทธ๋กœ์„œ ๋‚ด์šฉ ์˜์—ญ ๊ตฌ๋ถ„

4. CSS ์˜ ์ดํ•ด

-css ์„ ํƒ์ž

ํƒœ๊ทธ {
}
.ํด๋ž˜์Šค {
}
#์•„์ด๋”” {
}
ํƒœ๊ทธํƒœ๊ทธํƒœ๊ทธ {
}
.ํด๋ž˜์Šค ํƒœ๊ทธ ํƒœ๊ทธ {
}

4.1. CSS ์ฝ”๋”ฉ ์ž๋ฆฌ 3๊ฐ€์ง€

  • ์ธ๋ผ์ธ CSS (์ถ”ํ›„ React ์—์„œ๋Š” ์ธ๋ผ์ธ ๋ฐฉ์‹์„ ๋งŽ์ด ํ™œ์šฉํ•จ : css ์šฐ์„ ์ˆœ์œ„ ์ ์šฉ)
<ํƒœ๊ทธ style=""></ํƒœ๊ทธ>
  • style ํƒœ๊ทธ CSS ( ์ถ”ํ›„ React์—์„œ๋Š” objec t๋ฐฉ์‹์œผ๋กœ ๋งŽ์ด ํ™œ์šฉํ•จ)
<style></style>
<ํƒœ๊ทธ></ํƒœ๊ทธ>
  • style ํŒŒ์ผ link ๋ฐฉ์‹(์ถ”ํ›„ React์—์„œ๋Š” ๋งŽ์ด ํ•„์š”ํ•จ : ํŒŒ์ผ๋ช…. ,module . css)
<link rel="stylesheet" href="css/header.css" />

4.2. header css ์‹ค์Šต

-css/header.cssํŒŒ์ผ

<link rel="stylesheet" href="css/header.css" />

4.3. display ์˜ ์ดํ•ด

  • block, inline, inline-block, none, flex ...

4.2.1. block

  • ํ•˜๋‚˜์˜ ์นจ๋ฒ”ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ€๋กœ ์˜์—ญ
  • div, ul, li, h1~h6, p ๋“ฑ๋“ฑ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ width: 100%
  • css ์˜ ๋ชจ๋“  ๊ฐ’์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(width, height, margin, padding ๋“ฑ)

4.3.2. inline

  • ํ•œ๊ฐœ์˜ ๊ธ€์ž์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • width, height, maring, padding ์„ ์ ์šฉ ๋ชปํ•จ
  • a, img, span, b, strong ๋“ฑ๋“ฑ

4.3.3. inline-block

  • inline ๊ณผ block ์„ ์กฐํ•ฉํ•œ๋‹ค.
  • ๊ฐ€๋กœ๋กœ ๋ฐฐ์น˜๋˜๋ฉด์„œ , width, height ๋“ฑ์„ ์ž์œ ๋กญ๊ฒŒ ํ™œ์šฉํ•จ.
  • ์—”ํ„ฐํ‚ค์— ์˜ํ•œ ๊ณต๋ฐฑ ํ•œ์นธ์ด ์ž‘์„ฑ๋จ.(์›ํ•˜์ง€ ์•Š๋Š” ๊ณต๋ฐฑ์ด ์˜์—ญ์— ๋“ค์–ด๊ฐ)

4.3.4. flex

  • block ์ด๋ฉด์„œ inline ์ด๋ฉด์„œ, ๊ฐ€๋กœ ์ •๋ ฌ, ์„ธ๋กœ ์ •๋ ฌ, ์—ฌ๋ฐฑ์กฐ์ ˆ์ด ๊ฐ€๋Šฅํ•จ
  • ๊ฐ€๋กœ๋กœ ๋ ˆ์ด์•„์›ƒ ๋ฐฐ์น˜ ์‹œ ์ตœ์ ํ™”
  • https://studiomeal.com/archives/197
  • justify-content, align-items, gap, flex: ์ˆซ์ž ๋“ฑ๋“ฑ

4.3.5. grid(์ถ”ํ›„ ํŒŒ์•…)

  • block ์ด๋ฉด์„œ inline ์ด๋ฉด์„œ, ๊ฐ€๋กœ ์ •๋ ฌ, ์„ธ๋กœ ์ •๋ ฌ, ์—ฌ๋ฐฑ์กฐ์ ˆ์ด ๊ฐ€๋Šฅํ•จ
  • ํ‘œ์ฒ˜๋Ÿผ ๋ ˆ์ด์•„์›ƒ ๋ฐฐ์น˜ ์‹œ ์ตœ์ ํ™”
  • https://studiomeal.com/archives/533

4.3.6. none

  • ํ™”๋ฉด์— html ํƒœ๊ทธ๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ
  • js ์—์„œ๋„ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ดˆ๊ธฐ ์ฒ˜๋ฆฌ ์ฝ”๋“œ ๋ถˆ๊ฐ€

4.4. ๋ฐ˜์‘ํ˜•์˜ ์ดํ•ด

  • ๋„“์€ ํ™”๋ฉด๋ถ€ํ„ฐ html, css์ž‘์—…
  • ์ข์€ ํ™”๋ฉด์œผ๋กœ html, css ๋งˆ๋ฌด๋ฆฌ ๊ถŒ์žฅ

4.4.1 ๋ฐ˜์‘ํ˜• ์ฒดํฌ ์‚ฌํ•ญ

  • html ์— ๋ฐ˜๋“œ์‹œ ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
<meta name="viewport" content="width=device-width, initial-scale=1.0" />

4.4.2. ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ

  • ํฐ ์‚ฌ์ด์ฆˆ ๋ถ€ํ„ฐ ์ž‘์€ ์‚ฌ์ด์ฆˆ๋กœ max-width ๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณต๋ฐฑ์„ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋“œ์‹œ {} ์•ˆ์ชฝ์— ์›ํ•˜๋Š” css ์ฝ”๋“œ ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
@media and (max-width: 1280px) {
  ์›ํ•˜๋Š” css ์ž‘์„ฑ
}
@media and (max-width: 1024px) {
  ์›ํ•˜๋Š” css ์ž‘์„ฑ
}
@media and (max-width: 960px) {
  ์›ํ•˜๋Š” css ์ž‘์„ฑ
}
@media and (max-width: 540px) {
  ์›ํ•˜๋Š” css ์ž‘์„ฑ
}

4.5 ๊ธ€๊ผด ์…‹ํŒ…ํ•˜๊ธฐ

  • ๋ชจ๋“  css ๋ฐ html ์ž‘์—…์ „์—” ๊ฒฐ์ •ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋””์ž์ด๋„ˆ ๋ฐ ๊ธฐํš์ž์—๊ฒŒ ๋ฌธ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • css ์˜ body ์— ๊ธฐ๋ณธ ๊ธ€๊ผด ๋ฐฐ์น˜ ๊ถŒ์žฅํ•จ.
  • ์ ˆ๋Œ€ ์œ ๋ฃŒํฐํŠธ ํ™•์ธํ•˜๊ณ  ํ™œ์šฉ

4.5.1. ๊ตฌ๊ธ€ ์›นํฐํŠธ ํ™œ์šฉํ•˜๊ธฐ(๋ฌด๋ฃŒ)

4.5.2. ๋ˆˆ๋ˆ„ ์›นํฐํŠธ ํ™œ์šฉํ•˜๊ธฐ(๋ผ์ด์„ ์Šค ํ™•์ธ)

4.6 position ์˜ ์ดํ•ด

  • relative, absolute, fixed

4.6.1 absolute ์ฃผ์˜์‚ฌํ•ญ

  • ํ”ฝ์…€๋กœ ์ •ํ™•ํ•œ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • ๋ฐ˜๋“œ์‹œ ์ƒ์œ„ ํƒœ๊ทธ์— position ์ด ๋ช…์‹œ๋˜์–ด์•ผ ํ•จ
.์—„๋งˆ {
  position: relative;
}

.์ž์‹ {
  position: absolute;
}

4.6.2 fixed ๋ž€

  • ๋ฌด์กฐ๊ฑด ์›น๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ„์น˜ ์„ค์ •
.๋Œ€์ƒ {
  position: fixed;
  left: 0;
  top: 0;
  width: 100%;
  height: 50px;
  z-index: 999;
}

4.7. before, after ์˜ ์ดํ•ด

  • ๋Œ€ํ‘œ์ ์œผ๋กœ ์•„์ด์ฝ˜ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ ๋งŽ์ด ํ™œ์šฉ
<๋Œ€์ƒ> before ๋‚ด์šฉ after </๋Œ€์ƒ>
๋Œ€์ƒ::after {
  content: "";
}
๋Œ€์ƒ::before {
  content: "";
}

4.8. CSS์˜ ์šฐ์„ ์ˆœ์œ„ (์•„์ฃผ์ค‘์š”.)

  • ์–ด๋А css๊ฐ€ ๋งˆ์ง€๋ง‰์— ์ ์šฉ ๋˜๋Š”๊ฐ€?
  • ๊ธฐ๋ณธ : ํƒœ๊ทธ(์ž‘์„ฑ์ˆœ์„œ ๋น„๊ต) ===> ํด๋ž˜์Šค(์ž‘์„ฑ์ˆœ์„œ ๋น„๊ต) ===> ์•„์ด๋””
  • ๋ฒ”์œ„(๊ณต๋ฐฑ) ์„ ํƒ์ž CSS๋กœ ๋‹ค์‹œ ์ ์šฉ๋œ๋‹ค.
  • ๊ฒฝ๋กœ(>) ์„ ํƒ์ž CSS๋กœ ๋‹ค์‹œ ์ ์šฉ๋œ๋‹ค.
  • css ๋ฌธ์ œํ•ด๊ฒฐ : F12 ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ํ™•์ธ(์•„๋ž˜์—์„œ ์œ—๋ฐฉํ–ฅ์œผ๋กœ ํ•ด๊ฒฐ)
  • ๋„์ €ํžˆ ํ•ด๊ฒฐ์ด ์•ˆ๋œ๋‹ค๋ฉด !important ์˜ต์…˜ ์‚ฌ์šฉ

4.9. PostCSS Sorting ์„ค์น˜ ๋ฐ ์„ค์ •

  • CSS ์†์„ฑ ์ •๋ ฌํ•˜๊ธฐ
  • ๋‹จ์ถ•ํ‚ค ์ƒ์„ฑ : shift + alt + p ๋“ฑ๋ก
  • ์ฐธ๊ณ 
"postcssSorting.config": {
   "properties-order": [
      /* Layout */
      "display",
      "grid",
      "grid-column-gap",
      "grid-row-gap",
      "grid-auto-flow",
      "grid-auto-rows",
      "grid-auto-columns",
      "justify-items",
      "align-content",
      "place-items",
      "gap",
      "align-items",
      "justify-content",
      "flex-wrap",
      "flex-basis",
      "flex-grow",
      "flex-shrink",
      "flex",
      "align-self",
      "flex-direction",

      /* Box */
      "margin",
      "margin-top",
      "margin-right",
      "margin-bottom",
      "margin-left",
      "padding",
      "padding-top",
      "padding-right",
      "padding-bottom",
      "padding-left",
      "border",
      "border-top",
      "border-bottom",
      "border-right",
      "border-left",
      "border-style",
      "border-color",
      "border-top-width",
      "border-right-width",
      "border-bottom-width",
      "border-left-width",
      "border-top-style",
      "border-right-style",
      "border-bottom-style",
      "border-left-style",
      "border-top-color",
      "border-right-color",
      "border-bottom-color",
      "border-left-color",
      "border-top-left-radius",
      "border-top-right-radius",
      "border-bottom-right-radius",
      "border-bottom-left-radius",
      "outline",
      "outline-width",
      "outline-style",
      "outline-color",
      "outline-offset",
      "box-shadow",
      "overflow",
      "overflow-x",
      "overflow-y",
      "clip",
      "position",
      "top",
      "right",
      "bottom",
      "left",
      "z-index",
      "width",
      "min-width",
      "max-width",
      "height",
      "min-height",
      "max-height",
      "float",
      "clear",
      "visibility",
      "vertical-align",

      /* Background */
      "background",
      "background-color",
      "background-image",
      "background-repeat",
      "background-attachment",
      "background-position",
      "background-clip",
      "background-origin",
      "background-size",

      /* Font */
      "font-family",
      "font-size",
      "font-style",
      "font-weight",
      "line-height",
      "color",
      "text-align",
      "text-decoration",
      "text-transform",
      "letter-spacing",
      "text-shadow",
      "white-space",
      "word-spacing",
      "word-break",
      "word-wrap",
      "text-indent",
      "direction",
      "unicode-bidi",
      "hyphens",

      /* Animation and Transition */
      "animation",
      "animation-name",
      "animation-duration",
      "animation-timing-function",
      "animation-delay",
      "animation-iteration-count",
      "animation-direction",
      "animation-fill-mode",
      "animation-play-state",
      "transition",
      "transition-property",
      "transition-duration",
      "transition-timing-function",
      "transition-delay",

      /* Other */
      "content",
      "counter-reset",
      "counter-increment",
      "quotes",
      "list-style",
      "list-style-position",
      "list-style-type",
      "caption-side",
      "empty-cells",
      "table-layout",
      "pointer-events",
      "cursor",
      "resize",
      "overflow-wrap",
      "scroll-snap-type",
      "scroll-padding",
      "scroll-padding-top",
      "scroll-padding-right",
      "scroll-padding-bottom",
      "scroll-padding-left",
      "scroll-behavior",
      "scroll-snap-align",
      "scroll-snap-margin",
      "scroll-snap-stop",
      "scrollbar-width",
      "scrollbar-color"
    ]
  }

4.10. ํ•œ์ค„ ๋ง ์ค„์ž„ ์ฝ”๋“œ (...์ฒ˜๋ฆฌ)

์„ ํƒ {
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}

4.11. Gradient ์˜จ๋ผ์ธ๋„๊ตฌ

4.12. ๋‘์ค„ ๋ง ์ค„์ž„ ์ฝ”๋“œ (...์ฒ˜๋ฆฌ)

๋Œ€์ƒ {
  /* 2์ค„ ๋ง์ค„์ด๊ธฐ */
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  word-break: break-all;
}

5. javaScript ์˜ ์ดํ•ด

  • Java ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, javaScript ๋Š” ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ์›น๋ธŒ๋ผ์šฐ์ €์šฉ js ๊ฐ€ ์›๋ณธ์ธ๋ฐ, V8 ์—”์ง„๋งŒ ์ถ”์ถœํ•ด์„œ Node.js ๋งŒ๋“ฌ
  • PC์šฉ ์ฆ‰, ๋กœ์ปฌ์šฉ js ๊ฐ€ Node.js ์ž…๋‹ˆ๋‹ค. (DB ์ œ์–ด, ๋„คํŠธ์›Œํฌ, ์†Œํ”„ํŠธ์›จ์–ด, ์•ฑ ๊ฐœ๋ฐœ ๋“ฑ)

5.1. ๊ธฐ๋ณธ์ ์ธ js ์˜ ์—ญํ•  (๊ฐœ์ธ ์ฃผ๊ด€)

  • html, css ์ œ์–ด js
  • ๋ฐ์ดํ„ฐ ์—ฐ๋™ js

5.2. js ์ฝ”๋”ฉ ์ž๋ฆฌ

  • ๊ฐ€์žฅ ์•„๋žซ ์ค„์ด ์ œ์ผ ์ข‹์€ ์ฝ”๋“œ ์ž๋ฆฌ ์ž…๋‹ˆ๋‹ค

5.2.1. ์ธ๋ผ์ธ ๋ฐฉ์‹

<ํƒœ๊ทธ onload="" onclik=""></ํƒœ๊ทธ>

5.2.2. ํƒœ๊ทธ ๋ฐฉ์‹

<script></script>
<ํƒœ๊ทธ></ํƒœ๊ทธ>

5.2.3. ํŒŒ์ผ ๋ฐฉ์‹

<script src="๊ฒฝ๋กœ/ํŒŒ์ผ๋ช….ํ™•์žฅ์ž"></script>
<ํƒœ๊ทธ></ํƒœ๊ทธ>

5.3. js ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์  ์œ ์˜ ์‚ฌํ•ญ(html, css ์ œ์–ด ์‹œ)

-html๊ณผ js ๊ฐ€ ๋ชจ๋‘ ์ค€๋น„๊ฐ€ ๋˜๋ฉด ์‹คํ–‰๋˜๊ธธ ์›ํ•จ.

window.addEventListener("DOMContentLoaded", function () {
  //ํ• ์ผ
});
  • ์ด๋ฏธ์ง€ ๋“ฑ์˜ ์šฉ๋Ÿ‰์ด ํฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ชจ๋‘ ์ค€๋น„๋˜๋ฉด ์‹คํ–‰๋˜๊ธธ ์›ํ•จ.
window.addEventListener("load" function () {
   //ํ• ์ผ
});

5.4. js๋ฅผ ์ด์šฉํ•œ ํƒœ๊ทธ ์„ ํƒํ•˜๊ธฐ

const tag = document.querySelector("ํƒœ๊ทธ")
const class = document.querySelector(".ํด๋ž˜์Šค")
const id = document.querySelector("#์•„์ด๋””")
const tags = document.querySelectorAll("ํƒœ๊ทธ ํƒœ๊ทธ ํƒœ๊ทธ")
const tags2 = document.querySelectoAll(".ํด๋ž˜์Šค ํƒœ๊ทธ ํƒœ๊ทธ")

5.5. ๋ฐฑํ‹ฑ์„ ์ด์šฉํ•œ ๋ณ€์ˆ˜๊ฐ’ ์ถœ๋ ฅ

const age = 20;
const tag = `<div>๋‚˜์ด๋Š” ${age} </div>`;

5.6. ๋ฌธ์ž๋ฅผ html ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ

const tag = `<div>์•ˆ๋…•</div>`;
const pos = doucment.querySelector(".hi");
pos.innerHTML = tag;

5.7. ์›์‹œ(primitive) ๋ฐ์ดํ„ฐ ์ข…๋ฅ˜์˜ ์ดํ•ด

  • js ์—์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ์˜ ์ข…๋ฅ˜๋ฅผ ๋ฐ์ดํ„ฐํƒ€์ž… ๋˜๋Š” ๋ฐ์ดํ„ฐ ํ˜• ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜์–ด๋กœ๋Š” Data Type ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

5.7.1. ๋ฌธ์ž์—ด

  • ๋ฌธ์ž์™€ ๋ฌธ์ž์—ด์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
const ๋ณ€์ˆ˜๋ช… = ๋ณ€์ˆ˜๊ฐ’;
const nickName1 = "ํ™๊ธธ๋™";
const nickName2 = 'ํ™๊ธธ๋™'';
const nickName3 = `ํ™๊ธธ๋™`;

5.7.2. ์ˆซ์ž

  • ์ •์ˆ˜(์–‘์ˆ˜, ์Œ์ˆ˜), ์‹ค์ˆ˜(์–‘์˜ ์†Œ์ˆ˜, ์Œ์˜ ์†Œ์ˆ˜)
const ๋ณ€์ˆ˜๋ช… = ๋ณ€์ˆ˜๊ฐ’;
const age = 10;
const height = 180.5;

5.7.3. ๋ถˆ๋ฆฌ์–ธ(์ฐธ, ๊ฑฐ์ง“)

-true, false

const isLogin = true;
const isMember = false;

5.7.4 undefind

  • ๋ชจ๋“  ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’;
  • ๋ณ€์ˆ˜๊ฐ’์ด ์ •์˜๊ฐ€ ์•ˆ๋˜์—ˆ์–ด์š”
let nickName;

5.7.5. null

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •๋ง ๊ฐ’์ด ์—†๋‹ค๊ณ  ๋ช…์‹œํ•จ.
const isLogin = null;

5.7.6. symbol

  • ์ ˆ๋Œ€๋กœ js ์ฝ”๋“œ์—์„œ ์ ˆ๋Œ€๋กœ ์ค‘๋ณต์ด ์•ˆ๋˜๋Š” ๋‚ด์šฉ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ

5.8. ์›์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ๋งŒ๋“œ๋Š” ๋ฐ์ดํ„ฐ ์ข…๋ฅ˜์˜ ์ดํ•ด

  • ๋ณตํ•ฉ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ(Reference Data Type)

5.8.1. ๋ฐฐ์—ด(Array)

  • ๊ธฐํ˜ธ๋กœ๋Š” [] ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด์€ ์ˆœ์„œ(index)๊ฐ€ ์ค‘์š”ํ•˜๋ฏ€๋กœ ์ˆœ์„œ ๊ฐ’ ์ฆ‰ ์ธ๋ฑ์‹ฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ๋ฑ์Šค๋Š” ์ž๋™์œผ๋กœ 0๋ฒˆ ๋ถ€ํ„ฐ , ๋งˆ๋‹ค ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€์ˆ˜๋ช…[์ธ๋ฑ์Šค๋ฒˆํ˜ธ] ๋ฅผ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ๊ฐ’ ์ถ”์ถœ ํ•จ.
  • ๋ฐฐ์—ด์€ ๋ณ€์ˆ˜๋ช….length๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
const arr = [1, 2, 3, "์•ˆ๋…•", true, false, null, undefined, symbol];
arr[3]; // true ์ถ”์ถœ
arr.length; // 8์ถœ๋ ฅ

5.8.2. ๊ฐ์ฒด

const obj = {
  ์†์„ฑ๋ช…: 1,
  ์†์„ฑ๋ช…2: "๊ณผํ•™",
  ์†์„ฑ๋ช…3: false,
};

obj.์†์„ฑ๋ช…; //1
obj.์†์„ฑ๋ช…2; //"๊ณผํ•™"
obj.์†์„ฑ๋ช…; //:falcs"

5.9. ๋ฐ˜๋ณต๋ฌธ

  • for ๋ฌธ, while ๋ฌธ, do while ๋ฌธ
  • ์šฐ์„  for ๋ฌธ์ด ํ™œ์šฉ์œจ 90% ์ด์ƒ์ผ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.
  • for ๋ฌธ์˜ ํŠน์ง•์€ ๋ช‡ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์•ผ ํ• ์ง€ ํšŸ์ˆ˜๋ฅผ ์•„๋Š” ๊ฒฝ์šฐ ํ™œ์šฉ
for( ์ดˆ๊ธฐ๊ฐ’; ์กฐ๊ฑด์‹; ์ฆ๊ฐ์‹;){
  // ํ• ์ผ
}

for(let i = 0; i < 10; i ++){
  console.log(i);
  }

5.10. ์กฐ๊ฑด๋ฌธ

  • if, switch
  • ์›นํผ๋ธ”๋ฆฌ์‹ฑ์—์„œ๋Š” if ๋ฌธ์ด ์ฝ”๋“œ์— 90% ์ด์ƒ์ผ ๋“ฏ..?
if(true๋ƒ false ๋ƒ ์กฐ๊ฑด ํŒ๋‹จ){
  // true ๋ฉด ์‹คํ–‰
}else{
  // false ๋ฉด ์‹คํ–‰
}

6. Swiper ์Šฌ๋ผ์ด๋“œ์˜ ์ดํ•ด

6.1. Swiper ์Šฌ๋ผ์ด๋“œ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์•ˆ์ „์„ฑ, ๋ฐ˜์‘ํ˜•, ๋ชจ๋ฐ”์ผ ํ„ฐ์น˜ ์ง€์›
  • React(Next.js), Vue, Svlet ๋“ฑ์˜ FrontEnd ๊ธฐ์ˆ  ์ง€์›
  • TypeScript ์ง€์› ๋ฐ ์˜ˆ์ œ ์ง€์›

6.2 ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์€ ์˜ˆ์ œ์—์„œ ํ™•์ธ ํ›„ ํ™œ์šฉ

  • https://swiperjs.com/demos
  • Core ์†Œ์Šค์™€ : ์›นํผ๋ธ”๋ฆฌ์‹ฑ ์ฐธ์กฐ
  • React ์†Œ์Šค : FE ์—์„œ ์ฐธ์กฐ

6.3. ์•„์ฃผ ํŠน๋ณ„ํ•œ ๊ฐ€๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ์ œ์— ์—†๋Š” ๊ธฐ๋Šฅ)

-API ๋ฌธ์„œ ์ฐธ์กฐ : (https://swiperjs.com/swiper-api)

6.4. Core ์ƒ˜ํ”Œ ํ™œ์šฉํ•˜๊ธฐ (์›นํผ๋ธ”๋ฆฌ์‹ฑ)

6.4.1. html์— ๋ฐ˜๋“œ์‹œ ๋ฐฐ์น˜ํ•˜๊ธฐ(2์ค„)

  • ๋ฐ˜๋“œ์‹œ ์šฐ๋ฆฌ์˜ css ์™€ js ํŒŒ์ผ ์—ฐ๊ฒฐ ์ฝ”๋“œ ๋ณด๋‹ค ์œ—์ค„์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
<!-- Link Swiper's CSS -->
<link
  rel="stylesheet"
  href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css"
/>
<!-- Swiper JS -->
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>

6.4.2. div ํด๋ž˜์Šค ๋ช…์—์„œ ์ ˆ๋Œ€๋กœ ์ˆ˜์ • ํ•˜๋ฉด ์•ˆ๋จ

<!-- ๊ฐœ๋ฐœ์ž ํด๋ž˜์Šค์™€ ๋‚ด์šฉ ๋ถ€๋ถ„ ์ˆ˜์ • ๊ฐ€๋Šฅ -->
<div class="swiper ๊ฐœ๋ฐœ์ž ํด๋ž˜์Šค">
  <div class="swiper-wrapper">
    <dix class="swiper-slide">1</dix>
    <dix class="swiper-slide">2</dix>
    <dix class="swiper-slide">3</dix>
    <dix class="swiper-slide">4</dix>
    <dix class="swiper-slide">5</dix>
    <dix class="swiper-slide">6</dix>
    <dix class="swiper-slide">7</dix>
    <dix class="swiper-slide">8</dix>
  </div>
</div>

6.4.3. swiper ์Šฌ๋ผ์ด๋“œ ์ž‘๋™๋˜๋Š”์ง€ ํ™•์ธ ๋ถ€ํ„ฐ ํ•˜๊ธฐ

  • load ๋Š” ์ด๋ฏธ์ง€ ๋“ฑ์˜ ์šฉ๋Ÿ‰์ด ํฐ ํŒŒ์ผ์ด ๋กœ๋“œ๋˜๋ฉด ์‹คํ–‰ํ•˜๋„๋ก ํ•จ.
window.addEventListener("load", function () {
  // swiper ๋งŒ๋“ค๊ธฐ ์‹คํ–‰
  new Swiper(".๊ฐœ๋ฐœ์ž ํด๋ž˜์Šค", {});
});

6.4.4. ์˜ต์…˜๋“ค

  • slidesPerView : ํ™”๋ฉด๋‹น ๋ณด์—ฌ์ค„ ์Šฌ๋ผ์ด๋“œ ์ˆ˜
  • spaceBetween : ์Šฌ๋ผ์ด๋“œ์˜ ๊ฐ„๊ฒฉ (ํ”ฝ์…€๋‹จ์œ„)
  • slidesPerGroup : ํ•œ๋ฒˆ ์ด๋™์‹œ ๋ช‡๊ฐœ์˜ ์Šฌ๋ผ์ด๋“œ ์ด๋™๊ฐœ์ˆ˜
  • breakpoints: ์›น๋ธŒ๋ผ์šฐ์ € ๋„ˆ๋น„(ํ”ฝ์…€) ๊ณ„์‚ฐ ํ›„ ์Šฌ๋ผ์ด๋“œ ๋ฐฐ์น˜
window.addEventListener("load", function () {
  new Swiper(".sw_tour", {
    slidesPerView: 1,
    spaceBetween: 26,
    slidesPerGroup: 1,
    // ๋ฐ˜์‘ํ˜•
    breakpoints: {
      760: {
        slidesPerView: 2,
        slidesPerGroup: 2,
      },
      1280: {
        slidesPerView: 3,
        slidesPerGroup: 3,
      },
    },
  });
});

-๊ทธ๋ฆฌ๋“œ๋ฅผ ์ด์šฉํ•œ 2์ค„ ์ด์ƒ ์ถœ๋ ฅํ•˜๊ธฐ(์ธํ„ฐํŒŒํฌ์˜ˆ์ œ)

window.addEventListener("load", function () {
  new Swiper(".sw_tour", {
    slidesPerView: 5,
    grid: {
      rows: 2,
      fill: "row",
    },

    spaceBetween: 26,
    slidesPerGroup: 1,

    // ๋ฐ˜์‘ํ˜•
    breakpoints: {
      1024: {
        slidesPerView: 2,
        slidesPerGroup: 2,
        grid: {
          rows: 1,
          fill: "row",
        },
      },
      1280: {
        slidesPerView: 3,
        slidesPerGroup: 3,
        grid: {
          rows: 1,
          fill: "row",
        },
      },
    },
  });
});
  • ์ขŒ์ธก, ์šฐ์ธก ์Šฌ๋ผ์ด๋“œ ์ด๋™๋ฒ„ํŠผ
  • ์ฒซ ํŽ˜์ด์ง€์™€, ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€์—์„œ ๋ฒ„ํŠผ ์ˆจ๊ธฐ๊ธฐ ์ ์šฉ
  • ์›๋ณธ swiper ์˜ˆ์ œ์˜ ๋ฒ„ํŠผ์˜ ํด๋ž˜์Šค ๋ช…์„ ๊ผญ ์•Œ์•„๋‚ด์„œ ํ™œ์šฉํ•˜์ž.
.swiper-button-disabled {
  display: none !important;
}
    navigation: {
        nextEl: ".๋ฒ„ํŠผ ํด๋ž˜์Šค๋ช…",
        prevEl: ".๋ฒ„ํŠผ ํด๋ž˜์Šค๋ช…",
      },

7. SCSS

7.1. VSCode ์ปดํŒŒ์ผ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

  • live sass compiler ์„ค์น˜

7.2. ์‹ค์Šต ํ™˜๊ฒฝ

  • scss ํด๋” ๋งŒ๋“ค๊ธฐ
  • scss ํด๋”/test.scss ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ
  • ๋ฐ˜๋“œ์‹œ VSCode ์˜ ํ•˜๋‹จ ๋ฐ”์— watch Sass๋ฅผ Watching..์œผ๋กœ ๋ณ€๊ฒฝ (ํด๋ฆญ์‹œ ๋ณ€๊ฒฝ)

7.3. ํ™˜๊ฒฝ ์…‹ํŒ…

  • ํŒŒ์ผ๋ช….scss ๋Š” scss ํด๋”์— ๋ณด๊ด€
  • ํŒŒ์ผ๋ช….css ๋Š” css ํด๋”์— ๋ณด๊ด€

ํ™˜๊ฒฝ ์„ค์ •

Image

  • settings ๋ฉ”๋‰ด ์„ ํƒ Image

  • ๋‹ค์Œ์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  "liveSassCompile.settings.formats": [
    {
      "format": "expanded",
      "extensionName": ".css",
      "savePath": "/css",
      "savePathReplacementPairs": null
    }
    ],

7.4. ๊ธฐ์ดˆ ๋ฌธ๋ฒ•

7.4.1. ์ค‘์ฒฉ(Nesting)

// ์ค‘์ฒฉ (Nesting)
.card {
  border: 1px solid #000;
  .title {
    position: relative;
    font-weight: 700;
    &:hover {
      color: aqua;
    }
    &:active {
      color: olive;
    }
    &::after {
      content: "";
      position: absolute;
      width: 32px;
      height: 32px;
      background-color: red;
      left: 0;
      top: 0;
    }
  }
  .content {
    color: orange;
    button {
      border: 1px solid green;
      &:hover {
        background-color: red;
      }
    }
  }
}
.card {
  border: 1px solid #000;
}
.card .title {
  position: relative;
  font-weight: 700;
}
.card .title:hover {
  color: aqua;
}
.card .title:active {
  color: olive;
}
.card .title::after {
  content: "";
  position: absolute;
  width: 32px;
  height: 32px;
  background-color: red;
  left: 0;
  top: 0;
}
.card .content {
  color: orange;
}
.card .content button {
  border: 1px solid green;
}
.card .content button:hover {
  background-color: red;
} /*# sourceMappingURL=test.css.map */

7.4.2. ๋ณ€์ˆ˜

// ๋ณ€์ˆ˜ ๋งŒ๋“ค๊ธฐ

$width-screen: 960px;
$pc-w: 760px;

.wrap {
  position: relative;
  // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
  width: $width-screen;
  .header {
    // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
    width: $width-screen;
    .inner {
      // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
      width: $pc-w;
    }
  }
  .main {
    // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
    width: $width-screen;
  }
  .footer {
    // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
    width: $width-screen;
  }
}

7.4.3. ๋ณ€์ˆ˜๋ฅผ ๋ชจ์œผ๊ณ  ๋‹ค๋ฅธ scss ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ

  • css ๋กœ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋Š”๊ฒฝ์šฐ _ํŒŒ์ผ๋ช….scss๋กœ ์ƒ์„ฑ
  • scss ํด๋”์— val.scss ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ(ํŒŒ์ผ๋ช…์€ ์ž์œ )
$width-screen: 960px;
$pc-w: 760px;
  • ๋ณ€์ˆ˜ ์‚ฌ์šฉ์‹œ @import "val"; _๋ฐ˜๋“œ์‹œ ์ œ๊ฑฐํ•˜๊ณ  ํŒŒ์ผ๋ช…๋งŒ ์ ๊ธฐ!
@import "val";

.wrap {
  position: relative;
  // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
  width: $width-screen;
  .header {
    // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
    width: $width-screen;
    .inner {
      // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
      width: $pc-w;
    }
  }
  .main {
    // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
    width: $width-screen;
  }
  .footer {
    // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
    width: $width-screen;
  }
}

7.4.4 ํ•จ์ˆ˜(Mixins) ์‚ฌ์šฉํ•˜๊ธฐ

  • ํŒŒ์ผ๋ช…์„ _๋ฅผ ํ™œ์šฉํ•˜์ž. (scss/_mixins.scss)
@mixin flex-center {
  display: flex;
  align-items: center;
  justify-content: center;
}
@mixin border-fn($cc) {
  border: 5px solid $cc;
}
  • ์•„๋ž˜์ฒ˜๋Ÿผ ๋ถˆ๋Ÿฌ๋“ค์ž„
@import "val";
@import "mixins";
@import "val";
@import "mixins";

.wrap {
  position: relative;
  // mixins ์‚ฌ์šฉ
  @include flex-center;
  // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
  width: $width-screen;
  .header {
    // mixins ์‚ฌ์šฉ
    @include flex-center;
    // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
    width: $width-screen;
    .inner {
      @include border-fn(red);
      height: 100px;
      // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
      width: $pc-w;
    }
  }
  .main {
    @include border-fn(#fff);
    // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
    width: $width-screen;
  }
  .footer {
    // ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ
    width: $width-screen;
  }
}

8. ํŒŒ๋น„์ฝ˜ ๋ฐ ์•„์ด์ฝ˜ ๋งŒ๋“ค๊ธฐ

9. SEO

  • Search Engine Optimization : ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”
  • ๊ตฌ๊ธ€, ๋„ค์ด๋ฒ„ : ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅ์‹œ ๊ด€๋ จ ์ˆœ์œ„๋กœ ๋ชฉ๋ก ์ œ์‹œํ•จ.

9.1. ๊ธฐ๋ณธ์ ์ธ SEO ์ž‘์„ฑ ๋ชฉ๋ก

  • <title>ํƒ€์ดํ‹€</title> : ๊ณ ์ •๋œ ๊ธ€์ž. ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํƒ€์ดํ‹€
  • <meta name = "description" content = "์„œ๋น„์Šค ์„ค๋ช…"/> : ์š”์•ฝ ์„ค๋ช…, ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋‚ด์šฉ
  • <meta name = "keyword" content = "ํ‚ค์›Œ๋“œ"/> : ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ
  • <meta property = "og : title" content = "์ œ๋ชฉ"/> : sns ๊ณต์œ  ์‹œ ํ‘œํ˜„ ์ œ๋ชฉ
  • <meta property = "og : description" content = "์„œ๋น„์Šค ์„ค๋ช…"/> : sns ๊ณต์œ  ์‹œ ์„ค๋ช…
  • <meta property = "og : image" content = "https~"/> : ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ด๋ฏธ์ง€ url

9.2 ๊ฒ€์ƒ‰ ์—”์ง„ ๋กœ๋ณธ ์„ ์œ„ํ•œ ์„ค์ •

  • robots.txt ํŒŒ์ผ ์ƒ์„ฑ
User-agent: *
Allow: /
Sitemap: https://til-basic-dusky.vercel.app/Sitemap.xml
  • sitemap.xml ํŒŒ์ผ ์ƒ์„ฑ(๊ธฐ๋ณธ๊ตฌ์กฐ)
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

    <url>
        <loc>https://til-basic.vercel.app</loc>
        <lastmod>2025-06-27</lastmod>
        <changefreq>daily</changefreq>
        <priority>1.0</priority>
    </url>

    <url>
        <loc>https://til-basic.vercel.app/ceo</loc>
        <lastmod>2025-06-27</lastmod>
        <changefreq>yearly</changefreq>
        <priority>0.0</priority>
    </url>

</urlset>

9.3 ๋„ค์ด๋ฒ„์™€ ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰์—”์ง„ ๋“ฑ๋กํ•ด ๋ณด๊ธฐ