- ํ์ฌ์์ ๋นํฉํ์ง ์๊ณ ์ ๋ฌดํ๊ฒฝ ์ค์ ์ด ๊ฐ๋ฅํ์ ์ผ ํฉ๋๋ค.
- ์๋ ์์๋๋ก ํผ๋ธ๋ฆฌ์ฑ ์ ํ ํ์๋ฉด ๋ฌธ์ ์์ด ์งํ๋ฉ๋๋ค.
- ์ถ์ฒ ํ๋ก๊ทธ๋จ
ใด Byeond Compare ์ฝ๋ ๋น๊ต ๋๊ตฌ (์์ฉ๋ฒ์ ) : ๋น์ฉ์ง๋ถ -
https://www.scootersoftware.com/
-
Node.js๋ ๋ก์ปฌPC ๋ฐ ์๋ฒPC ์์ JS๋ฅผ ์คํํ๋ ํ๊ฒฝ ๊ตฌ์ฑ.
ใด ์๋ฒ๋ ๋ํ์ ์ผ๋ก ์น ์๋ฒ(PC), ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ(PC) ๋ฑ์ด ์์. ใด ์๋ฒ๋ ๊ณ ๊ฐ๋ค์ด ์ธํฐ๋ท์ผ๋ก ์ ์ํด์ ์๋ฃ๋ฅผ ์ฌ์ฉํ๋ PC
-
์ถํ React์์
NVM(Node version Manage)์ ํตํ ๊ด๋ฆฌ ์์
- ์๋ ๋ชฉ๋ก์ ์์ฃผ๋ก ์ค์น ํ๋ค.
- 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 (๋ณ๋ ์ฐธ์กฐ)
- ์ค๋ง์ถค, ๋ค์ฌ์ฐ๊ธฐ, ๋ฐ์ดํ, ์ธ๋ฏธ์ฝ๋ก ๋ฑ์ ๋ํ ๋ฌธ์์ ํฌ๋งท(์ปจ๋ฒค์ )์ ๋ง์ถ์ด ์ค
- ์ค์ ๋ฒํผ(VScode์ ๋ชจ์๋ฆฌ ์ผ์ชฝ ์์ด์ฝ) ํด๋ฆญ > Settings ๋ฉ๋ด ์ ํ

