Sassãªã©ã®ããªããã»ããµãããã€ãã£ãCSSãŸã§ãCSSããã¯ã¹ã€ã³ã®æŽ»çšæ³ã解説ãã³ãŒãã®åå©çšæ§ãä¿å®æ§ãé«ããå¹ççãªã¹ã¿ã€ãªã³ã°ãå®çŸããã°ããŒãã«Webéçºã®ãã¹ããã©ã¯ãã£ã¹ãåŠã³ãŸãã
CSS @applyã«ãŒã«ããã¹ã¿ãŒããïŒã°ããŒãã«Webéçºã«ãããããã¯ã¹ã€ã³æŽ»çšã®ããã®ç·åã¬ã€ã
åºå€§ã§é²åãç¶ããWebéçºã®äžçã§ã¯ãå¹çæ§ãä¿å®æ§ãã¹ã±ãŒã©ããªãã£ãæãéèŠã§ããCSSã¹ã¿ã€ã«ã·ãŒããè€éåããã«ã€ããŠãå埩çãªã³ãŒãã管çãã倿§ãªWebãããžã§ã¯ãéã§äžè²«æ§ã確ä¿ããããšã¯å€§ããªèª²é¡ãšãªããŸããããã§ãããã¯ã¹ã€ã³ããšããæŠå¿µã匷åãªè§£æ±ºçãšããŠç»å Žããã³ãŒãã®åå©çšæ§ãšåçåãããéçºã¯ãŒã¯ãããŒã®ããã®å ç¢ãªã¡ã«ããºã ãæäŸããŸãã
ãã®ç·åã¬ã€ãã§ã¯ãCSSããã¯ã¹ã€ã³ã®æŽ»çšã®äžçãæ·±ãæãäžãããã®åºæ¬ååã人æ°ã®CSSããªããã»ããµã䜿çšããå®è·µçãªå®è£
ããããŠãã€ãã£ãCSSã®@apply
ã«ãŒã«ã®æŽå²çèæ¯ãæ¢ããŸããããã¯ã¹ã€ã³ããéçºè
ãããã¯ãªãŒã³ã§ãæŽçãããä¿å®ããããCSSãæžãããšãã©ã®ããã«å¯èœã«ããããåæããŸããããã¯ãç°ãªãã¿ã€ã ãŸãŒã³ãæåçèæ¯ãæã€ããŒã ãååããäžçäžã§äžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããããã«äžå¯æ¬ ãªåŽé¢ã§ãã
CSSéçºã«ãããããã¯ã¹ã€ã³ã®åºæ¬æŠå¿µ
ããã¯ã¹ã€ã³ã®æ žå¿ã¯ãã¹ã¿ã€ã«ã·ãŒãå šäœã§åå©çšã§ããCSS宣èšã®ãããã¯ã§ããããã°ã©ãã³ã°èšèªã«ããã颿°ã®ãããªãã®ã ãšèããŠãã ããããã ããCSSã®ããã®ãã®ã§ããããŸããŸãªèŠçŽ ã«å¯ŸããŠåãããããã£ã®ã»ãããç¹°ãè¿ãå®çŸ©ãã代ããã«ãããã¯ã¹ã€ã³å ã§äžåºŠå®çŸ©ãããããã®ããããã£ãå¿ èŠãªå Žæã§ãã®ããã¯ã¹ã€ã³ãåçŽã«ãã€ã³ã¯ã«ãŒãããŸãã¯ãé©çšãããŸãããã®DRYïŒDon't Repeat YourselfïŒåãããšãç¹°ãè¿ããªïŒååã®éµå®ã¯ãçŸä»£çã§å¹ççãªWebéçºã®åºæ¬ã§ãã
ããã¯ã¹ã€ã³ãæ¡çšããäž»ãªåæ©ã¯æç¢ºã§ãã
-
åå©çšæ§ã®åäžïŒ å ±éã®ã¹ã¿ã€ã«ãäžåºŠå®çŸ©ããã©ãã«ã§ãé©çšããããšã§ãåé·æ§ãåæžããŸãã
-
ä¿å®æ§ã®æ¹åïŒ ã¹ã¿ã€ã«ãããã¯ãžã®å€æŽã¯ãããã¯ã¹ã€ã³ã®å®çŸ©ãšããäžç®æã§è¡ãã ãã§ãããããã¯ã¹ã€ã³ã䜿çšãããŠãããã¹ãŠã®å Žæã«èªåçã«åæ ãããŸããããã¯é·æçãªãããžã§ã¯ããå€§èŠæš¡ãªããŒã ã«ãšã£ãŠéåžžã«äŸ¡å€ããããŸãã
-
äžè²«æ§ã®åäžïŒ ãã¿ã³ã¹ã¿ã€ã«ãã¿ã€ãã°ã©ãã£ã¹ã¹ã±ãŒã«ãã¬ã€ã¢ãŠãæ§æãªã©ãé »ç¹ã«äœ¿çšããããã¶ã€ã³ãã¿ãŒã³ãæšæºåããããšã§ãWebãµã€ããã¢ããªã±ãŒã·ã§ã³å šäœã§çµ±äžãããã«ãã¯ã¢ã³ããã£ãŒã«ã確ä¿ããŸãã
-
ãã¡ã€ã«ãµã€ãºã®åæžïŒã³ã³ãã€ã«åŸïŒïŒ ããªããã»ããµã®ãœãŒã¹ãã¡ã€ã«ã«ã¯ããã¯ã¹ã€ã³å®çŸ©ãå«ãŸãããããããŸããããã³ã³ãã€ã«ãããCSSã¯ããè¯ãæ§æã®æ©æµãåããããšãå€ããæçµçãªãã¡ã€ã«ãµã€ãºã¯ããã¯ã¹ã€ã³ãäœåã€ã³ã¯ã«ãŒããããã©ãã ãå¹ççã«æžãããŠãããã«ãããŸãã
-
éçºã®é«éåïŒ äºåã«å®çŸ©ãããã¹ã¿ã€ã«ãããã¯ãæå ã«ããã°ãéçºè ã¯ã³ã³ããŒãã³ããããŒãžãã¯ããã«éãæ§ç¯ã§ããå埩çãªã¹ã¿ã€ãªã³ã°ã¿ã¹ã¯ã§ã¯ãªãããŠããŒã¯ãªåŽé¢ã«éäžã§ããŸãã
æŽå²çã«ãçŽç²ãªCSSã§ãã®ã¬ãã«ã®åå©çšæ§ãéæããããšã¯å°é£ã§ãããéçºè ã¯ãã°ãã°ãŠãŒãã£ãªãã£ã¯ã©ã¹ãè€éãªã»ã¬ã¯ã¿ãã§ãŒã³ã«é ŒããŸããããããã¯åé·ãªHTMLã管çãé£ããã¹ã¿ã€ã«ã·ãŒãã«ã€ãªããå¯èœæ§ããããŸãããCSSããªããã»ããµã®ç»å Žã¯ãããé©åœçã«å€ããæè¿ã§ã¯ã«ã¹ã¿ã ããããã£ã®ãããªãã€ãã£ãCSSæ©èœããå埩çãªã¹ã¿ã€ã«ã管çããããã®æ°ããéãæäŸããŠããŸãã
CSSããªããã»ããµã«ãããããã¯ã¹ã€ã³ïŒåå©çšæ§ã®ååå
SassïŒSyntactically Awesome Style SheetsïŒãLessãStylusã®ãããªCSSããªããã»ããµã¯ã倿°ã颿°ããããŠæ±ºå®çã«éèŠãªããã¯ã¹ã€ã³ãå«ãããã°ã©ãã³ã°ã®ãããªæ©èœã§CSSãæ¡åŒµããããã®ããŒã«ãšããŠé·å¹Žå©çšãããŠããŸãããæ§æã¯ç°ãªããŸãããããã¯ã¹ã€ã³ã«å¯Ÿããåºæ¬çãªå²åŠã¯éåžžã«äŒŒãŠããŸããã€ãŸããåå©çšå¯èœãªã¹ã¿ã€ã«ãããã¯ãå®çŸ©ãããããã€ã³ã¯ã«ãŒãããããšãããã®ã§ãã
Sassããã¯ã¹ã€ã³ïŒãã®æŽ»çšæ³ãæ·±ãæãäžãã
æã人æ°ãããæ©èœè±å¯ãªããªããã»ããµã®äžã€ã§ããSassã¯ãå ç¢ãªããã¯ã¹ã€ã³ã·ã¹ãã ãæäŸããŸããåŒæ°ãããã©ã«ãå€ãã³ã³ãã³ããããã¯ãéããŠæè»æ§ãæäŸããç¡æ°ã®ãŠãŒã¹ã±ãŒã¹ã«å¯ŸããŠéåžžã«åŒ·åã§ãã
åºæ¬çãªããã¯ã¹ã€ã³ã®å®çŸ©
Sassã®ããã¯ã¹ã€ã³ã¯@mixin
ãã£ã¬ã¯ãã£ããšããã«ç¶ãååã§å®çŸ©ãããŸãããã®ååã¯éåžžãæç¢ºãã®ããã«ã±ããã±ãŒã¹ïŒkebab-caseïŒã䜿çšããŸãã
äŸïŒåºæ¬çãªäžå€®é 眮ããã¯ã¹ã€ã³
@mixin center-element {
display: flex;
justify-content: center;
align-items: center;
}
ãã®ã·ã³ãã«ãªããã¯ã¹ã€ã³ã¯ãFlexboxã䜿çšããŠèŠçŽ ãäžå€®ã«é 眮ããããã«å¿ èŠãªå ±éã®ããããã£ãã«ãã»ã«åããŠããŸããããã¯ã¹ã€ã³ããªããã°ãäœããäžå€®ã«é 眮ããå¿ èŠããããã³ã«ããããã®3è¡ãç¹°ãè¿ãããšã«ãªããŸãã
ããã¯ã¹ã€ã³ã®ã€ã³ã¯ã«ãŒã
å®çŸ©ãããããã¯ã¹ã€ã³ã䜿çšããã«ã¯ãCSSã«ãŒã«å
ã§@include
ãã£ã¬ã¯ãã£ãã䜿çšããŸããã³ã³ãã€ã«ããããšãããªããã»ããµã¯@include
åŒã³åºããããã¯ã¹ã€ã³ã®å®éã®CSS宣èšã«çœ®ãæããŸãã
äŸïŒäžå€®é 眮ããã¯ã¹ã€ã³ã®ã€ã³ã¯ã«ãŒã
.card {
width: 300px;
height: 200px;
background-color: #f0f0f0;
@include center-element;
}
.modal {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
@include center-element;
}
ã³ã³ãã€ã«ããããšã.card
ã¯ã©ã¹ã®CSSåºåã¯æ¬¡ã®ããã«ãªããŸãã
.card {
width: 300px;
height: 200px;
background-color: #f0f0f0;
display: flex;
justify-content: center;
align-items: center;
}
ããã¯ããã¯ã¹ã€ã³ã®åºæ¬çãªåã瀺ããŠããŸããæžãã¹ãè¡ãå°ãªãã管çã容æã«ãªããŸãã
åŒæ°ä»ãããã¯ã¹ã€ã³ïŒåçãªã¹ã¿ã€ãªã³ã°
ããã¯ã¹ã€ã³ã®ç䟡ã¯ãåçãªå€ãåãå ¥ããããšãå¯èœã«ããåŒæ°ãå°å ¥ãããšãã«çŸããŸããããã«ãããéåžžã«æè»ã§é©å¿æ§ã®é«ãã¹ã¿ã€ã«ãããã¯ãäœæã§ããŸãã
äœçœ®åŒæ°
åŒæ°ã¯ã颿°ã®ãã©ã¡ãŒã¿ãšåæ§ã«ãããã¯ã¹ã€ã³åã®åŸã®æ¬åŒ§å ã«å®çŸ©ãããŸããããã¯ã¹ã€ã³ãã€ã³ã¯ã«ãŒããããšãã¯ãåãé åºã§å€ãæž¡ããŸãã
äŸïŒåçãªãã¿ã³ã¹ã¿ã€ã«
@mixin button-styles($bg-color, $text-color, $padding) {
display: inline-block;
padding: $padding;
background-color: $bg-color;
color: $text-color;
border: none;
border-radius: 5px;
cursor: pointer;
text-decoration: none;
font-weight: bold;
}
.btn-primary {
@include button-styles(#007bff, #fff, 10px 20px);
}
.btn-secondary {
@include button-styles(#6c757d, #fff, 8px 16px);
}
ãã®ããã¯ã¹ã€ã³ã«ãããèæ¯è²ãããã¹ãè²ãããã£ã³ã°ã«ç°ãªãåŒæ°ãæå®ããã ãã§ãããŸããŸãªãã¿ã³ã¹ã¿ã€ã«ãçæã§ããå埩çãªã³ãŒããåçã«åæžã§ããŸãã
ããŒã¯ãŒãåŒæ°ãšããã©ã«ãå€
Sassã¯ããŒã¯ãŒãåŒæ°ããµããŒãããŠãããååã§å€ãæž¡ãããšãã§ãããããç¹ã«åŒæ°ãå€ãããã¯ã¹ã€ã³ã§å¯èªæ§ãåäžããŸãããŸããåŒæ°ã«ããã©ã«ãå€ãå²ãåœãŠãããšã§ãããã¯ã¹ã€ã³ãã€ã³ã¯ã«ãŒãããéã«ãããããªãã·ã§ã³ã«ããããšãã§ããŸãã
äŸïŒããã©ã«ãå€ä»ãã®ã¬ã¹ãã³ã·ãã¿ã€ãã°ã©ãã£ããã¯ã¹ã€ã³
@mixin responsive-text($font-size, $line-height: 1.5, $color: #333) {
font-size: $font-size;
line-height: $line-height;
color: $color;
}
.hero-heading {
@include responsive-text(48px, 1.2, #1a1a1a);
}
.body-text {
@include responsive-text(16px);
/* line-heightã¯1.5ãcolorã¯#333ãããã©ã«ã */
}
.caption {
@include responsive-text($font-size: 14px, $color: #777);
/* line-heightã¯1.5ãããã©ã«ã */
}
ããã©ã«ãå€ã¯ãé©åãªãã©ãŒã«ããã¯ãæäŸããäžè¬çãªã·ããªãªã§æž¡ãå¿ èŠãããåŒæ°ã®æ°ãæžããã®ã«éåžžã«åœ¹ç«ã¡ãŸããããŒã¯ãŒãåŒæ°ã¯ãåŒæ°ã®é åºãããã«ããããªãå Žåã«ç¹ã«æç¢ºããé«ããŸãã
å¯å€é·åŒæ°ã®ããã®Rest ArgumentsïŒ...
ïŒ
ããã¯ã¹ã€ã³ãä»»æã®æ°ã®åŒæ°ãåãå
¥ããå¿
èŠãããã·ããªãªã®ããã«ãSassã¯...
ã䜿çšããRest ArgumentsïŒå¯å€é·åŒæ°ïŒãæäŸããŸããããã¯ãbox-shadow
ãtext-shadow
ã®ããã«è€æ°ã®å€ãåãå
¥ããããããã£ã«ç¹ã«äŸ¿å©ã§ãã
äŸïŒæè»ãªã·ã£ããŠããã¯ã¹ã€ã³
@mixin multi-shadow($shadows...) {
box-shadow: $shadows;
}
.element-with-shadow {
@include multi-shadow(0 2px 4px rgba(0,0,0,0.1), 0 8px 16px rgba(0,0,0,0.2));
}
.another-element {
@include multi-shadow(inset 0 0 10px red);
}
ãã®ããã¯ã¹ã€ã³ã¯ãæž¡ãããä»»æã®æ°ã®ã·ã£ããŠå®çŸ©ãæè»ã«åŠçããããããçŽæ¥box-shadow
ããããã£ã«ã³ã³ãã€ã«ããŸãã
ã³ã³ãã³ãä»ãããã¯ã¹ã€ã³ïŒã¹ã¿ã€ã«ãããã¯ã®åãæž¡ã
Sassã®@content
ãã£ã¬ã¯ãã£ãã¯ãCSSã«ãŒã«ã宣èšã®ãããã¯ãçŽæ¥ããã¯ã¹ã€ã³ã«æž¡ãããšãã§ãã匷åãªæ©èœã§ããããã¯ãç¹å®ã®ã¹ã¿ã€ã«ãé©çšãã¹ãã©ãããŒãç¹å®ã®ã³ã³ããã¹ããäœæããã®ã«éåžžã«äŸ¡å€ããããŸãã
äŸïŒã³ã³ãã³ãä»ãã¡ãã£ã¢ã¯ãšãªããã¯ã¹ã€ã³
@mixin breakpoint($point) {
@if $point == desktop {
@media (min-width: 1024px) {
@content;
}
} @else if $point == tablet {
@media (min-width: 768px) and (max-width: 1023px) {
@content;
}
} @else if $point == mobile {
@media (max-width: 767px) {
@content;
}
}
}
.my-component {
width: 100%; /* ããã©ã«ãã¯ã¢ãã€ã«ãã¡ãŒã¹ã */
@include breakpoint(tablet) {
width: 75%;
margin: 0 auto;
}
@include breakpoint(desktop) {
width: 50%;
max-width: 960px;
margin: 0 auto;
}
}
ãã®äŸã§ã¯ã@mixin breakpoint
å
ã®@content
ãã£ã¬ã¯ãã£ãã«ãããã³ã³ããŒãã³ãã®ã«ãŒã«ã»ããå
ã§çŽæ¥ãç°ãªãç»é¢ãµã€ãºçšã®ç¹å®ã®ã¹ã¿ã€ã«ãå®çŸ©ã§ããã¡ãã£ã¢ã¯ãšãªãé¢é£ã³ã³ããŒãã³ãã«å±æåã§ããŸãããã®ãã¿ãŒã³ã¯ãã¬ã¹ãã³ã·ããã¶ã€ã³ã管çããç¹ã«ã°ããŒãã«ããŒã ã§äžè¬çãªã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ã«ãããŠã¹ã¿ã€ã«ã·ãŒãã®å¯èªæ§ãåäžãããããã«éåžžã«äººæ°ããããŸãã
é«åºŠãªããã¯ã¹ã€ã³ã®ãã¿ãŒã³ãšèæ ®äºé
ããã¯ã¹ã€ã³ã¯ä»ã®Sassæ©èœãšçµã¿åãããããšã§ãããã«æŽç·Žãããåçãªã¹ã¿ã€ã«ãäœæã§ããŸãã
ããã¯ã¹ã€ã³å ã®æ¡ä»¶ä»ãããžãã¯
ããã¯ã¹ã€ã³å
ã§@if
ã@else if
ã@else
ãã£ã¬ã¯ãã£ãã䜿çšããŠãæ¡ä»¶ã«åºã¥ããŠã¹ã¿ã€ã«ãé©çšã§ããŸããããã«ãããé«åºŠã«èšå®å¯èœãªããã¯ã¹ã€ã³ãå¯èœã«ãªããŸãã
äŸïŒããŒã察å¿ã®ãã¿ã³ããã¯ã¹ã€ã³
@mixin themed-button($theme: default) {
@if $theme == default {
background-color: #007bff;
color: #fff;
} @else if $theme == dark {
background-color: #343a40;
color: #fff;
} @else if $theme == light {
background-color: #f8f9fa;
color: #333;
border: 1px solid #ddd;
} @else {
@warn "Unknown theme #{$theme} used in themed-button mixin.";
background-color: #ccc;
color: #000;
}
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
}
.btn-buy {
@include themed-button(dark);
}
.btn-checkout {
@include themed-button(light);
}
ãã®ããã¯ã¹ã€ã³ã¯ãæå®ãããããŒãã«åºã¥ããŠç°ãªããã¿ã³ã¹ã¿ã€ã«ãæäŸããèŠèŠçãªããªãšãŒã·ã§ã³ãäžè²«ããŠç®¡çããããã®å ç¢ãªæ¹æ³ãæäŸããŸãã
ããã¯ã¹ã€ã³å ã®ã«ãŒã
Sassã®ã«ãŒãïŒ@for
ã@each
ã@while
ïŒã¯ããã¯ã¹ã€ã³ã«çµ±åããŠãã¹ããŒã·ã³ã°ãŠãŒãã£ãªãã£ãã«ã©ã ã°ãªãããªã©ãå埩çãªã¹ã¿ã€ã«ãããã°ã©ã ã§çæã§ããŸãã
äŸïŒã«ãŒãã䜿ã£ãã¹ããŒã·ã³ã°ãŠãŒãã£ãªãã£ããã¯ã¹ã€ã³
@mixin generate-spacing-utilities($max: 5, $step: 5px) {
@for $i from 1 through $max {
$value: $i * $step;
.margin-#{$i} {
margin: $value;
}
.padding-#{$i} {
padding: $value;
}
}
}
@include generate-spacing-utilities(5, 10px);
/* ããã¯.margin-1 { margin: 10px; }ãã.margin-5 { margin: 50px; }ãŸã§ã®ã¯ã©ã¹ãçæããŸã */
ãã®ããã¯ã¹ã€ã³ã¯ãäžè²«ããã¹ããŒã·ã³ã°ã®ããã®äžé£ã®ãŠãŒãã£ãªãã£ã¯ã©ã¹ãçæããæäœæ¥ãå€§å¹ ã«åæžããçµ±äžããããã¶ã€ã³ã·ã¹ãã ãä¿èšŒããŸãããã®ãããªãŠãŒãã£ãªãã£ã¯ã©ã¹ã¯ãéçºè ãæšæºåãããã¹ããŒã·ã³ã°å€ã«è¿ éã«ã¢ã¯ã»ã¹ããå¿ èŠããããå€§èŠæš¡ã§ã°ããŒãã«ã«åæ£ãããããžã§ã¯ãã§éåžžã«äŸ¡å€ããããŸãã
ããã¯ã¹ã€ã³ vs 颿° vs ãã¬ãŒã¹ãã«ãïŒ%extend
ïŒ
Sassã¯ããã¯ã¹ã€ã³ã«äŒŒãŠããããã«èŠããä»ã®æ©èœãæäŸããŸãããããããç°ãªãç®çãæãããŸãã
-
颿°ïŒ Sassã®é¢æ°ïŒ
@function
ã§å®çŸ©ïŒã¯ãåäžã®å€ãèšç®ããŠè¿ããŸããèšç®ãè²ã®æäœãæååæäœã«äœ¿çšãããŸããçŽæ¥CSSãåºåããŸãããäžæ¹ãããã¯ã¹ã€ã³ã¯CSSããããã£ãåºåããŸããäŸïŒé¢æ° vs ããã¯ã¹ã€ã³
@function px-to-rem($px) { @return $px / 16px * 1rem; /* 颿°ã¯èšç®ãããå€ãè¿ã */ } .element { font-size: px-to-rem(24px); } @mixin custom-heading($font-size) { font-size: $font-size; /* ããã¯ã¹ã€ã³ã¯CSSãåºåãã */ font-weight: bold; } .page-title { @include custom-heading(px-to-rem(32px)); }
-
ãã¬ãŒã¹ãã«ãïŒ
%extend
ïŒïŒ ãã¬ãŒã¹ãã«ãã»ã¬ã¯ã¿ïŒäŸïŒ%button-base
ïŒã¯ãåå©çšå¯èœãªã¹ã¿ã€ã«ãããã¯ãå«ãç¹ã§ããã¯ã¹ã€ã³ã«äŒŒãŠããŸããã@extend
ãã£ã¬ã¯ãã£ãã䜿çšããŠæ¡åŒµãããããã«èšèšãããŠããŸããã€ã³ã¯ã«ãŒãããããã³ã«CSS宣èšãè€è£œããããã¯ã¹ã€ã³ãšã¯ç°ãªãã@extend
ã¯ã»ã¬ã¯ã¿ãè³¢ãã°ã«ãŒãåããéè€ãé²ãããšã§ã³ã³ãã€ã«åŸã®CSSãå°ããããå¯èœæ§ããããŸãããããã@extend
ã¯ãç¹ã«è€éãªãã¹ããããã»ã¬ã¯ã¿ã§äžé©åã«äœ¿çšããããšãäºæããªãã»ã¬ã¯ã¿åºåããã¡ã€ã«ãµã€ãºã®å¢å€§ã«ã€ãªããããšããããŸããããã¯ã¹ã€ã³ã¯äžè¬çã«åå¥ã®ããããã£ãããã¯ãã€ã³ã¯ã«ãŒãããããã«å¥œãŸãã@extend
ã¯é¢é£ã³ã³ããŒãã³ãéã§å ±éã®ããŒã¹ã¹ã¿ã€ã«ãå ±æããã®ã«ããé©ããŠããŸããäŸïŒããã¯ã¹ã€ã³ vs Extend
@mixin alert-style { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; } %message-base { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; } .alert-success { @include alert-style; background-color: #d4edda; color: #155724; } .message-error { @extend %message-base; background-color: #f8d7da; color: #721c24; }
.alert-success
ã®ã³ã³ãã€ã«æžã¿åºåã¯alert-style
ã®ããããã£ãè€è£œããŸãã.message-error
ã®å Žåã%message-base
ã®ããããã£ã¯.message-error
ã»ã¬ã¯ã¿ãšã°ã«ãŒãåãããŸãã/* ããã¯ã¹ã€ã³ã®ã³ã³ãã€ã«æžã¿åºå */ .alert-success { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; background-color: #d4edda; color: #155724; } /* extendã®ã³ã³ãã€ã«æžã¿åºå */ .message-error, .some-other-class-that-extends-it { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; } .message-error { background-color: #f8d7da; color: #721c24; }
ããã¯ã¹ã€ã³ãš
@extend
ã®ã©ã¡ããéžæãããã¯ãå€ãã®å Žåãç¹å®ã®ã·ããªãªã«äŸåããŸããããã¯ã¹ã€ã³ã¯åå¥ã§ãã©ã¡ãŒã¿åå¯èœãªããããã£ãããã¯ã«ã@extend
ã¯éè€ãæå°éã«æããããšãéèŠãªå Žåã«ç°ãªãã»ã¬ã¯ã¿éã§ããŒã¹ã«ãŒã«ã»ãããå ±æããããã«äœ¿çšããŸãã
LessãšStylusã®ããã¯ã¹ã€ã³
Sassã¯åºãæ¡çšãããŠããŸãããLessãšStylusãåæ§ã®ããã¯ã¹ã€ã³æ©èœãæäŸããŠããŸãã
-
Lessã®ããã¯ã¹ã€ã³ïŒ Lessã§ã¯ãããã¯ã¹ã€ã³ã¯åºæ¬çã«åŒã³åºãããšãã§ããCSSã«ãŒã«ã»ããã§ããéåžžã®CSSã¯ã©ã¹ãIDã®ããã«å®çŸ©ãããå¥ã®ã«ãŒã«ã»ããå ã§ãã®ååãåŒã³åºãã ãã§ã€ã³ã¯ã«ãŒããããŸããLessã®ããã¯ã¹ã€ã³ãåŒæ°ãããã©ã«ãå€ãåãå ¥ããããšãã§ããŸãã
äŸïŒLessã®ããã¯ã¹ã€ã³
.border-radius(@radius: 5px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } #header { .border-radius(10px); } .footer { .border-radius(); /* ããã©ã«ãã®5pxãäœ¿çš */ }
Lessã«ã¯ãã©ã¡ããªãã¯ããã¯ã¹ã€ã³ïŒåŒæ°ãæã€ãã®ïŒãã¬ãŒãä»ãããã¯ã¹ã€ã³ïŒ
when
ããŒã¯ãŒãã䜿çšããæ¡ä»¶ä»ãããã¯ã¹ã€ã³ïŒããããŸãã -
Stylusã®ããã¯ã¹ã€ã³ïŒ Stylusã¯ãããããæãæè»ãªæ§æãæäŸããæ¬åŒ§ãã³ãã³ãçç¥ã§ããŸããããã¯ã¹ã€ã³ã¯ã€ã³ã¯ã«ãŒãã§ããã³ãŒãã®ãããã¯ã«ãããŸãããStylusãåŒæ°ãããã©ã«ãå€ãã³ã³ãã³ããããã¯ã«äŒŒãæŠå¿µïŒSassã®ãããªæç€ºçãª
@content
ãã£ã¬ã¯ãã£ãã§ã¯ãªãããããã¯åŒæ°ãéããŠïŒããµããŒãããŠããŸããäŸïŒStylusã®ããã¯ã¹ã€ã³
border-radius(radius = 5px) -webkit-border-radius radius -moz-border-radius radius border-radius radius #header border-radius 10px .footer border-radius
Stylusã®æ§æã®æè»æ§ã¯ãéåžžã«ç°¡æœãªã³ãŒãã«ã€ãªããããšããããŸãã
ã©ã®ããªããã»ããµã䜿çšãããã«ããããããäžå¿çãªå©ç¹ã¯åãã§ããå埩çãªCSSãåå©çšå¯èœãªãããã¯ã«æœè±¡åããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³çšã®å€§èŠæš¡ã§é²åããã¹ã¿ã€ã«ã·ãŒãã®ç®¡çãå€§å¹ ã«æ¯æŽããããšã§ãã
ãã€ãã£ãCSSã®@apply
ã«ãŒã«ïŒæŽå²çèŠç¹ãšçŸç¶
ããªããã»ããµã®ããã¯ã¹ã€ã³ã¯ããã³ããšã³ãéçºã®ç¢ºç«ãããäžå¯æ¬ ãªéšåã§ãããCSSã¯ãŒãã³ã°ã°ã«ãŒãã¯ãã€ãã£ãCSSã«åæ§ã®åå©çšæ§ãããããæ¹æ³ã暡玢ããŸãããããããCSSã«ã¹ã¿ã ããããã£ïŒCSS倿°ïŒãšé£æºããŠåäœããããã«èšèšããã@apply
ã«ãŒã«ã®ææ¡ã«ã€ãªãããŸããã
ææ¡ããã@apply
ã«ãŒã«ãšã¯äœã ã£ãã®ãïŒ
CSSã®@apply
ã«ãŒã«ã¯ãäœæè
ãã«ã¹ã¿ã ããããã£ã»ãããå®çŸ©ãããããèŠçŽ ã«é©çšã§ããããã«ããããšãç®çãšããå®éšçãªCSSæ©èœã§ãããæ¬è³ªçã«ãã«ã¹ã¿ã ããããã£çšã®ãã€ãã£ãCSSããã¯ã¹ã€ã³ãšããŠæ©èœãããã®ã§ãããããã¯æ¬¡ã®ãããªãã®ã§ããã
äŸïŒææ¡ããããã€ãã£ã@apply
ïŒå»æ¢æžã¿ïŒ
:root {
--brand-button-theme: {
background-color: #007bff;
color: #fff;
padding: 10px 20px;
border-radius: 5px;
};
}
.my-button {
@apply --brand-button-theme;
font-weight: bold;
text-transform: uppercase;
}
ãã®ã¢ã€ãã¢ã¯é
åçã§ãããã«ã¹ã¿ã ããããã£æ§æã䜿çšããŠååä»ãã®ããããã£ã»ããïŒãããã¯ã¹ã€ã³ããŸãã¯ãããããã£ã»ãããïŒãå®çŸ©ããããã@apply
ã䜿çšããŠã€ã³ã¯ã«ãŒããããããã«ãããããªããã»ããµãå¿
èŠãšããã«ãCSS宣èšã®æã管çãããã€ãã£ããªæ¹æ³ãæäŸãããã¯ãã§ããã
ãªãææ¡ããããªã廿¢ãããã®ã
@apply
ã®èåŸã«ããåæ©ã¯æç¢ºã§ãããåãCSS宣èšã®ãããã¯ãç¹°ãè¿ãåé¡ã解決ããããšã§ããCSSã«ã¹ã¿ã ããããã£ïŒäŸïŒ--main-color: blue; color: var(--main-color);
ïŒã¯*å€*ã®åå©çšãå¯èœã«ããŸãããããèªäœã§ã¯*ããããã£ã®ã°ã«ãŒã*ã®åå©çšã¯ã§ããŸããã@apply
ã¯ãã®ã®ã£ãããåããCSSã®ãããŒã·ã£ã«ããŸãã¯ãããã¯ã¹ã€ã³ãã®äžåœ¢æ
ããã€ãã£ãã«ãã©ãŠã¶ã«ããããããšãæå³ããŠããŸããã
ãããã@apply
ã«ãŒã«ã¯æçµçã«å»æ¢ãããCSS仿§ããåé€ãããŸããããã®å»æ¢ã®äž»ãªçç±ã«ã¯ä»¥äžãå«ãŸããŸãã
-
è€éããšããã©ãŒãã³ã¹ïŒ ãã©ãŠã¶ã§
@apply
ãå¹ççã«å®è£ ããããšã¯äºæ³ä»¥äžã«è€éã§ããããšã倿ããŸãããç¹ã«ãé©çšãããããããã£ã»ãããžã®å€æŽãã©ã®ããã«ã«ã¹ã±ãŒãããã¬ã€ã¢ãŠã/ãã€ã³ãæäœãããªã¬ãŒãããã«é¢ããŠã§ãã -
ä»ã®æ©èœãšã®éè€ïŒ é²åããCSSã«ã¹ã¿ã ããããã£èªäœã®æ©èœããã«ã¹ã¿ã ããããã£ã®æ¹åãæ°ãããã€ãã£ãæ©èœãéããããå ç¢ãªãœãªã¥ãŒã·ã§ã³ã®å¯èœæ§ãšãããªãã®éè€ããããŸããã
-
æ§æäžã®æžå¿µïŒ æ§æãã»ãã³ãã£ã¯ã¹ãäžæ Œå¥œã§ããããã°ãå°é£ãªã«ã¹ã±ãŒãã®åé¡ã«ã€ãªããå¯èœæ§ããããšæãã人ãããŸããã
çŸåšããã€ãã£ãCSSã®@apply
ã«ãŒã«ã¯æšæºã®äžéšã§ã¯ãªããæ¬çªç°å¢ã§äœ¿çšãã¹ãã§ã¯ãããŸããããã©ãŠã¶ã®ãµããŒãã¯æå°éã§ãããåé€ãããŠããŸãã
ãã€ãã£ãCSSã«ãããçŸåšã®ä»£æ¿æ¡
@apply
ã¯ãªããªããŸãããããã€ãã£ãCSSã¯äž»ã«CSSã«ã¹ã¿ã ããããã£ã®å
ç¢ãªäœ¿çšãšæŠç¥çãªã³ã³ããŒãã³ãèšèšãéããŠãåå©çšæ§ã®ããã®åŒ·åãªä»£æ¿æ¡ãæäŸããããã«é²åããŸããã
CSSã«ã¹ã¿ã ããããã£ïŒCSS倿°ïŒ
ã«ã¹ã¿ã ããããã£ã䜿çšãããšãåå©çšå¯èœãªå€ãå®çŸ©ã§ãããããè€æ°ã®CSSããããã£ã«é©çšããããèšç®ã«äœ¿çšãããã§ããŸããããããã£ãã°ã«ãŒãåããããšã¯ã§ããŸãããããã¶ã€ã³ããŒã¯ã³ãã°ããŒãã«ãªããŒã倿°ã管çããã®ã«éåžžã«å¹æçã§ãã
äŸïŒã«ã¹ã¿ã ããããã£ã«ããå€ã®åå©çš
:root {
--primary-color: #007bff;
--text-color-light: #f8f9fa;
--button-padding: 10px 20px;
--border-radius-default: 5px;
}
.btn-primary {
background-color: var(--primary-color);
color: var(--text-color-light);
padding: var(--button-padding);
border-radius: var(--border-radius-default);
/* ... ãã®ä»ã®ãããã㣠... */
}
.card-header {
background-color: var(--primary-color);
padding: var(--button-padding);
border-radius: var(--border-radius-default) var(--border-radius-default) 0 0;
/* ... */
}
ãã®ã¢ãããŒãã¯å¹æçã«å€ãäžå åããåäžã®ã«ã¹ã¿ã ããããã£ã倿Žããã ãã§Webãµã€ãå šäœã®ãã©ã€ããªã«ã©ãŒãããã£ã³ã°ãç°¡åã«å€æŽã§ããŸããããã¯ãã°ããŒãã«ãªãã©ã³ãã£ã³ã°ãããŒãèšå®ã«éåžžã«æçã§ãããç°ãªãå°åã®ãã¶ã€ã³ã®å¥œã¿ãå£ç¯ã®ãã£ã³ããŒã³ã«è¿ éã«å¯Ÿå¿ã§ããŸãã
ãŠãŒãã£ãªãã£ã¯ã©ã¹ãšã³ã³ããŒãã³ãããŒã¹ã®CSS
ããããã£ãã°ã«ãŒãåããããã®æšæºçãªãã€ãã£ãCSSã®ã¢ãããŒãã¯ãäŸç¶ãšããŠãŠãŒãã£ãªãã£ã¯ã©ã¹ãŸãã¯æç¢ºã«å®çŸ©ãããã³ã³ããŒãã³ãã¯ã©ã¹ã®äœ¿çšã§ããBootstrapãTailwind CSSãªã©ã®ãã¬ãŒã ã¯ãŒã¯ã¯ããã®ãã¿ãŒã³ã倧ãã«æŽ»çšããŠããŸãã
äŸïŒåå©çšæ§ã®ããã®ãŠãŒãã£ãªãã£ã¯ã©ã¹
/* CSS */
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.btn {
display: inline-block;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
}
.btn-primary {
background-color: blue;
color: white;
}
/* HTML */
ããã¯ã¹ã¿ã€ãªã³ã°ã®è²¬ä»»ã®äžéšãHTMLã«ç§»ãããšã«ãªããŸããïŒã¯ã©ã¹ã远å ããããšã§ïŒãçŽç²ãªCSSã§åå©çšå¯èœãªã¹ã¿ã€ã«ãããã¯ã管çããããã®åºãåãå ¥ããããŠãããéåžžã«ããã©ãŒãã³ã¹ã®é«ãæ¹æ³ã§ããããã¯ãã³ã³ããŒãã³ãããŒã¹ã®éçºãæšé²ããReactãVueãAngularãªã©ã®çŸä»£çãªJavaScriptãã¬ãŒã ã¯ãŒã¯ãšã·ãŒã ã¬ã¹ã«çµ±åãããŸãã
é©åãªã¢ãããŒãã®éžæïŒããªããã»ããµ vs ãã€ãã£ãCSS
ããªããã»ããµãšãã€ãã£ãCSSæ©èœã®äž¡æ¹ã®åŒ·ã¿ãèãããšãããã¯ã¹ã€ã³ã®ãããªæ©èœã«ã©ã®ã¢ãããŒãã䜿çšãããã¯ããããžã§ã¯ãã®èŠä»¶ãããŒã ã®ç¿ç床ãå¿ èŠãªã¹ã¿ã€ãªã³ã°ã®è€éãã«ãã£ãŠæ±ºãŸããŸãã
ããªããã»ããµã®ããã¯ã¹ã€ã³ã䜿çšããå Žå
-
è€éãªããžãã¯ãšèšç®ïŒ ã¹ã¿ã€ã«ã«é«åºŠãªããžãã¯ïŒ
@if
ã@for
ã@each
ïŒãè€éãªæ°åŠçèšç®ããŸãã¯åçãªããããã£çæãå¿ èŠãªå Žåãããªããã»ããµã®ããã¯ã¹ã€ã³ãåªããŠããŸãã -
ãã³ããŒãã¬ãã£ãã¯ã¹ïŒ AutoprefixerããããåŸåŠçã§åŠçããŸãããããªããã»ããµã®ããã¯ã¹ã€ã³ã¯ãã³ããŒãã¬ãã£ãã¯ã¹ãçŽæ¥ã«ãã»ã«åã§ããããã¯æŽå²çãªäž»èŠãªãŠãŒã¹ã±ãŒã¹ã§ããã
-
æ·±ããã¹ããšç¶æ¿ïŒæ³šæãå¿ èŠïŒïŒ ããªããã»ããµã¯ã»ã¬ã¯ã¿ã®ãã¹ããããããã£ã®ç¶æ¿ã容æã«ããè€éãªã³ã³ããŒãã³ãã®ã¹ã¿ã€ãªã³ã°ãç°¡çŽ åã§ããå ŽåããããŸãïŒãã ãããã¹ãã®äœ¿ãããã¯é床ã«è©³çްã§äžæžããå°é£ãªCSSã«ã€ãªããå¯èœæ§ããããŸãïŒã
-
確ç«ãããããŒã«ãã§ãŒã³ïŒ ããŒã ããã§ã«ããªããã»ããµã䜿çšããŠãããããã«é¢ããæçããã¯ãŒã¯ãããŒãããå Žåããã®ããã¯ã¹ã€ã³æ©èœã掻çšããã®ã¯èªç¶ã§ãã
-
ãã©ã¡ãŒã¿åãããåå©çšæ§ïŒ è€æ°ã®åŒæ°ãåãå ¥ããé«åºŠã«ã«ã¹ã¿ãã€ãºå¯èœãªã¹ã¿ã€ã«ãããã¯ãäœæããå¿ èŠãããå ŽåïŒäŸïŒåçãªã°ãªããã«ã©ã ãæè»ãªãã¿ã³ãµã€ãºã®ããã¯ã¹ã€ã³ïŒã
ãã€ãã£ãCSSïŒãšã«ã¹ã¿ã ããããã£ïŒã®ã¿ã«äŸåããå Žå
-
ããã·ã³ãã«ãªãããžã§ã¯ãïŒ å°èŠæš¡ãªãããžã§ã¯ãããã¹ã¿ã€ãªã³ã°ã®ããŒãºãããã»ã©è€éã§ãªãå Žåãããªããã»ããµã®ãã«ãã¹ãããã®ãªãŒããŒãããã¯æ£åœåãããªããããããŸããã
-
ããã©ãŒãã³ã¹ãéèŠãªç°å¢ïŒ ãã«ãããŒã«ãã§ãŒã³ã®è€éããæžããããšã¯ãéåžžã«ãªãŒã³ãªç°å¢ã§éçºãµã€ã¯ã«ãé«éåããããšã«ã€ãªããå ŽåããããŸãã
-
å€ã®åå©çšæ§ïŒ åã«å ±éã®å€ïŒè²ããã©ã³ããã¹ããŒã·ã³ã°ãŠãããïŒãåå©çšããå ŽåãCSSã«ã¹ã¿ã ããããã£ã¯ãã€ãã£ãã§ãéåžžã«ããã©ãŒãã³ã¹ãé«ããéçºè ãã¬ã³ããªãŒãªãœãªã¥ãŒã·ã§ã³ã§ãã
-
ã©ã³ã¿ã€ã æäœïŒ ã«ã¹ã¿ã ããããã£ã¯JavaScriptã§ã©ã³ã¿ã€ã ã«æäœã§ããŸãããããã¯ããªããã»ããµã®ããã¯ã¹ã€ã³ã§ã¯äžå¯èœã§ãïŒéçãªCSSã«ã³ã³ãã€ã«ãããããïŒã
-
çžäºéçšæ§ïŒ ã«ã¹ã¿ã ããããã£ã¯ãã©ãŠã¶ãã€ãã£ãã§ããããœãŒã¹ããããããªããã»ããµã®ç¥èããªããŠãæ®éçã«çè§£ããããããã°å¯èœã§ãã
ãã€ããªããã¢ãããŒããšãã¹ãããã»ããµ
å€ãã®çŸä»£çãªéçºã¯ãŒã¯ãããŒã¯ãã€ããªããã¢ãããŒããæ¡çšããŠããŸããSassã®ãããªããªããã»ããµããã®åŒ·åãªæ©èœïŒè€éãªããžãã¯ããã©ã¡ãŒã¿åãããã¹ã¿ã€ã«ã®ããã®ããã¯ã¹ã€ã³ãå«ãïŒã«äœ¿çšãããã®åŸPostCSSã®ãããªãã¹ãããã»ããµã䜿çšããã®ãäžè¬çã§ããPostCSSãšãã©ã°ã€ã³ã¯ã次ã®ãããªã¿ã¹ã¯ãå®è¡ã§ããŸãã
-
èªåãã¬ãã£ãã¯ã¹è¿œå ïŒ ãã³ããŒãã¬ãã£ãã¯ã¹ãèªåçã«è¿œå ããŸãã
-
CSSã®æå°åïŒ ãã¡ã€ã«ãµã€ãºãåæžããŸãã
-
å°æ¥ã®CSSã®ããªãã£ã«ïŒ æ°ããå®éšçãªCSSæ©èœãåºããµããŒããããŠããCSSã«å€æããŸãïŒãã ãããã¯ã
@apply
ã¯å¯Ÿè±¡å€ã§ãïŒã -
ã«ã¹ã¿ã ããããã£ã®ãã©ãŒã«ããã¯ïŒ å€ããã©ãŠã¶ãšã®äºææ§ã確ä¿ããŸãã
ãã®çµã¿åããã«ãããéçºè ã¯äž¡æ¹ã®äžçã®é·æã掻çšã§ããŸãããªãŒãµãªã³ã°ã®ããã®ããªããã»ããµã®è¡šçŸåãšããããã€ã¡ã³ãã®ããã®ãã¹ãããã»ããµã®æé©åããã³å°æ¥å¯Ÿå¿èœåã§ãã
ããã¯ã¹ã€ã³æŽ»çšã®ããã®ã°ããŒãã«ãªãã¹ããã©ã¯ãã£ã¹
éžæããããŒã«ã«é¢ä¿ãªããããã¯ã¹ã€ã³æŽ»çšã®ããã®ãã¹ããã©ã¯ãã£ã¹ãæ¡çšããããšã¯ãã¯ãªãŒã³ã§ã¹ã±ãŒã©ãã«ããã€ååçãªã³ãŒãããŒã¹ãç¶æããããã«äžå¯æ¬ ã§ããç¹ã«ãäžè²«æ§ãšæç¢ºããæéèŠèŠãããã°ããŒãã«ããŒã ã«ãšã£ãŠã¯éèŠã§ãã
1. ããã¯ã¹ã€ã³ã®åœåèŠå
ããã¯ã¹ã€ã³ã«ã¯ãæç¢ºã§ãèšè¿°çã§ãäžè²«æ§ã®ããåœåèŠåãæ¡çšããŠãã ãããã±ããã±ãŒã¹ã䜿çšããååãããã¯ã¹ã€ã³ã®ç®çãæ£ç¢ºã«åæ ããããã«ããŸãã
-
è¯ãäŸïŒ
@mixin flex-center
,@mixin button-variant($color)
,@mixin font-size($scale)
-
æªãäŸïŒ
@mixin fc
,@mixin btn(c)
,@mixin fs
(æå·ã®ããããã)
2. ããã¯ã¹ã€ã³ã®æŽçïŒããŒã·ã£ã«ãšã¢ãžã¥ãŒã«ïŒ
ãããžã§ã¯ããæé·ããã«ã€ããŠãããã¯ã¹ã€ã³ã©ã€ãã©ãªã倧ãããªããŸããããã¯ã¹ã€ã³ãè«ççãªããŒã·ã£ã«ãã¡ã€ã«ïŒäŸïŒ_mixins.scss
, _typography.scss
, _buttons.scss
ïŒã«æŽçããã¡ã€ã³ã®ã¹ã¿ã€ã«ã·ãŒãã«ã€ã³ããŒãããŸããããã«ãããã¢ãžã¥ãŒã«æ§ãä¿é²ãããéçºè
ãæ¢åã®ããã¯ã¹ã€ã³ãèŠã€ããŠåå©çšãããããªããŸãã
æ§é ã®äŸïŒ
scss/
âââ base/
â âââ _reset.scss
â âââ _typography.scss
âââ components/
â âââ _button.scss
â âââ _card.scss
âââ layouts/
â âââ _grid.scss
âââ utilities/
â âââ _mixins.scss /* ãã¹ãŠã®æ±çšããã¯ã¹ã€ã³ */
â âââ _functions.scss
âââ vendors/
â âââ _normalize.scss
âââ main.scss
_mixins.scss
ã倧ãããªããããå Žåã¯ããã®äžã§ããã«ç°ãªãã«ããŽãªã®ããã¯ã¹ã€ã³çšã®ç¹å®ã®ãã¡ã€ã«ã«åå²ããããšãã§ããŸãïŒäŸïŒ_mixins-layout.scss
, _mixins-effects.scss
ïŒã
3. ããã¯ã¹ã€ã³ã®ææžå
å€§èŠæš¡ãªããŒã ãã°ããŒãã«ã«åæ£ããããŒã ã§ã¯ãããã¯ã¹ã€ã³ã®åŸ¹åºçãªææžåãäžå¯æ¬ ã§ããåããã¯ã¹ã€ã³ãäœãããã®ããã©ã®ãããªåŒæ°ãåãå ¥ããã®ãïŒãã®åãããã©ã«ãå€ïŒããããŠäœ¿çšäŸã説æããŸããSassDocã®ãããªããŒã«ã¯ãSassãã¡ã€ã«å ã®ã³ã¡ã³ãããèªåçã«ããã¥ã¡ã³ããçæã§ãã倿§ãªèæ¯ãæã€æ°ããããŒã ã¡ã³ããŒã®ãªã³ããŒãã£ã³ã°ã倧ãã«å©ããŸãã
äŸïŒããã¯ã¹ã€ã³ã®ææžå
/// ã¬ã¹ãã³ã·ããªããã£ã³ã°ãŠãŒãã£ãªãã£ãçæããŸãã
/// @param {Number} $max - ãŠãŒãã£ãªãã£ã¯ã©ã¹ã®æå€§ã€ã³ããã¯ã¹ïŒäŸïŒ.padding-5ã®å Žåã¯5ïŒã
/// @param {String} $step - ããã£ã³ã°ã®åºæ¬åäœïŒäŸïŒ'5px', '0.5rem'ïŒã
/// @example
/// @include generate-padding-utilities(3, 10px);
/// // .padding-1 { padding: 10px; }
/// // .padding-2 { padding: 20px; }
/// // .padding-3 { padding: 30px; }
@mixin generate-padding-utilities($max, $step) {
/* ... ããã¯ã¹ã€ã³ã®ã³ãŒã ... */
}
4. ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
ããã¯ã¹ã€ã³ã¯ããã¯ãªãŒã³ãªã³ãŒããä¿é²ããŸãããã³ã³ãã€ã«ãããCSSåºåã«æ³šæããŠãã ããã
-
åºåãµã€ãºïŒ ããã¯ã¹ã€ã³ã
@include
ããããã³ã«ããã®CSSããããã£ã¯ã³ã³ãã€ã«ãããåºåã«è€è£œãããŸããå€§èŠæš¡ãªããã¯ã¹ã€ã³ãäœåºŠãã€ã³ã¯ã«ãŒãããããšãCSSãã¡ã€ã«ãµã€ãºã倧ãããªãå¯èœæ§ããããŸãããã«ãããã»ã¹äžã«æå°åã䜿çšããŠãããç·©åããŸãã -
ã³ã³ãã€ã«æéïŒ åºç¯ãªã«ãŒããæ¡ä»¶ä»ãããžãã¯ãæã€éåžžã«è€éãªããã¯ã¹ã€ã³ããŸãã¯å€æ°ã®ããã¯ã¹ã€ã³ã®ã€ã³ã¯ã«ãŒãã¯ãCSSã®ã³ã³ãã€ã«æéãå¢å ãããå¯èœæ§ããããŸããå¯èœãªéãããã¯ã¹ã€ã³ãå¹ççã«æé©åããŠãã ããã
-
è©³çŽ°åºŠïŒ ããã¯ã¹ã€ã³èªäœã¯ãããããã€ã³ã¯ã«ãŒããããã»ã¬ã¯ã¿ãè¶ ããŠè©³çŽ°åºŠã®åé¡ãåŒãèµ·ããããšã¯ãããŸãããããããããã¯ã¹ã€ã³ã«ãã£ãŠçæãããCSSããå šäœçãªCSSã¢ãŒããã¯ãã£ã®è©³çŽ°åºŠã«ãŒã«ãšããŸãçµ±åãããããã«ããŠãã ããã
5. ã¢ã¯ã»ã·ããªãã£ãžã®åœ±é¿
ããã¯ã¹ã€ã³ã¯CSSãªãŒãµãªã³ã°ããŒã«ã§ãããããããçæããã¹ã¿ã€ã«ã¯ã¢ã¯ã»ã·ããªãã£ã«çŽæ¥åœ±é¿ããŸãããã©ãŒã«ã¹ç¶æ ãè²ã®ã³ã³ãã©ã¹ããã€ã³ã¿ã©ã¯ãã£ããªèŠçŽ ã«é¢é£ããããã¯ã¹ã€ã³ãWCAGïŒWeb Content Accessibility GuidelinesïŒæšæºã«æºæ ããŠããããšã確èªããŠãã ãããããšãã°ããã¿ã³ã®ããã¯ã¹ã€ã³ã«ã¯é©åãªãã©ãŒã«ã¹ã¹ã¿ã€ã«ãå«ãŸããã¹ãã§ãã
äŸïŒããã¯ã¹ã€ã³å ã®ã¢ã¯ã»ã·ãã«ãªãã©ãŒã«ã¹ã¹ã¿ã€ã«
@mixin interactive-focus-styles {
&:focus-visible {
outline: 2px solid var(--focus-ring-color, #007bff);
outline-offset: 2px;
}
}
.my-link {
@include interactive-focus-styles;
color: blue;
text-decoration: underline;
}
:focus-visible
ïŒãŸãã¯ãã®ããªãã£ã«ïŒã䜿çšããããšã¯ããŠãŒã¶ãŒãããŒããŒãããã®ä»ã®éãã€ã³ãã£ã³ã°å
¥åã§ããã²ãŒãããŠããå Žåã«ã®ã¿ãã©ãŒã«ã¹ã®ã¢ãŠãã©ã€ã³ã衚瀺ãããããã¢ã¯ã»ã·ããªãã£ã«é¢ããçŸä»£çãªãã¹ããã©ã¯ãã£ã¹ã§ãã
6. ä¿å®æ§ãšããŒã ã³ã©ãã¬ãŒã·ã§ã³
ã°ããŒãã«ããŒã ã«ãšã£ãŠãäžè²«æ§ã¯éµã§ããæ°ããããã¯ã¹ã€ã³ãäœæããã¿ã€ãã³ã°ãæ¢åã®ãã®ã倿Žããã¿ã€ãã³ã°ããããŠããã·ã³ãã«ãªãŠãŒãã£ãªãã£ã¯ã©ã¹ããã€ãã£ãã®CSSã«ã¹ã¿ã ããããã£ãéžæããã¿ã€ãã³ã°ã«ã€ããŠãæç¢ºãªã¬ã€ãã©ã€ã³ã確ç«ããŠãã ãããã³ãŒãã¬ãã¥ãŒã¯ããããã®ã¬ã€ãã©ã€ã³ã®éµå®ãä¿èšŒããããŸããŸãªæè¡çèæ¯ãæã€éçºè ãçè§£ãè²¢ç®ã§ããé«å質ã§èªã¿ãããã³ãŒãããŒã¹ãç¶æããããã«äžå¯æ¬ ã§ãã
CSSã®åå©çšæ§ã«ãããå°æ¥ã®ãã¬ã³ã
Webãã©ãããã©ãŒã ã¯çµ¶ããé²åããŠããŸããããªããã»ããµã®ããã¯ã¹ã€ã³ã¯äŸç¶ãšããŠéåžžã«é¢é£æ§ãé«ãã§ãããCSSã¯ãŒãã³ã°ã°ã«ãŒãã¯ãå°æ¥çã«ç§ãã¡ãåå©çšæ§ã«ã©ã®ããã«ã¢ãããŒããããã«åœ±é¿ãäžããå¯èœæ§ã®ããæ°ãããã€ãã£ãæ©èœãæ¢æ±ãç¶ããŠããŸãã
-
ã³ã³ããã¯ãšãªïŒ çŽæ¥çãªããã¯ã¹ã€ã³ã®ä»£æ¿ã§ã¯ãããŸããããã³ã³ããã¯ãšãªïŒ
@container
ïŒã«ãããèŠçŽ ããã¥ãŒããŒãã§ã¯ãªã芪ã³ã³ããã®ãµã€ãºã«åºã¥ããŠã¹ã¿ã€ãªã³ã°ã§ããŸããããã«ãããããçã«ã«ãã»ã«åãããåå©çšå¯èœãªã³ã³ããŒãã³ããå¯èœã«ãªããã³ã³ããŒãã³ãã®å éšã¬ã€ã¢ãŠãã¯ããŒãžäžã®ã©ãã«é 眮ãããŠãå©çšå¯èœãªã¹ããŒã¹ã«åºã¥ããŠé©å¿ã§ããŸããããã«ãããè€éãªã°ããŒãã«ãªã¡ãã£ã¢ã¯ãšãªããã¯ã¹ã€ã³ã®å¿ èŠæ§ãæžå°ããŸãã -
CSSã¬ã€ã€ãŒïŒ
@layer
ïŒïŒ CSSã¬ã€ã€ãŒã¯ãã¹ã¿ã€ã«ã·ãŒããåå¥ã®ã¬ã€ã€ãŒã«æŽçããæ¹æ³ãæäŸããéçºè ãã«ã¹ã±ãŒãããã詳现ã«å¶åŸ¡ã§ããããã«ããŸããããã«ããã詳现床ã管çããæå³ããªãã¹ã¿ã€ã«ã®äžæžããé²ãã®ã«åœ¹ç«ã¡ã鿥çã«åå©çšå¯èœãªã¹ã¿ã€ã«ã®ããè¯ãæŽçããµããŒãããŸãã -
å°æ¥ã®ãã€ãã£ããªãããã¯ã¹ã€ã³ãçæ©èœïŒ
@apply
ãããªããã»ããµã®ããã¯ã¹ã€ã³ã«äŒŒããã€ãã£ãCSSæ©èœã«é¢ããè°è«ã¯é²è¡äžã§ããã³ãã¥ããã£ã¯å®£èšãã°ã«ãŒãåããå¿ èŠæ§ãèªèããŠãããå°æ¥ã®ä»æ§ã§ã¯ãããããã©ãŒãã³ã¹ãé«ããæå³çã«å¥å šãªæ¹æ³ã§å¯ŸåŠããããã®æ°ããã¡ã«ããºã ãå°å ¥ãããå¯èœæ§ããããŸãã
ãããã®ååã«ã€ããŠåžžã«æ å ±ãåŸãŠããããšã¯ãCSSã¢ãŒããã¯ãã£ãå°æ¥ã«ããã£ãŠä¿èšŒããããã¯ã¹ã€ã³ã®æŽ»çšæŠç¥ãææ°ã®WebæšæºãšæŽåæ§ãä¿ã€ããã«äžå¯æ¬ ã§ãã
çµè«
ãCSS @applyã«ãŒã«ããç¹ã«ããã¯ã¹ã€ã³æŽ»çšã®æèã«ãããŠã¯ãçŸä»£ã®ããã³ããšã³ãéçºã«ãããæ¥µããŠéèŠãªæŠå¿µã衚ããŠããŸãããã€ãã£ãã®CSS @apply
ã«ãŒã«ã¯å»æ¢ãããŸããããCSSã«ãããåå©çšæ§ãã¢ãžã¥ãŒã«æ§ãä¿å®æ§ãžã®æ ¹æ¬çãªããŒãºã¯ãããŸã§ä»¥äžã«åŒ·ããªã£ãŠããŸãã
SassãLessãStylusã®ãããªCSSããªããã»ããµã¯ãå ç¢ã§æè»ãªããã¯ã¹ã€ã³æ©èœãæäŸãç¶ããéçºè ãããå¹ççã§ãåçã§ã管çããããã¹ã¿ã€ã«ã·ãŒããæžãããšãå¯èœã«ããŠããŸããåŒæ°ãã³ã³ãã³ããããã¯ãæ¡ä»¶ä»ãããžãã¯ãåããããã¯ã¹ã€ã³ã掻çšããããšã§ãéçºè ã¯è€éãªã¹ã¿ã€ãªã³ã°ãã¿ãŒã³ãåå©çšå¯èœãªã³ã³ããŒãã³ãã«æœè±¡åããå€§èŠæš¡ãããžã§ã¯ããã°ããŒãã«ãªãã¶ã€ã³ã·ã¹ãã å šäœã§ã®å埩ãåçã«æžãããäžè²«æ§ãåäžãããããšãã§ããŸãã
ããã«ãå€ã®åå©çšæ§ã®ããã®ãã€ãã£ãCSSã«ã¹ã¿ã ããããã£ã®åãçè§£ãããŠãŒãã£ãªãã£ã¯ã©ã¹ãšã³ã³ããŒãã³ãããŒã¹ã®CSSã®æŠç¥çãªäœ¿çšãšçµã¿åãããããšã§ã髿§èœã§ä¿å®æ§ã®é«ãWebã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®ããŒã«ãããã宿ããŸããããªããã»ããµã®åŒ·ã¿ãšãã€ãã£ãCSSã®å¹çæ§ã®èåããããŠåœåãæŽçãææžåãã¢ã¯ã»ã·ããªãã£ã«ãããã°ããŒãã«ãªãã¹ããã©ã¯ãã£ã¹ãžã®æ³šææ·±ãéµå®ãã仿¥ã®ãããã§ãã·ã§ãã«ãªCSSéçºã®èšŒã§ãã
Webãã©ãããã©ãŒã ãé²åããã«ã€ããŠãç§ãã¡ã®ã¹ã¿ã€ãªã³ã°ãžã®ã¢ãããŒããé²åããŸããããã¯ã¹ã€ã³æŽ»çšã®æè¡ãç¿åŸããæ°ããªCSSæ©èœã«æ³šæãæãããšã§ãéçºè ã¯èªåãã¡ã®ã¹ã¿ã€ã«ã·ãŒããæ©èœçã§ããã ãã§ãªãããšã¬ã¬ã³ãã§ãã¹ã±ãŒã©ãã«ã§ãçã«ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«æ§ç¯ããéã®èª²é¡ã«åããããŠããããšãä¿èšŒã§ããŸãã