ä½¿ç¨ CSS åµå¥
CSS åµå¥æ¨¡åå è®¸ä½ å°ä½ çæ ·å¼è¡¨åçæ´å 容æé è¯»ãæ´å æ¨¡ååï¼è䏿´å 容æç»´æ¤ãå ä¸ºä½ ä¸åéè¦éå¤éæ©å¨ï¼æä»¶åæ ·ä¹å¯ä»¥è¢«å缩ã
CSS åµå¥ä¸åäºå¦ Sass çç CSS é¢å¤çå¨çä¸ç¹æ¯ï¼å®æ¯è¢«æµè§å¨ç´æ¥è§£æçï¼è䏿¯å
ç»ç± CSS é¢å¤çå¨çé¢ç¼è¯ãèä¸å¨ CSS åµå¥ä¸ï¼& åµå¥éæ©å¨çä¼å
çº§ç±»ä¼¼äº :is() 彿°ï¼å®çä¼å
级ç±å®æå
³èçéæ©å¨å表å½ä¸ä¼å
级æé«çéæ©å¨å³å®ã
è¿ä¸ªæåå±ç¤ºåç§åµå¥ CSS çæ¹æ³ã
åéæ©å¨
ä½ å¯ä»¥ä½¿ç¨ CSS åµå¥æ¥å建ä¸ä¸ªç¶çº§çåéæ©å¨ï¼è¿å¯ä»¥ç¨æ¥éæ©ç¹å®ç¶å
ç´ çåå
ç´ ãå¯ä»¥éæ©ä½¿ç¨& åµå¥éæ©å¨æ¥å®ç°ã
æå 个ç¹å®ç¯å¢å¯ä»¥ä½¿å¾ & åµå¥éæ©å¨åå¾å¾å¿
è¦æè
æç¨ï¼
- å¨è¿æ¥éæ©å¨æ¶ï¼å¦ç»åéæ©å¨æä¼ªç±»ã
- 为äºååå ¼å®¹ã
- ä½ä¸ºä¸ä¸ªè¾
å©é
è¯»çæ å¿ãå½ä½ çå°
&æ¶ï¼ä½ å°±ç¥éè¿éç¨å° CSS åµå¥äºã
/* ä¸ä½¿ç¨åµå¥éæ©å¨ */
parent {
/* ç¶æ ·å¼ */
child {
/* ç¶çº§çåæ ·å¼ */
}
}
/* 使ç¨åµå¥éæ©å¨ */
parent {
/* ç¶æ ·å¼ */
& child {
/* ç¶çº§çåæ ·å¼ */
}
}
/* æµè§å¨å伿以ä¸ä¸¤ä¸ªæ ·å¼è¡¨è§£æä¸º */
parent {
/* ç¶æ ·å¼ */
}
parent child {
/* ç¶çº§çåæ ·å¼ */
}
示ä¾
å¨è¿ä¸ªç¤ºä¾ä¸ï¼ä¸ä¸ªæ²¡æä½¿ç¨ & åµå¥éæ©å¨ï¼å¦ä¸ä¸ªä½¿ç¨äºãå¨ <label> å
é¨ç <input> 被èµäºäºåç´§é» <label> ç <input> ä¸åçæ ·å¼ãè¿ä¸ªç¤ºä¾å±ç¤ºäºçç¥ & åµå¥éæ©å¨çå½±åã
夿³¨ï¼è¿ä¸ªç¤ºä¾æ¼ç¤ºäºå®ç°åçåç°è¡åµå¥è§èçæµè§å¨çä¸åè¾åºãChrome å Safari å®ç°äº 2023 å¹´ 8 æåçåçè§èï¼å
¶è¦æ±ä½¿ç¨ & åµå¥éæ©å¨ãå¦æä½ çæµè§å¨æ¯æç°è¡è§èï¼é£ä¹è¿ä¸¤ä¸ªç¤ºä¾çè¾åºå°ä¼å第äºä¸ªç¤ºä¾ä¸è´ã
ä¸ä½¿ç¨åµå¥éæ©å¨
HTML
<form>
<label for="name">å§åï¼
<input type="text" id="name" />
</label>
<label for="email">é®ç®±ï¼</label>
<input type="text" id="email" />
</form>
CSS
form,
label {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
input {
/* ä¸å¨ label å
ç input çæ ·å¼ */
border: tomato 2px solid;
}
label {
/* label çæ ·å¼ */
font-family: system-ui;
font-size: 1.25rem;
input {
/* å¨ label å
ç input çæ ·å¼ */
border: blue 2px dashed;
}
}
ç»æ
使ç¨åµå¥éæ©å¨
HTML
<form>
<label for="name">å§åï¼
<input type="text" id="name" />
</label>
<label for="email">é®ç®±ï¼</label>
<input type="text" id="email" />
</form>
CSS
form,
label {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
input {
/* ä¸å¨ label å
ç input çæ ·å¼ */
border: tomato 2px solid;
}
label {
/* label çæ ·å¼ */
font-family: system-ui;
font-size: 1.25rem;
& input {
/* å¨ label å
ç input çæ ·å¼ */
border: blue 2px dashed;
}
}
ç»æ
å ³ç³»éæ©å¨
CSS å
³ç³»éæ©å¨ä¹å¯ä»¥å¨ä½¿ç¨æä¸ä½¿ç¨ & åµå¥éæ©å¨çæ
åµä¸ä½¿ç¨ã
示ä¾
åµå¥é»æ¥å å¼éæ©å¨
å¨è¿ä¸ªç¤ºä¾ä¸ï¼æä»¬ä½¿ç¨ CSS åµå¥ï¼å°æ¯ä¸ª <h2> åç第ä¸ä¸ªæ®µè½ä½¿ç¨é»æ¥å
å¼éæ©å¨ï¼+ï¼éä¸ã
HTML
<h2>æ é¢</h2>
<p>è¿æ¯ç¬¬ä¸æ®µã</p>
<p>è¿æ¯ç¬¬äºæ®µã</p>
CSS
h2 {
color: tomato;
+ p {
color: white;
background-color: black;
}
}
/* è¿æ®µä¹å¯ä»¥ç¨åµå¥éæ©å¨æ¹å为 */
/*
h2 {
color: tomato;
& + p {
color: white;
background-color: black;
}
}
*/
ç»æ
ç»åéæ©å¨
å¨åµå¥ CSS ä¸ä½¿ç¨ç»å鿩卿¶ï¼ä½ å¿
é¡»ä½¿ç¨ & åµå¥éæ©å¨ï¼å 为æµè§å¨ä¼èªå¨å¨ä¸ä½¿ç¨ & åµå¥éæ©å¨çéæ©å¨ä¹é´æ·»å ç©ºæ ¼ã
为äºéæ©ä¸ä¸ªå¸¦æ class="a b" çå
ç´ ï¼ä½ å¿
é¡»ä½¿ç¨ & åµå¥éæ©å¨ï¼å¦åç©ºæ ¼å°ä¼ææ£è¿ä¸ªç»åéæ©å¨ã
.a {
/* 带æ class="a" å
ç´ çæ ·å¼ */
.b {
/* 带æ class="b"ï¼ä¸ä¸º class="a" å
ç´ çåå
ç´ çæ ·å¼ */
}
&.b {
/* 带æ class="a b" å
ç´ çæ ·å¼ */
}
}
/* æµè§å¨ä¼å°å
¶åæä¸º */
.a {
/* 带æ class="a" å
ç´ çæ ·å¼ */
}
.a .b {
/* 带æ class="b"ï¼ä¸ä¸º class="a" å
ç´ çåå
ç´ çæ ·å¼ */
}
.a.b {
/* 带æ class="a b" å
ç´ çæ ·å¼ */
}
示ä¾
åµå¥åç»åéæ©å¨
å¨è¿ä¸ªç¤ºä¾ä¸ï¼æä»¬ä½¿ç¨ & åµå¥éæ©å¨æ¥å建ç»åéæ©å¨ï¼ä¸ºå¸¦æå¤ä¸ªç±»çå
ç´ æ·»å æ ·å¼ã
HTML
<div class="notices">
<div class="notice">
<h2 class="notice-heading">注æ</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>
</div>
<div class="notice warning">
<h2 class="warning-heading">è¦å</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>
</div>
<div class="notice success">
<h2 class="success-heading">æå</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>
</div>
</div>
CSS
使ç¨å¼¹æ§çåå¸å±å° .notices å为ä¸ä¸ªåã
.notices {
display: flex;
flex-direction: column;
gap: 0.5rem;
width: 90%;
margin: auto;
}
å¨ä¸å CSS ä¸ï¼æä»¬ä½¿ç¨åµå¥å建带 & åä¸å¸¦ & çç»åéæ©å¨ãé¡¶å±éæ©å¨ä¸ºå¸¦æ class="notice" çå
ç´ å®ä¹åºæ¬æ ·å¼ãæ¥ä¸æ¥ï¼æä»¬ä½¿ç¨ & åµå¥éæ©å¨åå«ä¸ºå¸¦æ class="notice warning" å class="notice success" çå
ç´ å建ç»åéæ©å¨ãå¦å¤ï¼ä¸æ¾å¼ä½¿ç¨ & å建ç»åéæ©å¨çä¾åå¯ä»¥åè .notice .notice-heading::beforeã
.notice {
width: 90%;
justify-content: center;
border-radius: 1rem;
border: black solid 2px;
background-color: #ffc107;
color: black;
padding: 1rem;
.notice-heading::before {
/* çåäº `.notice .notice-heading::before` */
content: "â¹ï¸ ";
}
&.warning {
/* çåäº `.notice.warning` */
background-color: #d81b60;
border-color: #d81b60;
color: white;
.warning-heading::before {
/* çåäº `.notice.warning .warning-heading::before` */
content: "! ";
}
}
&.success {
/* çåäº `.notice.success` */
background-color: #004d40;
border-color: #004d40;
color: white;
.success-heading::before {
/* çåäº `.notice.success .success-heading::before` */
content: "â ";
}
}
}
ç»æ
åéåµå¥éæ©å¨
& åµå¥éæ©å¨ä¹å¯ä»¥æ·»å å°ä¸ä¸ªéæ©å¨çåæ¹ãè¿å°èµ·å°å转ä¸ä¸æçææã
ä¾å¦ï¼æä»¬æä¸ä¸ªåå ç´ ï¼å½ç¶å ç´ è¢«è®¾å®ä¸åçç±»æ¶æ³è®©å®ååï¼åè¿ä¸ªéæ©å¨å°±ä¼å¾æç¨ï¼
<div>
<span class="foo">ææ¬</span>
</div>
ç¸å¯¹äºï¼
<div class="bar">
<span class="foo">ææ¬</span>
</div>
.foo {
/* .foo çæ ·å¼ */
.bar & {
/* .bar .foo çæ ·å¼ */
}
}
示ä¾
åéåµå¥éæ©å¨
è¿ä¸ªç¤ºä¾éæä¸ä¸ªå¡çï¼å
¶ä¸ä¸ä¸ªè¢«å¼ºè°äºï¼featuredï¼ãææçå¡çï¼é¤äºè¢«å¼ºè°çå¡ççæ é¢ä¼æä¸ä¸ªä¸åçé¢è²ä»¥å¤ï¼é½æ¯ä¸æ ·çãéè¿å° & åµå¥éæ©å¨éå å¨ .featured åæ¹ï¼æä»¬å¯ä»¥å° .featured h2 çæ ·å¼åå¨ h2 éã
HTML
<div class="wrapper">
<article class="card">
<h2>å¡ç 1</h2>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit.</p>
</article>
<article class="card featured">
<h2>å¡ç 2</h2>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit.</p>
</article>
<article class="card">
<h2>å¡ç 3</h2>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit.</p>
</article>
</div>
CSS
.wrapper {
display: flex;
flex-direction: row;
gap: 0.25rem;
font-family: system-ui;
}
å¨ä¸å CSS ä¸ï¼æä»¬ä¸º .card å .card h2 åå»ºæ ·å¼ãç¶åï¼å¨ h2 çæ ·å¼éï¼æä»¬ç¨ & åµå¥éæ©å¨å° .featured ç±»åµå¥å¨å
¶åæ¹ï¼è¿å°å建ä¸ä¸ªçåäº .card :is(.featured h2) çéæ©å¨ï¼ä¹å°±æ¯ :is(.card h2):is(.featured h2)ã
.card {
padding: 0.5rem;
border: 1px solid black;
border-radius: 0.5rem;
& h2 {
/* çåäº `.card h2` */
color: slateblue;
.featured & {
/* çåäº `:is(.card h2):is(.featured h2)` */
color: tomato;
}
}
}
ç»æ
æ¼æ¥ï¼æ¯ä¸å¯è½çï¼
å¨å¦ Sass çç CSS é¢å¤çå¨å½ä¸ï¼æä»¬å¯ä»¥ä½¿ç¨åµå¥æ¥æ¼æ¥å符串以å建æ°ç±»ãè¿å¨å¦ BEM ç CSS å½åæ¹æ³ä¸å°¤ä¸ºå¸¸è§ã
.component {
&__child-element {
}
}
/* å¨ Sass ä¸ï¼è¿å°å为 */
.component__child-element {
}
è¦åï¼è¿å¨ CSS åµå¥ä¸æ¯ä¸å¯è½çï¼å½ä¸ä½¿ç¨ç»å卿¶ï¼åµå¥éæ©å¨å°è¢«å½ä½ç±»åéæ©å¨ãå è®¸æ¼æ¥ä¼ä½¿å¾è¿ä¸ªè§åæ æã
å¨ç»åéæ©å¨ä¸ï¼ç±»åéæ©å¨å¿
é¡»æ¯ç¬¬ä¸ä½ã&Elementï¼ä¸ä¸ªç±»åéæ©å¨ï¼ä¼ä½¿å¾è¿ä¸ªéæ©å¨åæ´ä¸ªæ ·å¼åæ æãå 为类åéæ©å¨å¿
é¡»æ¯ç¬¬ä¸ä½ï¼æä»¥è¿ä¸ªç»åéæ©å¨å¿
é¡»åæ Element&ã
.my-class {
element& {
}
}
/* æµè§å¨å°å
¶è§£æä¸ºç»åéæ©å¨ */
.my-class {
}
element.my-class {
}
æ æçåµå¥æ ·å¼è§å
妿ä¸ä¸ªåµå¥ CSS è§åæ æï¼é£ä¹ææå ¶å å«çæ ·å¼é½å°è¢«å¿½ç¥ãè¿ä¸å½±åå ¶ç¶çº§åå ¶åé¢çè§åã
å¨è¿ä¸ªç¤ºä¾ä¸ï¼æä¸ä¸ªæ æéæ©å¨ï¼% å符å¨éæ©å¨ä¸æ¯æ æçï¼ãè¿ä¸ªéæ©å¨ä¸çè§åé½å°è¢«å¿½ç¥ï¼ä½æ¯åç»ææçè§åå¹¶ä¸ä¼ã
.parent {
/* .parent çæ ·å¼ï¼ä¸åå®å¥½æ æ */
& %invalid {
/* %invalid çæ ææ ·å¼ï¼å
¨é¨è¢«å¿½ç¥ */
}
& .valid {
/* .parent .valid çæ ·å¼ï¼ä¸åå®å¥½æ æ */
}
}