- ๊ฒ์ ๋ด์ฉ์ผ๋ก
format์ผ๋ก ์์ฑ Editor:Default Formatter์ค์ (Prettier ์ ํ)Editor:Format On Save์ค์ 
- VSCode ์ฌ์คํ ์ถ์ฒํฉ๋๋ค.
- ๋ฐ๋์ ํ๋ก์ ํธ๋ช
์
์์ด์๋ฌธ์,๋จ์ด_๋จ์ด๋ฑ์ ํน์๊ธฐํธ ์ถ์ฒ - git ์ ํ ๋จผ์ ์งํ ํ์ : GitHub ํฌํจํด์
-
images : ํ์ผ๋ช .jpg, ํ์ผ๋ช .png, ํ์ผ๋ช .gif, ํ์ผ๋ช .svg
-
jpg : ์ฌ์ง
-
gif : ๊ทธ๋ฆผ(์ ๋๋ฉ์ด์ ๊ทธ๋ฆผ ๊ฐ๋ฅ, ๋ฐฐ๊ฒฝ ํฌ๋ช ๊ฐ๋ฅ)
-
png : ์ฌ์ง + ๋ฐฐ๊ฒฝ ํฌ๋ช
-
svg : ๋์งํธ ์ซ์๋ก (๋ฒกํฐ) ๊ณ์ฐํด์ ๊ทธ๋ฆผ์ ๋ง๋ฆ(์์ด์ฝ, ๋ฐ์ํ ๋ฑ์ ์ ๊ทน ํ์ฉ)
-
css ํด๋ :
๋ชจ๋๋ณ.cssํ์ผ๋ค -
js ํด๋ :
๋ชจ๋๋ณ.jsํ์ผ๋ค -
assets ํด๋ : ๊ธฐํ ํ์ผ๋ค(์์, ์์ , ๊ณ์ฝ์, ์ฐ๋ฝ์ฒ..ํฌํจ)
-
apis ํด๋ :
๋ฐฑ์๋ ๋ฐ์ดํฐ ์ฐ๋๊ด๋ จ ํ์ผ๋ค(ํ์ผ๋ช .json, ๋ฐ์ดํฐ ์์ฒญ ๋ฑ) -
json : JavaScript Object Notation (์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ๋ฌธ๋ฒ์ ์ฉ๋ ํ์ผ)
index.html์ฝ์ ๋จ.(ํ์ผ๋ช ๋ณ๊ฒฝ ๋ถ๊ฐ : ์ํธ๋ฆฌํฌ์ธํธ)- ๋ถ๊ฐ์ ์ผ๋ก index ๋ง ์์ ํ๋ ์ด์ ๊ฐ ๊ฐ์ฅ ์ด๋ ต๊ณ , ๋ณต์กํ๊ณ , ๋น์ฃผ์ผ ํฉ๋๋ค.
- ๋จ์ถํค :
! + tabํค๋ก html ๊ธฐ๋ณธํ์ ์์ฑํ์.(๋ฐ๋์ ํ์ผ ์ ์ฅ ํ)
-
์น๋ธ๋ผ์ฐ์ ๊ฐ ์์๋ณผ์ ์๋ ๋ฌธ๋ฒ๊ตฌ์กฐ
-
DOM ๊ตฌ์กฐ๋ก ํด์ : Document Object Model
-
<!DOCTYPE html> -
html ์ ํด์ํ ๋ ์ต์ html5 ๊ท์น์ผ๋ก ํด์ํ๋ผ.
-
์์ ์ ์ฃผ์ํด์ ํด์ผํฉ๋๋ค.
-
์ ์ง ๋ณด์๋ฅผ ํ์๋ ๊ฒฝ์ฐ์๋ html์ ์ฒซ ์ค์ ๋ฐ๋์ ๋ฌธ์ํ๊ณ ์์ ํด์ผํฉ๋๋ค.
-
head ํ๊ทธ -
๋ฌธ์์ ํ์๋กํ ์ ๋ณด๋ฅผ ์์ฑํ๋ ๊ณณ
-
์ถํ icon ๋ฐ sns ์ฐ๋ ๋ถ๋ถ์์ ์ฃผ๋ก ํ์ฉ(
meta ํ๊ทธ) -
SEO( ์์์ง ์ต์ ํ ๋ด์ฉ) -
js ํ์ผ, css ํ์ผ์ ์ฐ๊ฒฐ ๋ฐฐ์น ํ์ฉ
-
๋ฐ๋์
tittle ํ๊ทธ๋ด์ฉ ์์ฑ ํ์ -
GA4์ค์ ๋ด์ฉ์ ์์ฑํ๋ ๊ณณ (Google Analytics) -
body ํ๊ทธ -
์ค์ ํ๋ฉด์ ๋ณด์ฌ์ง ๋ด์ฉ์ ๋ฐฐ์นํจ
-
<ํ๊ทธ>๋ด์ฉ</ํ๊ทธ>
-
๋ฐ๋์ ์๋ฌธ์๋ก ๋ชจ๋ ๊ตฌ์ฑํจ.
-
๋ด์ฉ
-
๋ด์ฉ ๋ฐฐ์น์ ๋ ์ด์์์ ๋ด๋นํจ.
-
๊ธฐ๋ณธ์ ์ผ๋ก
<div class="wrap"></div>๋ฅผ ๋ฐฐ์นํ๊ณ ๋ด์ฉ ์์ฑํจ -
์ต์ด ๊ตฌ์ฑ ํ์(๊ฒฝํ-๊ฒฝ๋ ฅ์ด ํ์ํจ.)
-
๋ด์ฉ์ ์ถฉ๋ถํ ๋ถ์(
Figma, PRD๋ถ์)๋ถ์ํ๊ณ ๋ ์ดํ์์ฃผ์์ ๋ช ์ํ div ์ฌ์ฉ -
div ํ๊ทธ์ ์ญํ ์ ๋ง๋ ์ด๋ฆ์
class ๋ก ์ง์ ํจ.
- ์๋ฉํฑ ํ๊ทธ๋ ํ๊ทธ ๋จ์ด ์์ฒด๊ฐ ๋ด์ฉ์ ์ ์ถํ๋๋ก ํ๋ค.
- div ๋ก ๋ด์ฉ์ ๊ตฌ๋ถ ํ ์๋ ์์ญ์ ํ๊ทธ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๋ฅผ ์ถ์ฒํฉ๋๋ค.
header ํ๊ทธ: ๊ฒ์์์ง์์ ๋ด์ฉ์ ๊ธฐ๋ํจ(๋ก๊ณ , ํ์ดํ, ์ฃผ๋ฉ๋ด, ๊ฒ์, ํ์๊ธฐ๋ฅ ...)main ํ๊ทธ: ์ปจํ ์ธ ๋ชจ์footer ํ๊ทธ: ๊ฒ์์์ง์์ ๋ด์ฉ์ ๊ธฐ๋ํจ(์นดํผ๋ผ์ดํฐ, ์ฃผ์, ์ฐ๋ฝ์ฒ, ์ฌ์ดํธ ๋งต ๋ฑ)
- ํ์ฌ ์น๋ธ๋ผ์ฐ์ ๋ด์ฉ ๊ฐฑ์ (ํ์ด์ง ์ด๋) :
<a href="์ฃผ์">๊ธ์/๊ทธ๋ฆผ</a> - ์น๋ธ๋ผ์ฐ์ ํญ ์์ฑ(์ํญ ํ์ด์ง) :
<a href="์ฃผ์" target="_blank">๊ธ์/๊ทธ๋ฆผ</a>
-
์ถ์ฒ 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>- ๋์ผํ ํํ์ ๋ ์ด์์์ด ๋ฐ๋ณต๋๋ค๋ฉด ๋ฌถ์ด์ ํ์ฉ
- ๋์ผํ ๊ธฐ๋ฅ์ด ๋ฐ๋ณต๋๋ค๋ฉด ๋ฌถ์ด์ ํ์ฉ
- ์์ด์ฝ์
https://react-icons.github.io/react-iconsํ์ฉ <img src="์ด๋ฏธ์ง๊ฒฝ๋ก/ํ์ผ๋ช .ํ์ฅ" alt="๋์ฒด๊ธ" />
- ๋ฌธ์์ ํ์ดํ ์ญํ ์ ํจ์ ํํํจ.
- h1~h6 ๋ก ๊ตฌ์ฑ
- html ๋ฌธ์์์ h1 ์ ํ๋ฒ๋ง ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅ
- ๊ฐ ์์ญ๋ณ๋ก h2 ๋ ํ๋ฒ๋ง ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅ
- ๊ธ์๋ก ๋ ๋ฌธ๋จ ์์ฑ์ ํ์ฉ
- display : block;
- ํ ์ค ๋ด๋ฆผ
- ๋ฌธ์๋ฅผ ๊ตต๊ฒ ํํํจ
- ์๋ฉํฑ ํ๊ทธ๋ก์ ๋ด์ฉ ์์ญ ๊ตฌ๋ถ
-css ์ ํ์
ํ๊ทธ {
}
.ํด๋์ค {
}
#์์ด๋ {
}
ํ๊ทธํ๊ทธํ๊ทธ {
}
.ํด๋์ค ํ๊ทธ ํ๊ทธ {
}- ์ธ๋ผ์ธ CSS (์ถํ React ์์๋ ์ธ๋ผ์ธ ๋ฐฉ์์ ๋ง์ด ํ์ฉํจ : css ์ฐ์ ์์ ์ ์ฉ)
<ํ๊ทธ style=""></ํ๊ทธ>- style ํ๊ทธ CSS ( ์ถํ React์์๋ objec t๋ฐฉ์์ผ๋ก ๋ง์ด ํ์ฉํจ)
<style></style>
<ํ๊ทธ></ํ๊ทธ>- style ํ์ผ link ๋ฐฉ์(์ถํ React์์๋ ๋ง์ด ํ์ํจ : ํ์ผ๋ช . ,module . css)
<link rel="stylesheet" href="css/header.css" />-css/header.cssํ์ผ
<link rel="stylesheet" href="css/header.css" />- block, inline, inline-block, none, flex ...
- ํ๋์
์นจ๋ฒํ ์ ์๋ ๊ฐ๋ก ์์ญ - div, ul, li, h1~h6, p ๋ฑ๋ฑ
- ๊ธฐ๋ณธ์ ์ผ๋ก width: 100%
- css ์ ๋ชจ๋ ๊ฐ์ ํ์ฉํ ์ ์๋ค.(width, height, margin, padding ๋ฑ)
- ํ๊ฐ์ ๊ธ์์ฒ๋ผ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- width, height, maring, padding ์ ์ ์ฉ ๋ชปํจ
- a, img, span, b, strong ๋ฑ๋ฑ
- inline ๊ณผ block ์ ์กฐํฉํ๋ค.
- ๊ฐ๋ก๋ก ๋ฐฐ์น๋๋ฉด์ , width, height ๋ฑ์ ์์ ๋กญ๊ฒ ํ์ฉํจ.
- ์ํฐํค์ ์ํ ๊ณต๋ฐฑ ํ์นธ์ด ์์ฑ๋จ.(์ํ์ง ์๋ ๊ณต๋ฐฑ์ด ์์ญ์ ๋ค์ด๊ฐ)
- block ์ด๋ฉด์ inline ์ด๋ฉด์, ๊ฐ๋ก ์ ๋ ฌ, ์ธ๋ก ์ ๋ ฌ, ์ฌ๋ฐฑ์กฐ์ ์ด ๊ฐ๋ฅํจ
- ๊ฐ๋ก๋ก ๋ ์ด์์ ๋ฐฐ์น ์ ์ต์ ํ
- https://studiomeal.com/archives/197
- justify-content, align-items, gap, flex: ์ซ์ ๋ฑ๋ฑ
- block ์ด๋ฉด์ inline ์ด๋ฉด์, ๊ฐ๋ก ์ ๋ ฌ, ์ธ๋ก ์ ๋ ฌ, ์ฌ๋ฐฑ์กฐ์ ์ด ๊ฐ๋ฅํจ
- ํ์ฒ๋ผ ๋ ์ด์์ ๋ฐฐ์น ์ ์ต์ ํ
- https://studiomeal.com/archives/533
- ํ๋ฉด์ html ํ๊ทธ๊ฐ ์๋ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌ
- js ์์๋ ์๋ค๊ณ ํ๋จํ์ฌ ์ด๊ธฐ ์ฒ๋ฆฌ ์ฝ๋ ๋ถ๊ฐ
- ๋์ ํ๋ฉด๋ถํฐ html, css์์
- ์ข์ ํ๋ฉด์ผ๋ก html, css ๋ง๋ฌด๋ฆฌ ๊ถ์ฅ
- html ์ ๋ฐ๋์ ์๋ ์ฝ๋๊ฐ ์์ด์ผ ํฉ๋๋ค.
<meta name="viewport" content="width=device-width, initial-scale=1.0" />- ํฐ ์ฌ์ด์ฆ ๋ถํฐ ์์ ์ฌ์ด์ฆ๋ก 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 ์์ฑ
}- ๋ชจ๋ css ๋ฐ html ์์ ์ ์ ๊ฒฐ์ ํ์ฌ์ผ ํฉ๋๋ค.
- ๋์์ด๋ ๋ฐ ๊ธฐํ์์๊ฒ ๋ฌธ์ํด์ผ ํฉ๋๋ค.
- css ์ body ์ ๊ธฐ๋ณธ ๊ธ๊ผด ๋ฐฐ์น ๊ถ์ฅํจ.
- ์ ๋ ์ ๋ฃํฐํธ ํ์ธํ๊ณ ํ์ฉ
- relative, absolute, fixed
- ํฝ์ ๋ก ์ ํํ ์์น๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- ๋ฐ๋์ ์์ ํ๊ทธ์ position ์ด ๋ช ์๋์ด์ผ ํจ
.์๋ง {
position: relative;
}
.์์ {
position: absolute;
}- ๋ฌด์กฐ๊ฑด ์น๋ธ๋ผ์ฐ์ ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์น ์ค์
.๋์ {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 50px;
z-index: 999;
}- ๋ํ์ ์ผ๋ก ์์ด์ฝ ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ ๋ง์ด ํ์ฉ
<๋์> before ๋ด์ฉ after </๋์>๋์::after {
content: "";
}
๋์::before {
content: "";
}- ์ด๋ css๊ฐ ๋ง์ง๋ง์ ์ ์ฉ ๋๋๊ฐ?
- ๊ธฐ๋ณธ : ํ๊ทธ(์์ฑ์์ ๋น๊ต) ===> ํด๋์ค(์์ฑ์์ ๋น๊ต) ===> ์์ด๋
- ๋ฒ์(
๊ณต๋ฐฑ) ์ ํ์ CSS๋ก ๋ค์ ์ ์ฉ๋๋ค. - ๊ฒฝ๋ก(
>) ์ ํ์ CSS๋ก ๋ค์ ์ ์ฉ๋๋ค. - css ๋ฌธ์ ํด๊ฒฐ : F12 ๊ฐ๋ฐ์ ๋๊ตฌ์์ ํ์ธ(์๋์์ ์๋ฐฉํฅ์ผ๋ก ํด๊ฒฐ)
- ๋์ ํ ํด๊ฒฐ์ด ์๋๋ค๋ฉด
!important์ต์ ์ฌ์ฉ
- 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"
]
}์ ํ {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}๋์ {
/* 2์ค ๋ง์ค์ด๊ธฐ */
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
word-break: break-all;
}- Java ๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ, javaScript ๋ ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ
- ์น๋ธ๋ผ์ฐ์ ์ฉ js ๊ฐ ์๋ณธ์ธ๋ฐ, V8 ์์ง๋ง ์ถ์ถํด์ Node.js ๋ง๋ฌ
- PC์ฉ ์ฆ, ๋ก์ปฌ์ฉ js ๊ฐ Node.js ์ ๋๋ค. (DB ์ ์ด, ๋คํธ์ํฌ, ์ํํธ์จ์ด, ์ฑ ๊ฐ๋ฐ ๋ฑ)
- html, css ์ ์ด js
- ๋ฐ์ดํฐ ์ฐ๋ js
- ๊ฐ์ฅ ์๋ซ ์ค์ด ์ ์ผ ์ข์ ์ฝ๋ ์๋ฆฌ ์ ๋๋ค
<ํ๊ทธ onload="" onclik=""></ํ๊ทธ><script></script>
<ํ๊ทธ></ํ๊ทธ><script src="๊ฒฝ๋ก/ํ์ผ๋ช
.ํ์ฅ์"></script>
<ํ๊ทธ></ํ๊ทธ>-html๊ณผ js ๊ฐ ๋ชจ๋ ์ค๋น๊ฐ ๋๋ฉด ์คํ๋๊ธธ ์ํจ.
window.addEventListener("DOMContentLoaded", function () {
//ํ ์ผ
});- ์ด๋ฏธ์ง ๋ฑ์ ์ฉ๋์ด ํฐ ๋ฆฌ์์ค๊ฐ ๋ชจ๋ ์ค๋น๋๋ฉด ์คํ๋๊ธธ ์ํจ.
window.addEventListener("load" function () {
//ํ ์ผ
});const tag = document.querySelector("ํ๊ทธ")
const class = document.querySelector(".ํด๋์ค")
const id = document.querySelector("#์์ด๋")
const tags = document.querySelectorAll("ํ๊ทธ ํ๊ทธ ํ๊ทธ")
const tags2 = document.querySelectoAll(".ํด๋์ค ํ๊ทธ ํ๊ทธ")const age = 20;
const tag = `<div>๋์ด๋ ${age} </div>`;const tag = `<div>์๋
</div>`;
const pos = doucment.querySelector(".hi");
pos.innerHTML = tag;- js ์์ ์ดํดํ ์ ์๋ ์๋ฃ์ ์ข
๋ฅ๋ฅผ
๋ฐ์ดํฐํ์๋๋๋ฐ์ดํฐ ํ์ด๋ผ๊ณ ํฉ๋๋ค. - ์์ด๋ก๋ Data Type ์ด๋ผ๊ณ ํฉ๋๋ค.
- ๋ฌธ์์ ๋ฌธ์์ด์ ๋ค๋ฆ ๋๋ค.
const ๋ณ์๋ช
= ๋ณ์๊ฐ;
const nickName1 = "ํ๊ธธ๋";
const nickName2 = 'ํ๊ธธ๋'';
const nickName3 = `ํ๊ธธ๋`;- ์ ์(์์, ์์), ์ค์(์์ ์์, ์์ ์์)
const ๋ณ์๋ช
= ๋ณ์๊ฐ;
const age = 10;
const height = 180.5;-true, false
const isLogin = true;
const isMember = false;- ๋ชจ๋ ๋ณ์์ ์ด๊ธฐ๊ฐ;
- ๋ณ์๊ฐ์ด ์ ์๊ฐ ์๋์์ด์
let nickName;- ๊ฐ๋ฐ์๊ฐ ์ ๋ง ๊ฐ์ด ์๋ค๊ณ ๋ช ์ํจ.
const isLogin = null;- ์ ๋๋ก js ์ฝ๋์์ ์ ๋๋ก ์ค๋ณต์ด ์๋๋ ๋ด์ฉ ๋ง๋๋ ๊ฒฝ์ฐ
- ๋ณตํฉ๋ฐ์ดํฐ ๋๋ ์ฐธ์กฐํ ๋ฐ์ดํฐ(Reference Data Type)
- ๊ธฐํธ๋ก๋
[]์ฌ์ฉํฉ๋๋ค. - ๋ฐฐ์ด์ ์์(index)๊ฐ ์ค์ํ๋ฏ๋ก ์์ ๊ฐ ์ฆ ์ธ๋ฑ์ฑ์ ๊ด๋ฆฌํฉ๋๋ค.
- ์ธ๋ฑ์ค๋ ์๋์ผ๋ก 0๋ฒ ๋ถํฐ
,๋ง๋ค ์ฆ๊ฐํฉ๋๋ค. ๋ณ์๋ช [์ธ๋ฑ์ค๋ฒํธ]๋ฅผ ํตํด์ ์ํ๋ ๊ฐ ์ถ์ถ ํจ.- ๋ฐฐ์ด์
๋ณ์๋ช .length๊ฐ ์ฃผ์ด์ง๋๋ค.
const arr = [1, 2, 3, "์๋
", true, false, null, undefined, symbol];
arr[3]; // true ์ถ์ถ
arr.length; // 8์ถ๋ ฅconst obj = {
์์ฑ๋ช
: 1,
์์ฑ๋ช
2: "๊ณผํ",
์์ฑ๋ช
3: false,
};
obj.์์ฑ๋ช
; //1
obj.์์ฑ๋ช
2; //"๊ณผํ"
obj.์์ฑ๋ช
; //:falcs"- for ๋ฌธ, while ๋ฌธ, do while ๋ฌธ
- ์ฐ์ for ๋ฌธ์ด ํ์ฉ์จ 90% ์ด์์ผ ๋ฏ ํฉ๋๋ค.
- for ๋ฌธ์ ํน์ง์ ๋ช ๋ฒ ๋ฐ๋ณตํด์ผ ํ ์ง ํ์๋ฅผ ์๋ ๊ฒฝ์ฐ ํ์ฉ
for( ์ด๊ธฐ๊ฐ; ์กฐ๊ฑด์; ์ฆ๊ฐ์;){
// ํ ์ผ
}
for(let i = 0; i < 10; i ++){
console.log(i);
}- if, switch
- ์นํผ๋ธ๋ฆฌ์ฑ์์๋ if ๋ฌธ์ด ์ฝ๋์ 90% ์ด์์ผ ๋ฏ..?
if(true๋ false ๋ ์กฐ๊ฑด ํ๋จ){
// true ๋ฉด ์คํ
}else{
// false ๋ฉด ์คํ
}- ๋ํ์ ์ธ ์ฌ๋ผ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Swiper ์ฃผ์ (https://swiperjs.com/)
- Slick ์ฃผ์ (https://kenwheeler.github.io/slick)
- BxSlider (๋ฐ์ํ, ๋ชจ๋ฐ์ผ ์ง์ ์๋จ) ์ฃผ์ (https://bxslider.com/)
- ์์ ์ฑ, ๋ฐ์ํ, ๋ชจ๋ฐ์ผ ํฐ์น ์ง์
- React(Next.js), Vue, Svlet ๋ฑ์ FrontEnd ๊ธฐ์ ์ง์
- TypeScript ์ง์ ๋ฐ ์์ ์ง์
- https://swiperjs.com/demos
- Core ์์ค์ : ์นํผ๋ธ๋ฆฌ์ฑ ์ฐธ์กฐ
- React ์์ค : FE ์์ ์ฐธ์กฐ
-API ๋ฌธ์ ์ฐธ์กฐ : (https://swiperjs.com/swiper-api)
- ๋ฐ๋์ ์ฐ๋ฆฌ์ 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><!-- ๊ฐ๋ฐ์ ํด๋์ค์ ๋ด์ฉ ๋ถ๋ถ ์์ ๊ฐ๋ฅ -->
<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>- load ๋ ์ด๋ฏธ์ง ๋ฑ์ ์ฉ๋์ด ํฐ ํ์ผ์ด ๋ก๋๋๋ฉด ์คํํ๋๋ก ํจ.
window.addEventListener("load", function () {
// swiper ๋ง๋ค๊ธฐ ์คํ
new Swiper(".๊ฐ๋ฐ์ ํด๋์ค", {});
});- 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: ".๋ฒํผ ํด๋์ค๋ช
",
},live sass compiler์ค์น
scss ํด๋ ๋ง๋ค๊ธฐscss ํด๋/test.scss ํ์ผ ๋ง๋ค๊ธฐ- ๋ฐ๋์ VSCode ์ ํ๋จ ๋ฐ์
watch Sass๋ฅผWatching..์ผ๋ก ๋ณ๊ฒฝ (ํด๋ฆญ์ ๋ณ๊ฒฝ)
- ํ์ผ๋ช
.scss ๋
scss ํด๋์ ๋ณด๊ด - ํ์ผ๋ช
.css ๋
css ํด๋์ ๋ณด๊ด
"liveSassCompile.settings.formats": [
{
"format": "expanded",
"extensionName": ".css",
"savePath": "/css",
"savePathReplacementPairs": null
}
],- ์ฐธ์กฐ : https://www.heropy.dev/p/Y7OrPe
- ์ค์ฒฉ(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 */// ๋ณ์ ๋ง๋ค๊ธฐ
$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;
}
}- 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;
}
}- ํ์ผ๋ช
์
_๋ฅผ ํ์ฉํ์. (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;
}
}- Search Engine Optimization : ๊ฒ์ ์์ง ์ต์ ํ
- ๊ตฌ๊ธ, ๋ค์ด๋ฒ : ๊ฒ์์ด๋ฅผ ์ ๋ ฅ์ ๊ด๋ จ ์์๋ก ๋ชฉ๋ก ์ ์ํจ.
<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
robots.txtํ์ผ ์์ฑ
User-agent: *
Allow: /
Sitemap: https://til-basic-dusky.vercel.app/Sitemap.xmlsitemap.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>
