ä»ç» CSS å¸å±
æ¬æå°å顾æä»¬ä»¥å模åä¸å·²ç»ä»ç»è¿çä¸äº CSS å¸å±ç¹æ§ââä¾å¦ä¸åçdisplayå¼ââå¹¶ä»ç»æä»¬å°å¨æ¬æ¨¡åä¸ä½¿ç¨çä¸äºæ¦å¿µã
| åæï¼ | 对 HTML æä¸äºåºæ¬çäºè§£ (å¦ä¹ âHTML ä»ç»â), å¹¶ä¸çè§£ CSS çå·¥ä½åç (å¦ä¹ âCSS ä»ç»â). |
|---|---|
| ç®æ ï¼ | 对 CSS 页é¢å¸å±ææ¯æä¸ä¸ªæ»ä½çäºè§£ãæ¯ç§ææ¯é½è½å¤å¨åé¢çæç¨ä¸è·åå°æ´å 详ç»çä¿¡æ¯ã |
CSS 页é¢å¸å±ææ¯å 许æä»¬æ¾åç½é¡µä¸çå ç´ ï¼å¹¶ä¸æ§å¶å®ä»¬ç¸å¯¹æ£å¸¸å¸å±æµãå¨è¾¹å ç´ ãç¶å®¹å¨æè 主è§å£/çªå£çä½ç½®ãå¨è¿ä¸ªæ¨¡åä¸å°æ¶åæ´å¤å ³äºé¡µé¢å¸å±ææ¯çç»èï¼
- æ£å¸¸å¸å±æµ
display屿§- å¼¹æ§çå
- ç½æ ¼
- æµ®å¨
- å®ä½
- CSS è¡¨æ ¼å¸å±
- å¤åå¸å±
æ¯ç§ææ¯é½æå®ä»¬çç¨éï¼åæä¼ç¼ºç¹ï¼ç¸äºè¾ å©ãéè¿çè§£å个å¸å±æ¹æ³ç设计ç念ï¼ä½ è½å¤æ¾å°æå»ºä½ æ³è¦çç½é¡µéè¦çå¸å±æ¹æ¡ã
æ£å¸¸å¸å±æµ
æ£å¸¸å¸å±æµï¼normal flowï¼æ¯æå¨ä¸å¯¹é¡µé¢è¿è¡ä»»ä½å¸å±æ§å¶æ¶ï¼æµè§å¨é»è®¤ç HTML å¸å±æ¹å¼ã让æä»¬å¿«éå°çä¸ä¸ª HTML çä¾åï¼
<p>I love my cat.</p>
<ul>
<li>Buy cat food</li>
<li>Exercise</li>
<li>Cheer up friend</li>
</ul>
<p>The end!</p>
é»è®¤æ åµä¸ï¼æµè§å¨çæ¾ç¤ºå¦ä¸ï¼
注æï¼HTML å ç´ å®å ¨æç §æºç ä¸åºç°çå 忬¡åºæ¾ç¤ºââ第ä¸ä¸ªæ®µè½ãæ åºå表ã第äºä¸ªæ®µè½ã
åºç°å¨å¦ä¸ä¸ªå ç´ ä¸é¢çå ç´ è¢«æè¿°ä¸ºåå ç´ ï¼ä¸åºç°å¨å¦ä¸ä¸ªå ç´ æè¾¹çå èå ç´ ä¸åï¼å èå ç´ å°±åæ®µè½ä¸çå个åè¯ä¸æ ·ã
夿³¨ï¼åå
ç´ å
容çå¸å±æ¹å被æè¿°ä¸ºåæ¹åãåæ¹åå¨è±è¯çå
·ææ°´å¹³ä¹¦å模å¼(writing mode) çè¯è¨ä¸åç´è¿è¡ãå®å¯ä»¥å¨ä»»ä½åç´ä¹¦å模å¼çè¯è¨ä¸æ°´å¹³è¿è¡ã对åºçå
èæ¹åæ¯å
èå
容ï¼å¦å¥åï¼çè¿è¡æ¹åã
å½ä½ ä½¿ç¨ css å建ä¸ä¸ªå¸å±æ¶ï¼ä½ æ£å¨ç¦»å¼æ£å¸¸å¸å±æµï¼ä½æ¯å¯¹äºé¡µé¢ä¸ç夿°å ç´ ï¼æ£å¸¸å¸å±æµå°å®å ¨å¯ä»¥åå»ºä½ æéè¦çå¸å±ãä»ä¸ä¸ªç»æè¯å¥½ç Html ææ¡£å¼å§æ¯é常éè¦ï¼å ä¸ºä½ å¯ä»¥æç §é»è®¤çæ¹å¼æ¥æå»ºé¡µé¢ï¼è䏿¯èªé 车轮ã
ä¸åå¸å±ææ¯ä¼è¦çé»è®¤çå¸å±è¡ä¸ºï¼
display屿§ â æ åç valueï¼æ¯å¦block,inlineæèinline-blockå ç´ å¨æ£å¸¸å¸å±æµä¸ç表ç°å½¢å¼ (è§ Types of CSS boxes). æ¥çæ¯å ¨æ°çå¸å±æ¹å¼ï¼éè¿è®¾ç½®displayçå¼ï¼æ¯å¦ CSS Grid å Flexbox.- æµ®å¨ââåºç¨
floatå¼ï¼è¯¸å¦leftè½å¤è®©å级å ç´ äºç¸å¹¶ææä¸è¡ï¼è䏿¯ä¸ä¸ªå å å¨å¦ä¸ä¸ªä¸é¢ã position屿§ â å è®¸ä½ ç²¾å设置çåä¸ççåçä½ç½®ï¼æ£å¸¸å¸å±æµä¸ï¼é»è®¤ä¸ºstaticï¼ä½¿ç¨å ¶ä»å¼ä¼å¼èµ·å ç´ ä¸åçå¸å±æ¹å¼ï¼ä¾å¦å°å ç´ åºå®å°æµè§å¨è§å£çå·¦ä¸è§ã- è¡¨æ ¼å¸å±â è¡¨æ ¼çå¸å±æ¹å¼å¯ä»¥ç¨å¨éè¡¨æ ¼å
容ä¸ï¼å¯ä»¥ä½¿ç¨
display: tableåç¸å ³å±æ§å¨é表å ç´ ä¸ä½¿ç¨ã - å¤åå¸å±â è¿ä¸ª Multi-column layout 屿§å¯ä»¥è®©åæåå¸å±ï¼æ¯å¦æ¥çº¸çå 容就æ¯ä¸åä¸åæå¸çã
display 屿§
å¨ css ä¸å®ç°é¡µé¢å¸å±çä¸»è¦æ¹æ³æ¯è®¾å®display屿§çå¼ãæ¤å±æ§å
许æä»¬æ´æ¹é»è®¤çæ¾ç¤ºæ¹å¼ãæ£å¸¸æµä¸çææå
容齿ä¸ä¸ªdisplayçå¼ï¼ç¨ä½å
ç´ çé»è®¤è¡ä¸ºæ¹å¼ãä¾å¦ï¼è±ææ®µè½æ¾ç¤ºå¨ä¸ä¸ªæ®µè½çä¸é¢ï¼è¿æ¯å 为å®ä»¬çæ ·å¼æ¯display:blockã妿卿®µè½ä¸çæä¸ªææ¬å¨å´åå»ºé¾æ¥ï¼åè¯¥é¾æ¥å°ä¸ææ¬çå
¶ä½é¨åä¿æå
èï¼å¹¶ä¸ä¸ä¼ææå°æ°è¡ãè¿æ¯å 为<a>å
ç´ é»è®¤ä¸ºdisplay:inlineã
ä½ å¯ä»¥æ´æ¹æ¤é»è®¤æ¾ç¤ºè¡ä¸ºãä¾å¦ï¼<li>å
ç´ é»è®¤ä¸ºdisplay:blockï¼è¿æå³ç卿们çè±æææ¡£ä¸ï¼å表项æ¾ç¤ºä¸ºä¸ä¸ªå¨å¦ä¸ä¸ªä¹ä¸ã妿æä»¬å°æ¾ç¤ºå¼æ´æ¹ä¸ºinlineï¼å®ä»¬ç°å¨å°æ¾ç¤ºå¨å½¼æ¤æè¾¹ï¼å°±ååè¯å¨å¥å䏿åç飿 ·ãäºå®ä¸ï¼ä½ å¯ä»¥æ´æ¹ä»»ä½å
ç´ çdisplayå¼ï¼è¿æå³çä½ å¯ä»¥æ ¹æ®å®ä»¬çè¯ä¹éæ© html å
ç´ ï¼èä¸å¿
å
³å¿å®ä»¬çå¤è§ãä»ä»¬çæ ·åæ¯ä½ å¯ä»¥æ¹åçã
é¤äºå¯ä»¥éè¿å°ä¸äºå
容ä»block转æ¢ä¸ºinlineï¼åä¹äº¦ç¶ï¼æ¥æ´æ¹é»è®¤è¡¨ç¤ºå½¢å¼ä¹å¤ï¼è¿æä¸äºæ´å¤§çå¸å±æ¹æ³ä»¥displayå¼å¼å§ã使¯ï¼å¨ä½¿ç¨è¿äºå±æ§æ¶ï¼é常éè¦è°ç¨å
¶ä»å±æ§ãå¨è®¨è®ºå¸å±æ¶ï¼å¯¹æä»¬æ¥è¯´æéè¦çä¸¤ä¸ªå¼æ¯ display: flex å display: gridã
å¼¹æ§çå
Flexbox æ¯ CSS å¼¹æ§çåå¸å±æ¨¡åï¼Flexible Box Layout Moduleï¼ç缩åï¼å®è¢«ä¸é¨è®¾è®¡åºæ¥ç¨äºåå»ºæ¨ªåææ¯çºµåçä¸ç»´é¡µé¢å¸å±ãè¦ä½¿ç¨ flexboxï¼ä½ åªéè¦å¨æ³è¦è¿è¡ flex å¸å±çç¶å
ç´ ä¸åºç¨display: flex ï¼ææç´æ¥åå
ç´ é½å°ä¼æç
§ flex è¿è¡å¸å±ãæä»¬æ¥çä¸ä¸ªä¾åã
设置 display:flex
ä¸é¢è¿äº HTML æ è®°æè¿°äºä¸ä¸ª class 为wrapperç容å¨å
ç´ ï¼å®çå
鍿ä¸ä¸ª<div>å
ç´ ãå®ä»¬å¨æä»¬çè±æææ¡£å½ä¸ï¼ä¼é»è®¤å°ä½ä¸ºåå
ç´ ä»ä¸å°ä¸è¿è¡æ¾ç¤ºã
ç°å¨ï¼å½æä»¬ædisplay: flexæ·»å å°å®çç¶å
ç´ æ¶ï¼è¿ä¸ä¸ªå
ç´ å°±èªå¨æåè¿è¡æåãè¿æ¯ç±äºå®ä»¬åæäºflex 项 (flex items)ï¼æç
§ flex 容å¨ï¼ä¹å°±æ¯å®ä»¬çç¶å
ç´ ï¼çä¸äº flex ç¸å
³çåå¼è¿è¡ flex å¸å±ï¼å®ä»¬æ´æ´é½é½ææä¸è¡ï¼æ¯å 为ç¶å
ç´ ä¸flex-directionçå弿¯rowãå®ä»¬å
¨é½è¢«æä¼¸è³åæé«çå
ç´ é«åº¦ç¸åï¼æ¯å 为ç¶å
ç´ ä¸align-items屿§çå弿¯stretchãè¿å°±æå³çææçåå
ç´ é½ä¼è¢«æä¼¸å°å®ä»¬ç flex 容å¨çé«åº¦ï¼å¨è¿ä¸ªæ¡ä¾éå°±æ¯ææ flex 项䏿é«çä¸é¡¹ãææé¡¹ç®é½ä»å®¹å¨çå¼å§ä½ç½®è¿è¡æåï¼æåæä¸è¡åï¼å¨å°¾é¨çä¸ä¸ç空ç½ã
.wrapper {
display: flex;
}
<div class="wrapper">
<div class="box1">One</div>
<div class="box2">Two</div>
<div class="box3">Three</div>
</div>
设置 flex 屿§
é¤äºä¸è¿°å¯ä»¥è¢«åºç¨å° flex 容å¨ç屿§ä»¥å¤ï¼è¿æå¾å¤å±æ§å¯ä»¥è¢«åºç¨å° flex 项 (flex items) ä¸é¢ãè¿äºå±æ§å¯ä»¥æ¹å flex é¡¹å¨ flex å¸å±ä¸å ç¨å®½/é«çæ¹å¼ï¼å 许å®ä»¬éè¿ä¼¸ç¼©æ¥éåºå¯ç¨ç©ºé´ã
ä½ä¸ºä¸ä¸ªç®åçä¾åï¼æä»¬å¯ä»¥å¨æä»¬çææåå
ç´ ä¸æ·»å flex 屿§ï¼å¹¶èµå¼ä¸º1ï¼è¿ä¼ä½¿å¾ææçåå
ç´ é½ä¼¸å±å¹¶å¡«å
容å¨ï¼è䏿¯å¨å°¾é¨çä¸ç©ºç½ï¼å¦æææ´å¤ç©ºé´ï¼é£ä¹åå
ç´ ä»¬å°±ä¼å徿´å®½ï¼åä¹ï¼ä»ä»¬å°±ä¼å徿´çªã餿¤ä¹å¤ï¼å¦æä½ å¨ HTML æ è®°ä¸æ·»å äºä¸ä¸ªæ°å
ç´ ï¼é£ä¹å®ä»¬ä¹ä¼å徿´å°ï¼æ¥ä¸ºæ°å
ç´ åé 空é´ââä¸ç®¡ææ ·ï¼æç»å®ä»¬ä¼è°æ´èªå·±ç´å°å ç¨ç¸å宽度ç空é´ã
.wrapper {
display: flex;
}
.wrapper > div {
flex: 1;
}
<div class="wrapper">
<div class="box1">One</div>
<div class="box2">Two</div>
<div class="box3">Three</div>
</div>
夿³¨ï¼ä¸ºäºæ¾å°æ´å¤å ³äº Flexbox çä¿¡æ¯ï¼ççæä»¬ç Flexbox çæç« ã
Grid å¸å±
Flexbox ç¨äºè®¾è®¡æ¨ªåæçºµåçå¸å±ï¼è Grid å¸å±å被设计ç¨äºåæ¶å¨ä¸¤ä¸ªç»´åº¦ä¸æå ç´ æè¡ååæåæ´é½ã
设置 display: grid
å flex 䏿 ·ï¼ä½ å¯ä»¥éè¿æå® display ç弿¥è½¬å° grid å¸å±ï¼display: gridãä¸é¢çä¾å使ç¨äºä¸ flex ä¾å类似ç HTML æ è®°ï¼æè¿°äºä¸ä¸ªå®¹å¨åè¥å¹²åå
ç´ ãé¤äºä½¿ç¨display:gridï¼æä»¬è¿åå«ä½¿ç¨ grid-template-rows å grid-template-columns ä¸¤ä¸ªå±æ§å®ä¹äºä¸äºè¡ååç轨éãå®ä¹äºä¸ä¸ª1frçåï¼è¿æä¸¤ä¸ª100pxçè¡ä¹åï¼æ éåå¨åå
ç´ ä¸æå®ä»»ä½è§åï¼å®ä»¬èªå¨å°æåå°äºæä»¬åå»ºçæ ¼åå½ä¸ã
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
grid-gap: 10px;
}
<div class="wrapper">
<div class="box1">One</div>
<div class="box2">Two</div>
<div class="box3">Three</div>
<div class="box4">Four</div>
<div class="box5">Five</div>
<div class="box6">Six</div>
</div>
å¨ç½æ ¼å æ¾ç½®å ç´
䏿¦ä½ æ¥æäºä¸ä¸ª gridï¼ä½ ä¹å¯ä»¥æ¾å¼å°å°å
ç´ ææ¾å¨éé¢ï¼è䏿¯ä¾èµäºæµè§å¨è¿è¡èªå¨æåãå¨ä¸é¢ç第äºä¸ªä¾åéï¼æä»¬å®ä¹äºä¸ä¸ªåä¸é¢ä¸æ ·ç gridï¼ä½æ¯è¿ä¸æ¬¡æä»¬åªæä¸ä¸ªåå
ç´ ãæä»¬å©ç¨ grid-column å grid-row ä¸¤ä¸ªå±æ§æ¥æå®æ¯ä¸ä¸ªåå
ç´ åºè¯¥ä»åªä¸è¡/åå¼å§ï¼å¹¶å¨åªä¸è¡/åç»æãè¿å°±è½å¤è®©åå
ç´ å¨å¤ä¸ªè¡/åä¸å±å¼ã
.wrapper {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
grid-gap: 10px;
}
.box1 {
grid-column: 2 / 4;
grid-row: 1;
}
.box2 {
grid-column: 1;
grid-row: 1 / 3;
}
.box3 {
grid-row: 2;
grid-column: 3;
}
<div class="wrapper">
<div class="box1">One</div>
<div class="box2">Two</div>
<div class="box3">Three</div>
</div>
夿³¨ï¼è¿ä¸¤ä¸ªä¾ååªæ¯å±ç¤ºäº grid å¸å±çå°å±±ä¸è§ï¼è¦æ·±å ¥äºè§£ grid å¸å±ï¼è¯·åé æä»¬çæç« Grid Layoutã
è¿ç¯æåçå ¶ä½é¨åä»ç»äºå ¶ä»çå¸å±æ¹å¼ï¼å®ä»¬ä¸ä½ ç页é¢ç主è¦å¸å±ç»æå ³ç³»ä¸å¤§ï¼ä½æ¯å´è½å¤å¸®å©ä½ å®ç°ç¹æ®çæä½ãåæ¶ï¼åªè¦ä½ çè§£äºæ¯ä¸ä¸ªå¸å±ä»»å¡çåè¡·ï¼ä½ å°±è½å¤é©¬ä¸æè¯å°åªä¸ç§å¸å±æ´éåä½ çç»ä»¶ã
æµ®å¨
æä¸ä¸ªå
ç´ âæµ®å¨â(float) èµ·æ¥ï¼ä¼æ¹å该å
ç´ æ¬èº«å卿£å¸¸å¸å±æµï¼normal flowï¼ä¸è·éå®çå
¶ä»å
ç´ çè¡ä¸ºãè¿ä¸å
ç´ ä¼æµ®å¨å°å·¦ä¾§æå³ä¾§ï¼å¹¶ä¸ä»æ£å¸¸å¸å±æµ (normal flow) ä¸ç§»é¤ï¼è¿æ¶åå
¶ä»çå¨å´å
容就ä¼å¨è¿ä¸ªè¢«è®¾ç½®æµ®å¨ (float) çå
ç´ å¨å´ç¯ç»ã
float 屿§æå个å¯è½çå¼ï¼
leftâ å°å ç´ æµ®å¨å°å·¦ä¾§ãrightâ å°å ç´ æµ®å¨å°å³ä¾§ãnoneâ é»è®¤å¼ï¼ä¸æµ®å¨ãinheritâ ç»§æ¿ç¶å ç´ çæµ®å¨å±æ§ã
å¨ä¸é¢è¿ä¸ªä¾åå½ä¸ï¼æä»¬æä¸ä¸ª<div>å
ç´ æµ®å¨å°å·¦ä¾§ï¼å¹¶ä¸ç»äºä»ä¸ä¸ªå³ä¾§çmarginï¼ææåæ¨å¼ãè¿ç»äºæä»¬æåç¯ç»çè¿ä¸ª<div>å
ç´ çææï¼å¨ç°ä»£ç½é¡µè®¾è®¡å½ä¸ï¼è¿æ¯ä½ å¯ä¸éè¦å¦ä¼çäºæ
ã
<h1>Simple float example</h1>
<div class="box">Float</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam
dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus
ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus
laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum,
tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus
neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat
volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros
pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec
lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.
</p>
.box {
float: left;
width: 150px;
height: 150px;
margin-right: 30px;
}
夿³¨ï¼CSS æµ®å¨çç¥è¯ä¼å¨æä»¬å ³äº æµ®å¨çæç¨å½ä¸è¢«è¯¦ç»å°è§£éã餿¤ä¹å¤ï¼å¦æä½ æ³è¦äºè§£å¨ Flexbox å Grid å¸å±åºç°ä¹åæä»¬æ¯å¦ä½è¿è¡åå¸å±çï¼ä»ç¶æå¯è½ç¢°å°è¿ç§æ å½¢ï¼ï¼è¯·é 读æä»¬å ³äºä¼ ç»å¸å±æ¹å¼çæç« ã
å®ä½ææ¯
å®ä½ (positioning) è½å¤è®©æä»¬æä¸ä¸ªå ç´ ä»å®åæ¬å¨æ£å¸¸å¸å±æµ (normal flow) ä¸åºè¯¥å¨çä½ç½®ç§»å¨å°å¦ä¸ä¸ªä½ç½®ãå®ä½ (positioning) 并䏿¯ä¸ç§ç¨æ¥ç»ä½ å主è¦é¡µé¢å¸å±çæ¹å¼ï¼å®æ´åæ¯è®©ä½ å»ç®¡çåå¾®è°é¡µé¢ä¸çä¸ä¸ªç¹æ®é¡¹çä½ç½®ã
æä¸äºé常æç¨çææ¯å¨ç¹å®çå¸å±ä¸ä¾èµäºposition屿§ãåæ¶ï¼çè§£å®ä½ (positioning) ä¹è½å¤å¸®å©ä½ çè§£æ£å¸¸å¸å±æµ (normal flow)ï¼çè§£æä¸ä¸ªå
ç´ ç§»åºæ£å¸¸å¸å±æµ (normal flow) æ¯æä¹ä¸åäºã
æäºç§ä¸»è¦çå®ä½ç±»åéè¦æä»¬äºè§£ï¼
- éæå®ä½ï¼Static positioningï¼æ¯æ¯ä¸ªå ç´ é»è®¤ç屿§ââå®è¡¨ç¤ºâå°å ç´ æ¾å¨ææ¡£å¸å±æµçé»è®¤ä½ç½®ââæ²¡æä»ä¹ç¹æ®çå°æ¹âã
- ç¸å¯¹å®ä½ï¼Relative positioningï¼å 许æä»¬ç¸å¯¹äºå ç´ å¨æ£å¸¸çææ¡£æµä¸çä½ç½®ç§»å¨å®ââå æ¬å°ä¸¤ä¸ªå ç´ å æ¾å¨é¡µé¢ä¸ãè¿å¯¹äºå¾®è°åç²¾å设计ï¼design pinpointingï¼é常æç¨ã
- ç»å¯¹å®ä½ï¼Absolute positioningï¼å°å
ç´ å®å
¨ä»é¡µé¢çæ£å¸¸å¸å±æµï¼normal layout flowï¼ä¸ç§»åºï¼ç±»ä¼¼å°å®åç¬æ¾å¨ä¸ä¸ªå¾å±ä¸ãæä»¬å¯ä»¥å°å
ç´ ç¸å¯¹äºé¡µé¢ç
<html>å ç´ è¾¹ç¼åºå®ï¼æè ç¸å¯¹äºè¯¥å ç´ çæè¿è¢«å®ä½ç¥å å ç´ ï¼nearest positioned ancestor elementï¼ãç»å¯¹å®ä½å¨åå»ºå¤æå¸å±æææ¶é常æç¨ï¼ä¾å¦éè¿æ ç¾æ¾ç¤ºåéèçå 容颿¿æè éè¿æé®æ§å¶æ»å¨å°å±å¹ä¸çä¿¡æ¯é¢æ¿ã - åºå®å®ä½ï¼Fixed positioningï¼ä¸ç»å¯¹å®ä½é常类似ï¼ä½æ¯å®æ¯å°ä¸ä¸ªå ç´ ç¸å¯¹æµè§å¨è§å£åºå®ï¼è䏿¯ç¸å¯¹å¦å¤ä¸ä¸ªå ç´ ãè¿å¨åå»ºç±»ä¼¼å¨æ´ä¸ªé¡µé¢æ»å¨è¿ç¨ä¸æ»æ¯å¤äºå±å¹çæä¸ªä½ç½®ç导èªèåæ¶é常æç¨ã
- ç²æ§å®ä½ï¼Sticky positioningï¼æ¯ä¸ç§æ°çå®ä½æ¹å¼ï¼å®ä¼è®©å
ç´ å
ä¿æå
position: static䏿 ·çå®ä½ï¼å½å®çç¸å¯¹è§å£ä½ç½®ï¼offset from the viewportï¼è¾¾å°æä¸ä¸ªé¢è®¾å¼æ¶ï¼å®å°±ä¼åposition: fixed䏿 ·å®ä½ã
ç®åå®ä½ç¤ºä¾
æä»¬å°å±ç¤ºä¸äºç¤ºä¾ä»£ç æ¥çæè¿äºå¸å±ææ¯ãè¿äºç¤ºä¾ä»£ç é½ä½ç¨å¨ä¸é¢è¿ä¸ä¸ªç¸åç HTML ä¸ï¼
<h1>Positioning</h1>
<p>I am a basic block level element.</p>
<p class="positioned">I am a basic block level element.</p>
<p>I am a basic block level element.</p>
该 HTML å°ä½¿ç¨ä»¥ä¸ CSS é»è®¤æ ·å¼ï¼
body {
width: 500px;
margin: 0 auto;
}
p {
background-color: rgb(207, 232, 220);
border: 2px solid rgb(79, 185, 227);
padding: 10px;
margin: 10px;
border-radius: 5px;
}
æ¸²æææå¦ä¸ï¼
ç¸å¯¹å®ä½
ç¸å¯¹å®ä½ (relative positioning) è®©ä½ è½å¤æä¸ä¸ªæ£å¸¸å¸å±æµ (normal flow) ä¸çå ç´ ä»å®çé»è®¤ä½ç½®æåæ è¿è¡ç¸å¯¹ç§»å¨ãæ¯å¦å°ä¸ä¸ªå¾æ å¾ä¸è°ä¸ç¹ï¼ä»¥ä¾¿æ¾ç½®æåãæä»¬å¯ä»¥éè¿ä¸é¢çè§åæ·»å ç¸å¯¹å®ä½æ¥å®ç°ææï¼
.positioned {
position: relative;
top: 30px;
left: 30px;
}
è¿éæä»¬ç»ä¸é´æ®µè½çposition ä¸ä¸ª relativeå¼ââè¿å±æ§æ¬èº«ä¸åä»»ä½äºæ
ï¼æä»¥æä»¬è¿æ·»å äºtopåleft屿§ãè¿äºå¯ä»¥å°åå½±åçå
ç´ åä¸åå³ç§»ââè¿å¯è½çèµ·æ¥åä½ ææå¾
çç¸åï¼ä½ä½ éè¦æå®çææ¯å·¦è¾¹åé¡¶é¨çå
ç´ è¢«âæ¨å¼âä¸å®è·ç¦»ï¼è¿å°±å¯¼è´äºå®çåä¸åå³ç§»å¨ã
æ·»å æ¤ä»£ç å°ç»åºä»¥ä¸ç»æï¼
.positioned {
position: relative;
background: rgba(255, 84, 104, 0.3);
border: 2px solid rgb(255, 84, 104);
top: 30px;
left: 30px;
}
ç»å¯¹å®ä½
ç»å¯¹å®ä½ç¨äºå°å ç´ ç§»åºæ£å¸¸å¸å±æµ (normal flow)ï¼ä»¥åæ çå½¢å¼ç¸å¯¹äºå®ç容å¨å®ä½å° web 页é¢çä»»ä½ä½ç½®ï¼ä»¥åå»ºå¤æçå¸å±ãæè¶£çæ¯ï¼å®ç»å¸¸è¢«ç¨äºä¸ç¸å¯¹å®ä½åæµ®å¨çååå·¥ä½ã
å尿们æåçéå®ä½ç¤ºä¾ï¼æä»¬å¯ä»¥æ·»å 以ä¸ç CSS è§åæ¥å®ç°ç»å¯¹å®ä½ï¼
.positioned {
position: absolute;
top: 30px;
left: 30px;
}
è¿éæä»¬ç»æä»¬çä¸é´æ®µä¸ä¸ªpositionç absoluteå¼ï¼å¹¶ä¸ååé¢ä¸æ ·å ä¸ top åleft 屿§ã使¯ï¼æ·»å æ¤ä»£ç å°ç»åºä»¥ä¸ç»æï¼
.positioned {
position: absolute;
background: rgba(255, 84, 104, 0.3);
border: 2px solid rgb(255, 84, 104);
top: 30px;
left: 30px;
}
è¿åä¹åæªç¶ä¸åï¼å®ä½å
ç´ ç°å¨å·²ç»ä¸é¡µé¢å¸å±çå
¶ä½é¨åå®å
¨å离ï¼å¹¶ä½äºé¡µé¢çé¡¶é¨ãå
¶ä»ä¸¤æ®µç°å¨é å¨ä¸èµ·ï¼å¥½åä¹åé£ä¸ªä¸é´æ®µè½ä¸åå¨ä¸æ ·ãtopåleft屿§å¯¹ç»å¯¹ä½ç½®å
ç´ çå½±åä¸åäºç¸å¯¹ä½ç½®å
ç´ ãå¨è¿ä¸æ¡ä¾å½ä¸ï¼ä»ä»¬æ²¡ææå®å
ç´ ç¸å¯¹äºåå§ä½ç½®çç§»å¨ç¨åº¦ãç¸åï¼å¨è¿ä¸æ¡ä¾å½ä¸ï¼å®ä»¬æå®å
ç´ åºè¯¥ä»é¡µé¢è¾¹ççé¡¶é¨å左边çè·ç¦» (ç¡®åå°è¯´ï¼æ¯ <html>å
ç´ çè·ç¦»)ãæä»¬ä¹å¯ä»¥ä¿®æ¹ä½ä¸ºå®¹å¨çé£ä¸ªå
ç´ ï¼å¨è¿éæ¯<html>å
ç´ ï¼ï¼è¦äºè§£è¿æ¹é¢çç¥è¯ï¼åè§å
³äºå®ä½ (positioning)ç课ç¨
æä»¬ç°å¨ææ¶ä¸è®¨è®ºåºå®å®ä½ï¼fixed positioningï¼ââå®åºæ¬ä¸ä»¥ç¸åçæ¹å¼å·¥ä½ï¼é¤äºå®ä»ç¶åºå®å¨æµè§å¨çªå£çè¾¹ç¼ï¼è䏿¯å®å®ä½çç¶èç¹çè¾¹ç¼ã
åºå®å®ä½
åºå®å®ä½ (fixed positioning) åç»å¯¹å®ä½ (absolute positioning) 䏿 ·ï¼å°å ç´ ä»ææ¡£æµ (document flow) å½ä¸ç§»åºäºã使¯ï¼å®ä½çåæ ä¸ä¼åºç¨äº"容å¨"è¾¹æ¡æ¥è®¡ç®å ç´ çä½ç½®ï¼èæ¯ä¼åºç¨äºè§å£ (viewport) è¾¹æ¡ãå©ç¨è¿ä¸ç¹æ§ï¼æä»¬å¯ä»¥è½»æ¾æåºä¸ä¸ªåºå®ä½ç½®çèåï¼èä¸ååºä¸ç页颿»å¨çå½±åã
å¨è¿ä¸ªä¾åéé¢ï¼æä»¬å¨ HTML å äºä¸æ®µå¾é¿çææ¬æ¥ä½¿å¾é¡µé¢å¯æ»å¨ï¼åå äºä¸ä¸ªå¸¦æposition: fixedççåã
<h1>Fixed positioning</h1>
<div class="positioned">Fixed</div>
<p>Paragraph 1.</p>
<p>Paragraph 2.</p>
<p>Paragraph 3.</p>
.positioned {
position: fixed;
top: 30px;
left: 30px;
}
ç²æ§å®ä½
ç²æ§å®ä½ (sticky positioning) æ¯æåä¸ç§æä»¬è½å¤ä½¿ç¨çå®ä½æ¹å¼ãå®å°é»è®¤çéæå®ä½ (static positioning) ååºå®å®ä½ (fixed positioning) ç¸æ··åãå½ä¸ä¸ªå
ç´ è¢«æå®äºposition: stickyæ¶ï¼å®ä¼å¨æ£å¸¸å¸å±æµä¸æ»å¨ï¼ç´å°å®åºç°å¨äºæä»¬ç»å®è®¾å®çç¸å¯¹äºå®¹å¨çä½ç½®ï¼è¿æ¶åå®å°±ä¼åæ¢éæ»å¨ç§»å¨ï¼å°±åå®è¢«åºç¨äºposition: fixed䏿 ·ã
.positioned {
position: sticky;
top: 30px;
left: 30px;
}
夿³¨ï¼æ³è¦åç°æ´å¤å ³äºå®ä½çä¿¡æ¯ï¼è¯·åé æä»¬çPositioningåPractical positioning examplesæç« ã
è¡¨æ ¼å¸å±
HTML è¡¨æ ¼å¯¹äºæ¾ç¤ºè¡¨æ ¼æ°æ®æ¯å¾å¥½çï¼ä½æ¯å¾å¤å¹´åââ卿µè§å¨ä¸æ¯æåºæ¬ç CSS ä¹åââweb å¼å人åè¿å»ä¹å¸¸å¸¸ä½¿ç¨è¡¨æ ¼æ¥å®ææ´ä¸ªç½é¡µå¸å±ââå°å®ä»¬ç页çã页èãä¸åçåççæ¾å¨ä¸åç表è¡ååä¸ãè¿å¨å½æ¶æ¯ææçï¼ä½å®æå¾å¤é®é¢ââ表å¸å±æ¯ä¸çµæ´»çï¼ç¹éçæ è®°ï¼é¾ä»¥è°è¯åè¯ä¹ä¸çéè¯¯ï¼æ¯å¦ï¼å±å¹é 读å¨ç¨æ·å¨å¯¼èªè¡¨å¸å±æ¹é¢æé®é¢ï¼ã
ä¸ä¸ª<table>æ ç¾ä¹æä»¥è½å¤åè¡¨æ ¼é£æ ·å±ç¤ºï¼æ¯ç±äº css é»è®¤ç»<table>æ ç¾è®¾ç½®äºä¸ç» table å¸å±å±æ§ãå½è¿äºå±æ§è¢«åºç¨äºæåé<table>å
ç´ æ¶ï¼è¿ç§ç¨æ³è¢«ç§°ä¸ºâä½¿ç¨ CSS è¡¨æ ¼âã
ä¸é¢è¿ä¸ªä¾åå±ç¤ºäºä¸ä¸ªè¿æ ·çç¨æ³ãä½¿ç¨ CSS è¡¨æ ¼æ¥è¿è¡å¸å±ï¼å¨ç°å¨è¿ä¸ªæ¶é´ç¹åºè¯¥è¢«è®¤ä¸ºæ¯ä¸ç§ä¼ ç»æ¹æ³ï¼å®é常ä¼è¢«ç¨äºå ¼å®¹ä¸äºä¸æ¯æ Flexbox å Grid çæµè§å¨ã
让æä»¬æ¥çä¸ä¸ªä¾åãé¦å
ï¼å建 HTML 表åçä¸äºç®åæ è®°ãæ¯ä¸ªè¾å
¥å
ç´ é½æä¸ä¸ªæ ç¾ï¼æä»¬è¿å¨ä¸ä¸ªæ®µè½ä¸å
å«äºä¸ä¸ªæ é¢ã为äºè¿è¡å¸å±ï¼æ¯ä¸ªæ ç¾/è¾å
¥å¯¹é½å°è£
å¨<div>ä¸ã
<form>
<p>First of all, tell us your name and age.</p>
<div>
<label for="fname">First name:</label>
<input type="text" id="fname" />
</div>
<div>
<label for="lname">Last name:</label>
<input type="text" id="lname" />
</div>
<div>
<label for="age">Age:</label>
<input type="text" id="age" />
</div>
</form>
ç°å¨ï¼æä»¬ä¾åä¸ç CSSãé¤äºä½¿ç¨ display 屿§å¤ï¼å¤§å¤æ° CSS 齿¯ç¸å½æ®éçã <form>, <div>, <label>å<input>被åç¥è¦å嫿¾ç¤ºè¡¨ã表è¡å表åå
ââåºæ¬ä¸ï¼å®ä»¬ä¼å HTML è¡¨æ ¼æ è®°ä¸æ ·ï¼å¯¼è´æ ç¾åè¾å
¥å¨é»è®¤æ
åµä¸æåæ´é½ãæä»¬æè¦åçå°±æ¯æ·»å ä¸äºå¤§å°ãè¾¹ç¼ççï¼è®©ä¸åçèµ·æ¥é½å¥½ä¸ç¹ï¼æä»¬å°±å®æäºã
ä½ ä¼æ³¨æå°æ 颿®µè½å·²ç»ç»åºäº display: table-caption;ââè¿ä½¿å¾å®çèµ·æ¥å°±åä¸ä¸ªè¡¨æ ¼ <caption>ââåæ¶åºäºè®¾è®¡éè¦ï¼æä»¬éè¿ caption-side: bottom; åè¯æ é¢åºè¯¥å±ç¤ºå¨è¡¨æ ¼çåºé¨ï¼å³ä½¿è¿ä¸ª <p> æ è®°å¨æºç 䏿¯å¨ <input> ä¹åãè¿å°±è½è®©ä½ æä¸ç¹çµæ´»çå¼¹æ§ã
html {
font-family: sans-serif;
}
form {
display: table;
margin: 0 auto;
}
form div {
display: table-row;
}
form label,
form input {
display: table-cell;
margin-bottom: 10px;
}
form label {
width: 200px;
padding-right: 5%;
text-align: right;
}
form input {
width: 300px;
}
form p {
display: table-caption;
caption-side: bottom;
width: 300px;
color: #999;
font-style: italic;
}
ç»æå¦ä¸ï¼
ä½ å¯ä»¥å¨ css-tables-example.html çå°é¢è§ç (ä¹å¯ä»¥è§æºç )
å¤åå¸å±
å¤åå¸å±æ¨¡ç»ç»äºæä»¬ ä¸ç§æå 容æåæåºçæ¹å¼ï¼å°±åææ¬å¨æ¥çº¸ä¸æå飿 ·ãç±äºå¨ web å 容éè®©ä½ çç¨æ·å¨ä¸ä¸ªåä¸éè¿ä¸ä¸æ»å¨æ¥é 读两ç¯ç¸å ³çææ¬æ¯ä¸ç§éå¸¸ä½æçæ¹å¼ï¼é£ä¹æå 容æåæå¤åå¯è½æ¯ä¸ç§æç¨çææ¯ã
è¦æä¸ä¸ªå转åæå¤åå®¹å¨ (multicol container)ï¼æä»¬å¯ä»¥ä½¿ç¨ column-count屿§æ¥åè¯æµè§å¨æä»¬éè¦å¤å°åï¼ä¹å¯ä»¥ä½¿ç¨column-widthæ¥åè¯æµè§å¨ä»¥è³å°æä¸ªå®½åº¦çå°½å¯è½å¤ç忥填å
容å¨ã
å¨ä¸é¢è¿ä¸ªä¾åä¸ï¼æä»¬ä»ä¸ä¸ª class 为containerç<div>容å¨å
ç´ éè¾¹çä¸å HTML å¼å§ã
<div class="container">
<h1>Multi-column layout</h1>
<p>Paragraph 1.</p>
<p>Paragraph 2.</p>
</div>
æä»¬æå®äºè¯¥å®¹å¨çcolumn-width为 200 åç´ ï¼è¿è®©æµè§å¨å建äºå°½å¯è½å¤ç 200 åç´ ç忥填å
è¿ä¸å®¹å¨ãæ¥çä»ä»¬å
±å使ç¨å©ä½çç©ºé´æ¥ä¼¸å±èªå·±ç宽度ã
.container {
column-width: 200px;
}
æ»ç»
æ¬ææä¾äºå ³äºä½ åºè¯¥äºè§£çææå¸å±ææ¯çç®è¦æ¦è¿°ãé 读æ´å¤å ³äºæ¯ä¸é¡¹ææ¯çä¿¡æ¯ï¼