CSSäžè§é¢æ°ïŒcos()ãsin()ãtan()ïŒã®åãæ¢æ±ããåçã§æ°åŠçã«æ£ç¢ºãªã¬ã€ã¢ãŠããäœæããŸããè€éãªã¢ãã¡ãŒã·ã§ã³ãã¬ã¹ãã³ã·ããã¶ã€ã³ãèŠèŠçã«é åçãªWebäœéšã«ãããã®é¢æ°ã掻çšããæ¹æ³ãåŠã³ãŸãããã
CSSäžè§é¢æ°ïŒã¢ãã³Webãã¶ã€ã³ã®ããã®æ°åŠçã¬ã€ã¢ãŠã
é·å¹ŽãCSSã¯ã¬ã€ã¢ãŠãäœæã«ããã¯ã¹ããŒã¹ã®ã¢ãã«ã䜿çšããŠããŸãããæè»ã§ã¯ãããŸããããããã®ã¢ãã«ã¯ãçã«åçã§ãæ°åŠçã«æ£ç¢ºã§ãææ©çãªåœ¢ç¶ã®ãã¶ã€ã³ãå¿
èŠãªå Žåã«ã¯ããã°ãã°åäžè¶³ã«ãªããŸããããã§ãCSSäžè§é¢æ°ïŒcos()
ãsin()
ãtan()
ãç»å ŽããŸãããããã®åŒ·åãªé¢æ°ã¯ããã¹ãŠCSSã®ç¯å²å
ã§ãè€éãªã¢ãã¡ãŒã·ã§ã³ãã¬ã¹ãã³ã·ããã¶ã€ã³ãèŠèŠçã«çŽ æŽãããWebäœéšãäœæããããã®æ°ããå¯èœæ§ã®äžçãéããŸãã
äžè§é¢æ°ã®çè§£
CSSã®å®è£ ã«å ¥ãåã«ãäžè§é¢æ°ã®åºæ¬ã埩ç¿ããŸããããæ°åŠã§ã¯ããããã®é¢æ°ã¯çŽè§äžè§åœ¢ã®è§åºŠãšèŸºã®é¢ä¿ã衚ããŸãã
- ã³ãµã€ã³ïŒcosïŒïŒé£æ¥ããèŸºãšæèŸºã®æ¯çã
- ãµã€ã³ïŒsinïŒïŒå¯ŸèŸºãšæèŸºã®æ¯çã
- ã¿ã³ãžã§ã³ãïŒtanïŒïŒå¯ŸèŸºãšé£æ¥ããèŸºã®æ¯çã
CSSã§ã¯ããããã®é¢æ°ã¯è§åºŠãå
¥åãšããŠåãåãïŒåºŠãã©ãžã¢ã³ãã¿ãŒã³ããŸãã¯ã°ã©ãŒãã§è¡šçŸïŒã-1ãã1ã®éã®å€ïŒcos()
ããã³sin()
ã®å ŽåïŒãŸãã¯ä»»æã®æ°å€ïŒtan()
ã®å ŽåïŒãè¿ããŸãããã®å€ã¯ãtransform
ãwidth
ãheight
ãleft
ãtop
ãªã©ã®CSSããããã£ã§äœ¿çšã§ããŸãã
ãã©ãŠã¶äºææ§
äžè§é¢æ°ã¯CSSã§ã¯æ¯èŒçæ°ããããã©ãŠã¶ã®ãµããŒãã¯ãŸã é²åããŠããŸãã2023幎åŸåãã2024幎åé çŸåšãChromeãFirefoxãSafariãEdgeãªã©ã®ã»ãšãã©ã®ææ°ãã©ãŠã¶ã§ãµããŒããå©çšå¯èœã§ãããããã®é¢æ°ãæ¬çªç°å¢ã§å®è£ ããåã«ãCan I useãªã©ã®Webãµã€ãã§ææ°ã®äºææ§è¡šã確èªããããšãéèŠã§ããå€ããã©ãŠã¶ã®å Žåã¯ãããªãã£ã«ãŸãã¯ãã©ãŒã«ããã¯ã®äœ¿çšãæ€èšããŠãã ããã
åºæ¬çãªæ§æ
CSSã§äžè§é¢æ°ã䜿çšããããã®æ§æã¯ç°¡åã§ãã
property: cos(angle);
property: sin(angle);
property: tan(angle);
ããã§ãangle
ã¯ããŸããŸãªåäœã§è¡šçŸã§ããŸãã
- degïŒåºŠïŒäŸïŒ
cos(45deg)
ïŒ - radïŒã©ãžã¢ã³ïŒäŸïŒ
sin(0.785rad)
ïŒ - turnïŒã¿ãŒã³ã®æ°ïŒäŸïŒ
cos(0.125turn)
- 45床ãšåçïŒ - gradïŒã°ã©ãŒãïŒäŸïŒ
tan(50grad)
- 45床ãšåçïŒ
å®è·µçãªã¢ããªã±ãŒã·ã§ã³ãšäŸ
1. å圢é 眮
äžè§é¢æ°ã®æãäžè¬çã§èŠèŠçã«é åçãªã¢ããªã±ãŒã·ã§ã³ã®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: '<angle>';
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 {
/*ãã®äŸã§ã¯ãè¡åå
ã«äžè§é¢æ°ãçŽæ¥è¡šç€ºããŠããŸããããã ããããé«åºŠãªäœ¿çšæ³ã§ã¯ãããŠã¹ã®äœçœ®ãã¹ã¯ããŒã«äœçœ®ããŸãã¯ãã®ä»ã®å€æ°ã«åºã¥ããŠãcos()ãšsin()ã䜿çšããŠè¡åå€ãèšç®ã§ããŸãã*/
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
ã¯ããã¥ãŒããŒãå¹ ã«åºã¥ããŠååŸãåçã«èšç®ããæå°ååŸãšæå€§ååŸã®éãç·åœ¢è£éããŸãã- ãŠã£ã³ããŠã®ãµã€ãºã倿ŽããŠã倿Žã確èªããŸã
ã¡ãã£ã¢ã¯ãšãªïŒã¡ãã£ã¢ã¯ãšãªã䜿çšããŠãç¹å®ã®ãã¬ãŒã¯ãã€ã³ãã«åºã¥ããŠCSS倿°ã®å€ã調æŽããããšã«ãããã¬ã¹ãã³ã·ããªåäœãããã«æŽç·Žãããããšãã§ããŸãã
ãã³ããšãã¹ããã©ã¯ãã£ã¹
- CSS倿°ã®äœ¿çšïŒCSS倿°ïŒã«ã¹ã¿ã ããããã£ïŒã䜿çšãããšãäžè§é¢æ°ã§äœ¿çšãããå€ãç°¡åã«ç®¡çããã³æŽæ°ã§ããŸããããã«ãããã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžããŸãã
- ããã©ãŒãã³ã¹ã®æé©åïŒäžè§é¢æ°ãå«ãè€éãªã¢ãã¡ãŒã·ã§ã³ã¯ãèšç®è² è·ãé«ããªãå¯èœæ§ããããŸããèšç®åæ°ãæå°éã«æããå¯èœãªå Žåã¯ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã䜿çšããïŒããšãã°ã
transform: translateZ(0)
ã䜿çšããïŒããšã§ãã³ãŒããæé©åããŸãã - ãã©ãŒã«ããã¯ã®æäŸïŒãã©ãŠã¶ã®ãµããŒããç°ãªããããäžè§é¢æ°ããµããŒããããŠããªãå€ããã©ãŠã¶ãŸãã¯ç°å¢ã«å¯ŸããŠãã©ãŒã«ããã¯ã¡ã«ããºã ãæäŸããŸããããã«ã¯ãããåçŽãªCSSãã¯ããã¯ã䜿çšããããèŠèŠå¹æãåŸã ã«äœäžããããããããšãå«ãŸããŸãã
- ã¢ã¯ã»ã·ããªãã£ã®èæ ®ïŒé害ã®ãããŠãŒã¶ãŒãå«ããã¹ãŠã®ãŠãŒã¶ãŒããã¶ã€ã³ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãããã¹ãŠã®äººãç¥èŠã§ãããšã¯éããªãèŠèŠå¹æã ãã«é Œããªãã§ãã ãããæ å ±ãšæ©èœã«ã¢ã¯ã»ã¹ããããã®ä»£æ¿ææ®µãæäŸããŸãã
- 培åºçãªãã¹ãïŒããŸããŸãªãã©ãŠã¶ãããã€ã¹ãç»é¢ãµã€ãºã§ãã¶ã€ã³ããã¹ãããŠãäžè²«ããåäœãšè¯å¥œãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããŸãã
CSSã¬ã€ã¢ãŠãã®æªæ¥
CSSäžè§é¢æ°ã¯ãCSSã¬ã€ã¢ãŠãæ©èœã®é²åã«ãããéèŠãªäžæ©ã衚ããŠããŸããããã«ãããéçºè ã¯ãããåçã§ãæ°åŠçã«æ£ç¢ºã§ãèŠèŠçã«çŽ æŽãããWebäœéšãäœæã§ããŸãããã©ãŠã¶ã®ãµããŒããåäžãç¶ããéçºè ããããã®é¢æ°ã«æ £ããŠãããšãå°æ¥çã«ã¯ããã«é©æ°çã§ã¯ãªãšã€ãã£ããªã¢ããªã±ãŒã·ã§ã³ãç»å Žããããšãäºæ³ãããŸãã CSSå ã§æ°åŠçåçãçŽæ¥æŽ»çšã§ããããšã¯ãWebãã¶ã€ã³ãšéçºã«æ°ããªå¯èœæ§ãåãéããŸãã
çµè«
CSSäžè§é¢æ°ã¯ãé«åºŠã§èŠèŠçã«é
åçãªWebã¬ã€ã¢ãŠããäœæããããã®åŒ·åãªããŒã«ã»ãããæäŸããŸããæ°åŠçæŠå¿µã«ã€ããŠããå°ãçè§£ããå¿
èŠã¯ãããŸããããã¶ã€ã³ã®æè»æ§ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®èгç¹ããã®æœåšçãªã¡ãªããã¯éèŠã§ããcos()
ãsin()
ãããã³tan()
ã詊ãããšã§ãæ°ããã¬ãã«ã®åµé æ§ãè§£ãæŸã¡ãçã«ãŠããŒã¯ã§ã€ã³ã¿ã©ã¯ãã£ããªWebäœéšãæ§ç¯ã§ããŸãã
CSSäžè§é¢æ°ã䜿ã£ãæ ã«åºããšãã¯ããã©ãŠã¶ã®äºææ§ãããã©ãŒãã³ã¹ã®æé©åãã¢ã¯ã»ã·ããªãã£ã培åºçãªãã¹ããåªå ããããšãå¿ããªãã§ãã ããããããã®èæ ®äºé ã念é ã«çœ®ããŠããããã®åŒ·åãªé¢æ°ãèªä¿¡ãæã£ãп޻çšããŠãææ°ã®Webéçºã®éçãæŒãåºãããé åçã§æ°åŠçã«é§åããããã¶ã€ã³ãäœæã§ããŸãã
å®éšããå¯èœæ§ãæ¢æ±ããããšãæããªãã§ãã ãããæ°åŠçã«é§åãããCSSã¬ã€ã¢ãŠãã®äžçã¯åºå€§ã§å¯èœæ§ã«æºã¡ãŠããŸããã³ãŒãã£ã³ã°ã楜ããã§ãã ããïŒ