CSS ìŒê° íšì(cos(), sin(), tan())ì ê°ë ¥í êž°ë¥ì íì©íì¬ ëì ìŽê³ ìíì ìŒë¡ ì ë°í ë ìŽììì ë§ëë ë°©ë²ì ìì볎ìžì. ë³µì¡í ì ëë©ìŽì , ë°ìí ëììž, ìê°ì ìŒë¡ ë°ìŽë ì¹ ê²œíì ìíŽ ìŽ íšìë€ì íì©íë ë²ì ë°°ìž ì ììµëë€.
CSS ìŒê° íšì: íë ì¹ ëììžì ìí ìíì ë ìŽìì
ìë
ëì CSSë ë ìŽììì ë§ë€êž° ìíŽ ë°ì€ êž°ë° ëªšëžì ìì¡ŽíŽ ììµëë€. ìŽ ëªšëžë€ì ì ì°íì§ë§, ì§ì ìŒë¡ ëì ìŽê±°ë ìíì ìŒë¡ ì ë°íê±°ë ì êž°ì ìž ííì ëììžìŽ íìí ëë ì¢
ì¢
ë¶ì¡±íšì 볎ì
ëë€. ìŽë CSS ìŒê° íšììž cos()
, sin()
, tan()
ê° ë±ì¥í©ëë€. ìŽ ê°ë ¥í íšìë€ì ë³µì¡í ì ëë©ìŽì
, ë°ìí ëììž, ê·žëŠ¬ê³ ìê°ì ìŒë¡ ë°ìŽë ì¹ ê²œíì CSSì íê³ ëŽìì 몚ë 구íí ì ìë ìë¡ìŽ ê°ë¥ì±ì ììì ìŽìŽì€ëë€.
ìŒê° íšìì ìŽíŽ
CSS 구íì ìì ìŒê° íšìì Ʞ볞ì ë€ì ìŽíŽë³Žê² ìµëë€. ìíìì ìŽ íšìë€ì ì§ê°ìŒê°íì ê°ê³Œ ë³ì êŽê³ë¥Œ ëíë ëë€.
- ìœì¬ìž(cos): ë¹ë³ì ëí ë°ë³ì ë¹ìšì ëë€.
- ì¬ìž(sin): ë¹ë³ì ëí ëìŽì ë¹ìšì ëë€.
- íì íž(tan): ë°ë³ì ëí ëìŽì ë¹ìšì ëë€.
CSSìì ìŽ íšìë€ì ê°ë륌 ì
ë ¥(ë, ëŒëì, íŽ, ê·žëŒëìžìŒë¡ íí)ìŒë¡ ë°ì cos()
ì sin()
ì ê²œì° -1곌 1 ì¬ìŽì ê°ì, tan()
ì ê²œì° ììì ì€ì ê°ì ë°íí©ëë€. ìŽ ê°ì transform
, width
, height
, left
, top
ë±ê³Œ ê°ì CSS ìì±ì ì¬ì©ë ì ììµëë€.
ëžëŒì°ì ížíì±
ìŒê° íšìë CSSì ë¹êµì ìë¡ê² ëì ëììŒë©° ëžëŒì°ì ì§ìì ìì§ ë°ì ì€ì ëë€. 2023ë ë§/2024ë ìŽ êž°ì€ìŒë¡ Chrome, Firefox, Safari, Edge륌 í¬íší ëë¶ë¶ì ìµì ëžëŒì°ì ìì ì§ìë©ëë€. íë¡ëì í겜ìì ìŽ íšìë€ì 구ííêž° ì ìë Can I useì ê°ì ì¹ì¬ìŽížìì ìµì ížíì± í륌 íìžíë ê²ìŽ ì€ìí©ëë€. 구í ëžëŒì°ì 륌 ìíŽìë íŽëЬíìŽë ë첎 ìëšì ì¬ì©íë ê²ì ê³ ë €íŽìŒ í©ëë€.
Ʞ볞 구묞
CSSìì ìŒê° íšì륌 ì¬ì©íë 구묞ì ê°ëší©ëë€:
property: cos(angle);
property: sin(angle);
property: tan(angle);
ì¬êž°ì angle
ì ë€ìí ëšìë¡ ííë ì ììµëë€:
- deg: ë (ì:
cos(45deg)
) - rad: ëŒëì (ì:
sin(0.785rad)
) - turn: íì ì (ì:
cos(0.125turn)
- 45degì ëìŒ) - grad: ê·žëŒëìž (ì:
tan(50grad)
- 45degì ëìŒ)
ì€ì©ì ìž ì ì© ë° ìì
1. ìí ë°°ì¹
ìŒê° íšìì ê°ì¥ ìŒë°ì ìŽê³ ìê°ì ìŒë¡ ë§€ë ¥ì ìž ìì© ë¶ìŒ ì€ íëë ìí ë°°ì¹ì ëë€. ì€ì¬ì ì êž°ì€ìŒë¡ ììë€ì ìíìŒë¡ ë°°ìŽí ì ììµëë€. ìŽë ë¡ë, ë°©ì¬í ë©ëŽ ëë ìê°ì ìŒë¡ í¥ë¯žë¡ìŽ ëŽë¹ê²ìŽì ìì€í ì ë§ëë ë° í¹í ì ì©í©ëë€.
.container {
position: relative;
width: 200px;
height: 200px;
}
.item {
position: absolute;
width: 30px;
height: 30px;
border-radius: 50%;
background-color: #3498db;
}
/* ë ëì ì ìŽë¥Œ ìí CSS ë³ì ì¬ì© */
:root {
--item-count: 8;
--radius: 80px;
}
@property --angle {
syntax: '';
inherits: false;
initial-value: 0deg;
}
.container {
animation: rotate 10s linear infinite;
}
@keyframes rotate {
from {--angle: 0deg;}
to {--angle: 360deg;}
}
/* cos()ì sin()ì ì¬ì©íì¬ ëì ìŒë¡ ììŽí
ìì¹ ì§ì */
.item:nth-child(n) {
--index: calc(n - 1);
--angle-item: calc(var(--index) * (360deg / var(--item-count)));
left: calc(50% + var(--radius) * cos(var(--angle-item)) - 15px); /* 15pxë ììŽí
ëë¹ì ì ë° */
top: calc(50% + var(--radius) * sin(var(--angle-item)) - 15px); /* 15pxë ììŽí
ëìŽì ì ë° */
}
ì€ëª :
position: relative
륌 ê°ì§ 컚í ìŽë륌 ë§ëëë€.- 컚í
ìŽë ëŽì ê° ììŽí
ì
position: absolute
륌 ê°ì§ëë€. - CSS ë³ì(
--item-count
,--radius
,--angle
)륌 ì¬ì©íì¬ ììŽí ì ìì ìì ë°ì§ëŠì ì ìŽí©ëë€. - ê° ììŽí
ì
left
ìtop
ìì±ì ê°ê°cos()
ìsin()
ì ì¬ì©íì¬ ê³ì°ë©ëë€. ê° ììŽí ì ê°ëë ìžë±ì€ë¥Œ êž°ë°ìŒë¡ ê²°ì ë©ëë€. - ë¶ëªš 컚í ìŽëì ì ëë©ìŽì ì ì¶ê°íì¬ ììë€ìŽ ì€ì¬ì êž°ì€ìŒë¡ íì íê² ë§ëëë€.
ë³í: ììŽí ì ì, ë°ì§ëŠ, ììì ìœê² ìì íì¬ ë€ìí ìê°ì íšê³Œë¥Œ ë§ë€ ì ììµëë€. ë ë³µì¡í ìížìì©ì ìíŽ ê° ììŽí ì ê°ë³ì ìŒë¡ ì ëë©ìŽì ì ì¶ê°í ìë ììµëë€.
2. 묌결 ì ëë©ìŽì
ìŒê° íšìë ë¶ëëœê² ì§ëíë 묌결 ì ëë©ìŽì ì ë§ëë ë° íìí©ëë€. ìŽë ìê°ì ìŒë¡ ë§€ë ¥ì ìž ë¡ë© íìêž°, 배겜 ì ëë©ìŽì ëë ìížìì© ìì륌 ë§ëë ë° ì¬ì©ë ì ììµëë€.
.wave {
width: 100%;
height: 100px;
overflow: hidden;
position: relative;
}
.wave::before {
content: '';
position: absolute;
width: 200%;
height: 100%;
background-color: #2ecc71;
animation: wave-move 5s linear infinite;
}
@keyframes wave-move {
0% {
transform: translateX(0) translateY(0);
}
50% {
transform: translateX(-25%) translateY(calc(5px * sin(180deg)));
}
100% {
transform: translateX(-50%) translateY(calc(5px * sin(360deg)));
}
}
ì€ëª :
- 묌결 íšê³Œë¥Œ ìëŒëŽêž° ìíŽ
overflow: hidden
ì ê°ì§.wave
컚í ìŽë륌 ë§ëëë€. ::before
ê°ì ììê° ë¬Œê²° ì첎륌 ëíë ëë€.wave-move
ì ëë©ìŽì ìsin()
ì ì¬ì©íì¬ ë¬Œê²°ì ìì§ ì§ëì ë§ëëë€.
ì¬ì©ì ì ì: ì ëë©ìŽì
ì§ì ìê°, 묌결ì ì§í(5px
ê°), ììì ì¡°ì íì¬ ë¬Œê²° íšê³Œë¥Œ ì¬ì©ì ì ìí ì ììµëë€.
3. transform: matrix()
륌 ìŽì©í ìŽë¯žì§ ì곡
cos()
, sin()
, tan()
ê° `transform: matrix()` ëŽìì ì§ì ì¬ì©ëì§ë ìì§ë§, matrix íšìë ìŒê° íšì륌 êž°ë°ìŒë¡ 믞늬 ê³ì°ë ê°ìŒë¡ë¶í° í° ìŽì ì ì»ìµëë€. `matrix()` íšìë ë³íì ëí ë§€ì° ìžë°í ì ìŽë¥Œ ê°ë¥íê² íë©°, Ʞ볞 ìíì ìŽíŽí멎 ëšìí íì ìŽë í¬êž° ì¡°ì ì ëìŽìë ë³µì¡í ì곡ì 구íí ì ììµëë€.
.distorted-image {
width: 300px;
height: 200px;
background-image: url('image.jpg'); /* ì¬ë¬ë¶ì ìŽë¯žì§ë¡ êµì²Žíìžì */
background-size: cover;
transition: transform 0.3s ease;
}
.distorted-image:hover {
/*ìŽ ìì ë matrix ëŽìì ì§ì ìŒê° íšì륌 볎ì¬ì£Œì§ë ììµëë€. íì§ë§ ë ê³ êž ì¬ì©ë²ììë ë§ì°ì€ ìì¹, ì€í¬ë¡€ ìì¹ ëë ë€ë¥ž ë³ì륌 êž°ë°ìŒë¡ cos()ì sin()ì ì¬ì©íì¬ matrix ê°ì ê³ì°í ì ììµëë€.*/
transform: matrix(1, 0.2, 0.1, 1, 0, 0); /*ì ëš ë³íì ì*/
}
ì€ëª :
matrix()
íšìë 2D ë³í íë ¬ì ì ìíë 6ê°ì ê°ì ë°ìµëë€. ìŽ ê°ë€ì í¬êž° ì¡°ì , íì , êž°ìžìŽêž°, ìŽëì ì ìŽí©ëë€.- ìŽ ê°ë€ì ì ì€íê² ì¡°ì íšìŒë¡ìš ë€ìí ì곡 íšê³Œë¥Œ ì»ì ì ììµëë€. ì íëì륌 ìŽíŽíë ê²ìŽ matrix íšì륌 ë§ì€í°íë ë° ëììŽ ë©ëë€.
ê³ êž ì¬ì©ë² (ê°ë ):
ë§ì°ì€ ìì¹ì ë°ëŒ `matrix()` ê°ì ëì ìŒë¡ ê³ì°íë€ê³ ììíŽ ë³Žììì€. ë§ì°ì€ê° ìŽë¯žì§ì ê°ê¹ìì§ìë¡ ìê³¡ìŽ ë ëë ·íŽì§ëë€. ìŽë¥Œ ìíŽìë JavaScript륌 ì¬ì©íì¬ ë§ì°ì€ ì¢í륌 캡ì²íê³ `matrix()` íšìì ì
ë ¥í ì ì í cos()
ë° sin()
ê°ì ê³ì°íŽìŒ í©ëë€.
4. ë°ìí ëììž ë° ëì ë ìŽìì
ìŒê° íšìë ë°ìí ëììžì íµí©ëìŽ ë€ìí í멎 í¬êž°ì ì°ìíê² ì ìíë ë ìŽììì ë§ë€ ì ììµëë€. ì륌 ë€ìŽ, ë·°í¬íž ëë¹ì ë°ëŒ ìí ë©ëŽì ë°ì§ëŠì ì¡°ì íì¬ í¬ê³ ìì í멎 몚ëìì ë©ëŽê° ìê°ì ìŒë¡ ë§€ë ¥ì ìŽê³ êž°ë¥ì ìŒë¡ ì ì§ëëë¡ í ì ììµëë€.
:root {
--viewport-width: 100vw;
--min-radius: 50px;
--max-radius: 150px;
--calculated-radius: calc(var(--min-radius) + (var(--max-radius) - var(--min-radius)) * (var(--viewport-width) / 1000)); /* ìµë ë·°í¬íž ëë¹ë¥Œ 1000pxë¡ ê°ì */
}
.container {
position: relative;
width: 200px;
height: 200px;
}
.item {
position: absolute;
width: 30px;
height: 30px;
border-radius: 50%;
background-color: #3498db;
left: calc(50% + var(--calculated-radius) * cos(calc(var(--index) * (360deg / var(--item-count))))) - 15px); /* 15pxë ììŽí
ëë¹ì ì ë° */
top: calc(50% + var(--calculated-radius) * sin(calc(var(--index) * (360deg / var(--item-count))))) - 15px); /* 15pxë ììŽí
ëìŽì ì ë° */
}
ì€ëª :
- íì¬ ë·°í¬íž ëë¹ë¥Œ ì ì¥íêž° ìíŽ
--viewport-width
륌 ì¬ì©í©ëë€. --min-radius
ì--max-radius
ë ìì ìµì ë° ìµë ë°ì§ëŠì ì ìí©ëë€.--calculated-radius
ë ë·°í¬íž ëë¹ë¥Œ êž°ë°ìŒë¡ ìµì ë° ìµë ë°ì§ëŠ ì¬ìŽì ì í 볎ê°ì ì¬ì©íì¬ ë°ì§ëŠì ëì ìŒë¡ ê³ì°í©ëë€.- ì°œ í¬êž°ë¥Œ ì¡°ì íì¬ ë³ê²œ ì¬íì íìžíìžì.
믞ëìŽ ì¿ŒëŠ¬: 믞ëìŽ ì¿ŒëŠ¬ë¥Œ ì¬ì©íì¬ í¹ì ì€ëšì (breakpoint)ì ë°ëŒ CSS ë³ìì ê°ì ì¡°ì íšìŒë¡ìš ë°ìí ëìì ëì± ìžë°íê² ë€ë¬ì ì ììµëë€.
í곌 ëªšë² ì¬ë¡
- CSS ë³ì ì¬ì©: CSS ë³ì(ì¬ì©ì ì§ì ìì±)륌 ì¬ì©í멎 ìŒê° íšìì ì¬ì©ëë ê°ì ë ìœê² êŽëЬíê³ ì ë°ìŽíží ì ììµëë€. ìŽë ìœë ê°ë ì±ê³Œ ì ì§ë³Žìì±ì í¥ììíµëë€.
- ì±ë¥ ìµì í: ìŒê° íšì륌 í¬íšíë ë³µì¡í ì ëë©ìŽì
ì ê³ì°ëìŽ ë§ì ì ììµëë€. ê³ì° íì륌 ìµìííê³ ê°ë¥í ê²œì° íëìšìŽ ê°ì(ì:
transform: translateZ(0)
ì¬ì©)ì ì¬ì©íì¬ ìœë륌 ìµì ííìžì. - ë첎 ìëš ì ê³µ: ë€ìí ëžëŒì°ì ì§ììŒë¡ ìžíŽ, ìŒê° íšìê° ì§ìëì§ ìë 구í ëžëŒì°ì ë í겜ì ìíŽ ë첎 ë©ì»€ëìŠì ì ê³µíìžì. ìŽë ë ê°ëší CSS êž°ë²ì ì¬ì©íê±°ë ìê°ì íšê³Œë¥Œ ì ì§ì ìŒë¡ ì í(graceful degradation)ìí€ë ê²ì í¬íší ì ììµëë€.
- ì ê·Œì± ê³ ë €: ì¥ì ê° ìë ì¬ì©ì륌 í¬íší 몚ë ì¬ì©ìê° ëììžì ì ê·Œí ì ìëë¡ íìžì. 몚ë ì¬ëìŽ ìžì§í ì ìë ìê°ì íšê³Œìë§ ì졎íì§ ë§ìžì. ì 볎ì êž°ë¥ì ì ê·Œí ì ìë ë첎 ë°©ë²ì ì ê³µíìžì.
- ì² ì í í ì€íž: ìŒêŽë ëì곌 êžì ì ìž ì¬ì©ì 겜íì 볎ì¥íêž° ìíŽ ë€ìí ëžëŒì°ì , ì¥ì¹, í멎 í¬êž°ìì ëììžì í ì€ížíìžì.
CSS ë ìŽììì 믞ë
CSS ìŒê° íšìë CSS ë ìŽìì êž°ë¥ì ì§íì ììŽ ì€ìí ì§ì ì ëíë ëë€. ìŽë ê°ë°ìë€ìŽ ë ëì ìŽê³ , ìíì ìŒë¡ ì ë°íë©°, ìê°ì ìŒë¡ ë°ìŽë ì¹ ê²œíì ë§ë€ ì ìëë¡ íì ì€ìŽì€ëë€. ëžëŒì°ì ì§ììŽ ê³ìíŽì ê°ì ëê³ ê°ë°ìë€ìŽ ìŽ íšìë€ì ë ìµìíŽì§ì ë°ëŒ, ììŒë¡ ëì± íì ì ìŽê³ ì°œìì ìž ìì© íë¡ê·žëšì ë³Žê² ë ê²ìŒë¡ êž°ëë©ëë€. CSS ëŽìì ì§ì ìíì ì늬륌 íì©í ì ìë ë¥ë ¥ì ì¹ ëììžê³Œ ê°ë°ì í¥ë¯žë¡ìŽ ìë¡ìŽ ê°ë¥ì±ì ìŽìŽì€ëë€.
ê²°ë¡
CSS ìŒê° íšìë ê³ êžì€ëœê³ ìê°ì ìŒë¡ ë§€ë ¥ì ìž ì¹ ë ìŽììì ë§ë€êž° ìí ê°ë ¥í ë구 ìžížë¥Œ ì ê³µí©ëë€. ìíì ê°ë
ì ëí ìœê°ì ìŽíŽê° ë íìíì§ë§, ëììž ì ì°ì±ê³Œ ì¬ì©ì 겜í 잡멎ìì ì ì¬ì ìž ìŽì ì ìë¹í©ëë€. cos()
, sin()
, tan()
륌 ì€ííšìŒë¡ìš ì°œìì±ì ìë¡ìŽ ìì€ì ìŽê³ ì§ì ìŒë¡ ë
í¹íê³ ìížìì©ì ìž ì¹ ê²œíì 구ì¶í ì ììµëë€.
CSS ìŒê° íšìì íšê»íë ì¬ì ì ììí멎ì ëžëŒì°ì ížíì±, ì±ë¥ ìµì í, ì ê·Œì± ë° ì² ì í í ì€ížë¥Œ ì°ì ìíë ê²ì ìì§ ë§ììì€. ìŽë¬í ê³ ë € ì¬íì ìŒëì ë멎, íë ì¹ ê°ë°ì 겜ê³ë¥Œ ëíë ë§€ë ¥ì ìŽê³ ìíì ìŒë¡ 구ëëë ëììžì ë§ë€êž° ìíŽ ìŽ ê°ë ¥í íšìë€ì ìì ìê² íì©í ì ììµëë€.
ì€ííê³ ê°ë¥ì±ì íìíë ê²ì ëë €ìíì§ ë§ìžì. ìíì ìŒë¡ 구ëëë CSS ë ìŽììì ìžê³ë êŽëíê³ ì ì¬ë ¥ìŒë¡ ê°ë ì°š ììµëë€. ìŠê±°ìŽ ìœë© ëìžì!