1st-demo.mp4
@keyframes μ λλ©μ΄μ μ μ©
SVG νκ·Έλ₯Ό νμ©ν κ·Έλν ꡬν
ν©μ ν | μ‘°νμ | ν©νμ | μ‘°μ€μ£Ό |
---|---|---|---|
@yxhwxn |
@1223v |
@HyeYoung-Hwang |
@iamyuunzo |
Feat: Add user authentication
Fix: Resolve null pointer exception
Docs: Update installation guide
Tag Type | content |
---|---|
Feat |
κΈ°λ₯(feature) |
Docs |
λ¬Έμ μμ (documentation) |
Fix |
λ²κ·Έ μμ |
Hotfix |
κΈ΄κΈ λ²κ·Έ μμ |
Refactor |
μ½λ 리ν©ν°λ§(κ°λ μ± ν₯μ) |
Chore |
κ΄λ¦¬(maintain), ν΅μ¬ λ΄μ©μ μλ κΈ°ν λ³κ²½ |
CSS νμ μ ν¨μ¨μ μΌλ‘ νκΈ° μν΄μλ μΌκ΄μ± μκ³ μ΄ν΄νκΈ° μ¬μ΄ μ½λ μ€νμΌμ΄ μ€μν©λλ€. μλλ λνμ μΈ CSS 컨벀μ κ³Ό λͺ¨λ² μ¬λ‘μ λλ€.
- λλ ν°λ¦¬ ꡬ쑰 μμ:
/styles
βββ base/ /* μ΄κΈ°ν, κ³΅ν΅ μ€νμΌ */
βββ components/ /* λ²νΌ, μΉ΄λ, λͺ¨λ¬ λ± μ»΄ν¬λνΈ */
βββ layouts/ /* λ μ΄μμ κ΄λ ¨ μ€νμΌ (ν€λ, νΈν°, 그리λ) */
βββ pages/ /* νμ΄μ§λ³ μ€νμΌ */
βββ themes/ /* λ€ν¬λͺ¨λ, λΌμ΄νΈλͺ¨λ λ± ν
λ§ */
βββ utils/ /* μ νΈλ¦¬ν° ν΄λμ€ */
βββ main.css /* λͺ¨λ CSS νμΌμ λΆλ¬μ€λ λ©μΈ νμΌ */
- Block: λ 립μ μΈ μ»΄ν¬λνΈ
- Element: λΈλ‘μ μΌλΆμΈ μμ μμ
- Modifier: λΈλ‘ λλ μμμ λ³ν
μμ:
/* Block */
.button {
padding: 10px;
background-color: #0078d4;
}
/* Element */
.button__icon {
margin-right: 5px;
}
/* Modifier */
.button--primary {
background-color: #1abc9c;
}
HTML μμ:
<button class="button button--primary">
<span class="button__icon">π</span>
Search
</button>
- λ€μ¬μ°κΈ°: 2 λλ 4 μ€νμ΄μ€(ν κ·μΉμ λ§μΆ€)
- λκ΄νΈ: μ¬λ
{
λ μμ± λΈλ‘ λ°λ‘ λ€μ μμΉ - μμ± μ λ ¬: μμ±μ λ Όλ¦¬μ μμλ‘ μ λ ¬
μ’μ μ:
.button {
display: inline-block;
padding: 10px;
font-size: 14px;
color: white;
background-color: #0078d4;
border-radius: 4px;
}
- μΉμ μ£Όμ:
/* ========================================
COMPONENT: BUTTON
======================================== */
- μ€λͺ μ£Όμ:
/* Primary button for call-to-action */
.button--primary {
background-color: #1abc9c;
}
- νλ‘μ νΈμ μ¬μ©λλ ν°νΈλ
@import
λ₯Ό ν΅ν΄ μΈλΆ μ€νμΌμνΈλ₯Ό λΆλ¬μ μ¬μ©ν©λλ€. - ν°νΈ μν¬νΈ μμ:
@import url("https://static.toss.im/tps/main.css");
@import url("https://static.toss.im/tps/others.css");
- ν°νΈ μ μ© μμ:
body {
font-family: 'Tossface', sans-serif;
}
μμ μ΄λ¦ | HEX μ½λ | μ©λ |
---|---|---|
κΈ°λ³Έ λ°°κ²½μ | #f9fafc |
νμ΄μ§ λ° μΉμ λ°°κ²½ |
κΈ°λ³Έ ν μ€νΈ μμ | #000 |
κΈ°λ³Έ ν μ€νΈ |
μλΈ ν μ€νΈ μμ | #555 |
보쑰 ν μ€νΈ |
κ°μ‘° μμ | #0078d4 |
λ²νΌ λ° μ£Όμ λ§ν¬ |
κ°μ‘° μμ (μ§ν) | #1abc9c |
μ£Όμ κ°μ‘° μμ |
μμ κ°μ‘° μμ | #d32f2f |
νλ½ λ°μ΄ν° λ° μλ¦Ό |
μμ κ°μ‘° μμ | #1976d2 |
μμΉ λ°μ΄ν° λ° μλ¦Ό |
보쑰 κ°μ‘° μμ | #4caf50 |
νμ±ν μν |
λΉνμ± μμ | #bbb4b4 |
λΉνμ±ν μμ |
μΉ΄λ λ°°κ²½μ | #f2f4f6 |
μΉ΄λ λ° λΈλ‘ λ°°κ²½ |
κ²½κ³μ μμ | #e0e0e0 |
μΉμ ꡬλΆμ λ° κ²½κ³ |
보쑰 λ°°κ²½μ | #f5f5f5 |
νν° λ° λ²νΌ λ°°κ²½ |
μλΈ ν μ€νΈ μμ | #8b95a1 |
μλΈ λ©λ΄ ν μ€νΈ |
μ°¨νΈ κ°μ‘° μμ | #3182f6 |
μ°¨νΈ μ£Όμ λ°μ΄ν° ν¬μΈνΈ |
body {
background-color: #f9fafc;
color: #000;
}
.menu-item.active {
border-bottom: 3px solid #000;
}
.rate-change.positive {
color: #d32f2f;
}
.rate-change.negative {
color: #1976d2;
}
.footer {
background-color: #f9fafc;
border-top: 1px solid #e0e0e0;
}
- μ΄λ―Έμ§ νκ·Έμ lazy loadingμ μΆκ° ν λλλ§ μ΅μ νλ₯Ό ν¨μΌλ‘μ¨ μ΄λ―Έμ§ λμ½λ©μ λΉλκΈ°μ μΌλ‘ νλλ‘ μΆκ°νμ¬ μ±λ₯μ ν₯μμμΌ°μ΅λλ€.
- toss ν°νΈλ₯Ό μΈλΆμμ import ν¨μΌλ‘μ¨ μλνν° λ₯Ό μ¬μ©νλμ μμ μΆκ°μ κ°μ μ¬νμΌλ‘ ν°νΈ νμΌμ zipμΌλ‘ λ°μ μΈλΆμ μμ‘΄νμ§ μλλ‘ κ³ λ €νκ³ μμ΅λλ€.
- meta νκ·Έμ description, keyword, contentλ₯Ό μΆκ°νμ¬ μΉμ κ·Όμ±μ ν₯μ.
- μ μλ ₯μλ€μ΄ μ¬μ©νλ μ€ν¬λ¦°λ¦¬λκ° μ ꡬλν μ μλλ‘ img νκ·Έ λ±μ νμμ μΌλ‘ alt, aria-** μμ±μΌλ‘ μ€λͺ μΆκ°