CSS çå对é½
CSS çå对é½ï¼Box Alignmentï¼æ¨¡åæå®äºå¨åç§ CSS çåå¸å±æ¨¡åï¼å¦åå¸å±ï¼è¡¨å¸å±ï¼å¼¹æ§å¸å±åç½æ ¼å¸å±ä¸ï¼ä¸çåå¯¹é½æå ³ç CSS åè½ãè¯¥æ¨¡åæ¨å¨å»ºç«ä¸ç§è½ä¸è´å°å¨ CSS 䏿å®å¯¹é½çæ¹æ³ãè¿ä»½ææ¡£è¯¦è¿°äºåºç°å¨è¯¥è§èä¸çä¸è¬æ¦å¿µã
夿³¨ï¼æ¯ç§å¸å±æ¹æ³çææ¡£é½å°è¯¦ç»è¯´æå¨å ¶ä¸æ¯å¦ä½åºç¨âçå对é½âç
è¾èç坹齿¹æ³
ä¼ ç»ä¸ï¼CSS ç对é½åè½é常æéãæä»¬å¯ä»¥å©ç¨ text-align 坹齿æ¬ï¼å©ç¨ auto margin 对é½åï¼å¹¶ä¸å©ç¨ vertical-align 屿§å¨è¡¨æ ¼ (table) æè
è¡å
å (inline-block) å¸å±ä¸å¯¹é½åãç°å¨ Inline Layout ä¸ CSS Text 模å䏿¶µçäºææ¬å¯¹é½çå
容ï¼èçå坹齿¨¡å让æä»¬ç¬¬ä¸æ¬¡æ¥æäºå®æ´çæ°´å¹³ä¸åç´å¯¹é½çè½åã
å¦æä½ æåå¦ä¹ è¿å¼¹æ§çåï¼Flexboxï¼ï¼ä½ å¯è½ä¼è§å¾è¿äºå±æ§æ¯å¼¹æ§çåè§èçä¸é¨åãç¡®å®ï¼æäºå±æ§æ¯åå¨å¼¹æ§çåç Level 1 æ åä¸ï¼ä¸è¿è§èæåºæä»¬åºè¯¥æå°çå对é½è§èï¼å 为å®å¯è½ä¼å¼¹æ§çåçåºç¡ä¸å¢å é¢å¤çåè½ã
åºæ¬ç¤ºä¾
ä¸é¢çä¾åæ¼ç¤ºäºé¨åçå对é½å±æ§å¨ç½æ ¼åå¼¹æ§çå䏿¯å¦ä½è¢«ä½¿ç¨çã
CSS ç½æ ¼å¸å±å¯¹é½ç¤ºä¾
ä¸é¢ä½¿ç¨ç½æ ¼å¸å±ç示ä¾ä¸ï¼å¨è¡å
è½´ (inline axis)ï¼ä¸»è½´ (main axis)ï¼ä¸å¸å±äºåºå®å®½åº¦ç轨éåï¼ç½æ ¼å®¹å¨ä¸æä¸äºå¤ä½ç空é´ãè¿äºç©ºé´æ¯ä½¿ç¨ justify-content æ¥åé
çãå¨åè½´ (block axis)ï¼äº¤åè½´ (cross axis)ï¼ä¸ï¼é¡¹ç®å¨ä»ä»¬çç½æ ¼åºåå
ç坹齿¯ç¨ align-items æ¥æ§å¶çã第ä¸ä¸ªé¡¹ç®éè¿å° align-self 设置为 centerï¼éè½½äºç»å
设置ç align-items 屿§ã
å¼¹æ§çå对é½ç¤ºä¾
å¨ä¸é¢ç示ä¾ä¸ï¼ä¸ä¸ªå¼¹æ§é¡¹ç®åå«å©ç¨ justify-content å align-items 屿§å¨ä¸»è½´å交åè½´ä¸å¯¹é½ã第ä¸ä¸ªé¡¹ç®éè¿å° align-self 设置为 centerï¼éè½½äºç»å
设置ç align-items 屿§ã
å ³é®æ¦å¿µä¸æ¯è¯
è§è详ç»ä»ç»äºä¸äºå¯¹é½æ¯è¯ï¼è®©æä»¬è½æ´å®¹æå°å¨ç¹å®å¸å±æ¹æ³å çå ·ä½å®ç°ä¹å¤è®¨è®ºè¿äºå¯¹é½å±æ§ãå¦å¤å ¶ä¸è¿æä¸äºå¯¹äºææå¸å±æ¹æ³é½éç¨çå ³é®æ¦å¿µã
ä¸ä¹¦å模å¼çå ³ç³»
坹齿¹å¼ä¸ä¹¦åæ¨¡å¼æå ³ï¼å 为å¨å¯¹é½é¡¹ç®æ¶ï¼æä»¬ä¸ä¼èèæ¯å¦å°å ¶å¯¹é½å°é¡¶é¨ï¼å³ä¾§ï¼åºé¨å左侧çç©ç尺寸ã䏿¤ç¸åï¼æä»¬æ ¹æ®æ£å¨ä½¿ç¨çç¹å®ç»´åº¦çå¼å§åç»ææ¥æè¿°å¯¹é½æ¹å¼ãè¿æ ·å¯ç¡®ä¿ä¸ç®¡ææ¡£å ·æææ ·ç书忍¡å¼ï¼å¯¹é½æ¹å¼æ»æ¯ä»¥ç¸åçæ¹å¼å·¥ä½ã
对é½ç两个维度
使ç¨çå对é½å±æ§æ¶ï¼æä»¬ä¼å¨ä¸¤ä¸ªè½´çå ¶ä¸ä¹ä¸ä¸å¯¹é½å 容ââè¡å è½´ (inline axis)ï¼æç§°ä¸»è½´ (main axis)ï¼ååè½´ (block axis)ï¼æç§°äº¤åè½´ (cross axis)ï¼ãå èè½´æ¯å¨ä½¿ç¨ç¹å®å使¨¡å¼ä¸ï¼æ²¿å¥ååè¯çæµå¨æ¹åçè½´ãæ¯å¦å¯¹äºè±è¯æè 䏿æ¥è¯´ï¼å èè½´æ¯æ°´å¹³çãåè½´æ¯æ²¿å (block)ï¼æ¯å¦æ®µè½å ç´ ï¼çå¸å±æ¹å延伸çè½´ï¼å®ä¼åç´ç©¿è¿è¡å è½´ã

å½å¨è¡å
è½´ä¸å¯¹é½é¡¹ç®æ¶ï¼ä½ å°ç¨å°ä»¥ justify- å¼å¤´ç屿§ï¼
å½å¨åè½´ä¸å¯¹é½é¡¹ç®æ¶ï¼ä½ å°ç¨å°ä»¥ align- å¼å¤´ç屿§ï¼
å¨å¼¹æ§çåå¸å±ä¸ï¼æ
åµè¦æ´å¤æäºï¼å ä¸ºå½ flex-direction 设置为 row æ¶ï¼ä¸é¢çè¿äºè¯´æ³é½æ¯å¯¹çãä½å½å¼¹æ§çå设为 column æ¶åæ°å¥½ç¸åï¼è¡å
è½´ä¸ç对é½ç¨ justify- æå®ï¼åè½´ä¸ç¨ align- ï¼ãå æ¤ï¼å½ä½¿ç¨å¼¹æ§çåæ¶ï¼ç¨ä¸»è½´å交åè½´æ¥æèè¦æ¯ç¨è¡å
è½´ååè½´æ¥æèæ´ç´è§äºã justify- 屿§æ»æ¯ç¨æ¥å¯¹é½ä¸»è½´ï¼è align- 屿§æ»æ¯ç¨æ¥å¯¹é½äº¤åè½´çã
对é½ä¸»ä½
对é½ä¸»ä½ æçæ¯è¢«å¯¹é½çç©ä½ãå¯¹äº justify-self æ align-self ï¼æè
å°ä»¥ä¸ä¸¤å¼ç¨ justify-items æ align-items æç»è®¾ç½®æ¶ï¼å¯¹é½ä¸»ä½å°æ¯ä½¿ç¨æ¤å±æ§çå
ç´ çå¤è¾¹è·çå (margin box)ã justify-content å align-content 屿§å å¸å±æ¹æ³èå¼ã
对é½å®¹å¨
对é½å®¹å¨ æçæ¯å¯¹é½ä¸»ä½è¢«å¯¹é½æ¶æå¤ççåãè¿ä¸è¬æçæ¯å å«å¯¹é½ä¸»ä½çåãä¸ä¸ªå¯¹é½å®¹å¨å¯è½å å«ä¸ä¸ªæå¤ä¸ªå¯¹é½ä¸»ä½ã
ä¸å¾å±ç¤ºäºä¸ä¸ªå é¨å å«ä¸¤ä¸ªå¯¹é½ä¸»ä½ç对é½å®¹å¨ã

åé对é½
å¦æè®¾ç½®ç坹齿¹å¼æ æ³å®ç°ï¼é£ä¹ åéå¯¹é½ å°æ´¾ä¸ç¨åºå¹¶ä¸å¤çå¯ç¨ç空é´ãè¿ä¸åé坹齿¯ä¸ºæ¯ç§å¸å±æ¹æ³å嫿å®çï¼ä¸å¨æ¹æ³ç对åºé¡µé¢ä¸æè¯¦ç»è¯´æã
对é½çç§ç±»
è§èä¸è¯¦è¿°äºä¸ç§ä¸åç坹齿¹å¼ï¼è¿äºå¯¹é½ä½¿ç¨å ³é®åå¼ã
- ä½ç½®å¯¹é½ (Positional alignment)ï¼éè¿å¯¹é½ä¸»ä½ä¸å®ç对é½å®¹å¨é´çå ³ç³»æ¥æå®å¯¹é½ä¸»ä½çä½ç½®ã
- åºçº¿å¯¹é½ (Baseline alignment)ï¼è¿äºå ³é®åæå¯¹é½çä½å¨ä¸ä¸ªå¯¹é½ä¸ä¸æä¸å¤ä¸ªå¯¹é½ä¸»ä½çåºçº¿ (baseline) ä¹é´çå ³ç³»ã
- åå¸å¯¹é½ (Distributed alignment)ï¼è¿äºå ³é®åæå¯¹é½çä½å¤ä¸ªå¯¹é½ä¸»ä½é´ç©ºé´çåå¸
ä½ç½®å¯¹é½å ³é®åçå¼
以ä¸è¿äºå¼æ¯ä¸ºä½ç½®å¯¹é½å®ä¹çï¼å¹¶ä¸å¯ä»¥ç¨äºæå®å
容对é½ç justify-content å align-content 屿§ä¸æå®èªå¯¹é½ç justify-self å align-self 屿§ä¸ã
centerstartendself-startself-endflex-startä» ç¨äºå¼¹æ§çåå¸å±flex-endä» ç¨äºå¼¹æ§çåå¸å±leftright
é¤äºä¸å±å¹çç©ç屿§ç¸å
³çç©çå¼ left ä¸ right ä¹å¤ï¼å
¶ä»çææå¼é½æ¯ä¸å
容ç书忍¡å¼ç¸å
³çé»è¾å¼ã
æ¯å¦ï¼å½ä½¿ç¨ CSS ç½æ ¼å¸å±æ¶ï¼å¦æä½ 使ç¨äºè±è¯å¹¶ä¸æ justify-content 设为 start ï¼é£ä¹è¿ä¸è®¾ç½®å°ä¼å¨è¡å
ç»´åº¦ä¸æé¡¹ç®ç§»å¨å°èµ·å§ä½ç½®ï¼ä¹å°±æ¯å·¦ä¾§ï¼å 为è±è¯ä¸å¥åçå¼å¤´å°±å¨å·¦ä¾§ãå¦æä½ ä½¿ç¨çæ¯é¿æä¼¯è¯ï¼ä¸ç§ä»å·¦å°å³ä¹¦åçè¯è¨ï¼é£ä¹ç¸åç start å¼ä¼å¯¼è´é¡¹ç®ç§»å¨å°å³ä¾§ï¼å 为页é¢çå³æè¾¹ææ¯é¿æä¼¯è¯ä¸å¥åçå¼å¤´ã
è¿ä¸¤ä¸ªä¾åé½è®¾ç½®äº justify-content: startï¼ä½æ¯èµ·å§ä½ç½®å´éç书忍¡å¼èæ¹åäºã

åºçº¿å¯¹é½
åºçº¿å¯¹é½çå
³é®è¯æ¯ç¨äºå¯¹é½ä¸ç»å¯¹é½ä¸»ä½ççåçåºçº¿çãä»ä»¬å¯ä»¥ç¨äºæå®å
容对é½ç justify-content å align-content 屿§ä¸æå®èªå¯¹é½ç justify-self å align-self 屿§ä¸ã
baselinefirst baselinelast baseline
åºçº¿å
容对é½ââ为 justify-content æ align-content æå®åºçº¿å¯¹é½ââéç¨äºæé¡¹ç®æè¡æåçå¸å±æ¹æ³ãéè¿å¨çåå
æ·»å å¡«å
ï¼ä½¿å¯¹é½ä¸»ä½çåºçº¿å½¼æ¤å¯¹é½ã
åºçº¿èªå¯¹é½éè¿å¨çåå¤é¨å¢å å¤è¾¹è·ï¼ä»èç§»å¨çåï¼å®ç°å¯¹é½ãèªå¯¹é½æ¯æå½ä½¿ç¨ justify-self æ align-selfï¼åæè
æè
å°ä»¥ä¸ä¸¤å¼ç¨ justify-items æ align-items æç»è®¾ç½®çæ
åµã
åå¸å¯¹é½
åå¸å¯¹é½å
³é®å æ¯ç¨äº align-content å justify-content 屿§çãè¿äºå
³é®åå®ä¹äºå¨å·²ç»æ¾ç¤ºå¯¹é½ä¸»ä½åï¼å
¶ä½çææç©ºé´ä¼åçä»ä¹ãåå¼å¦ä¸ï¼
stretchspace-betweenspace-aroundspace-evenly
ä¾å¦å¨å¼¹æ§å¸å±ä¸ï¼åå§æ¶æ¯éè¿ flex-start 对é½é¡¹ç®çãå¨ä½¿ç¨æ°´å¹³çï¼èªä¸èä¸ç书忍¡å¼ï¼å¦è±ææä¸æï¼æ¶ï¼è¥ flex-direction 设为 row ï¼é£ä¹é¡¹ç®å°ä»æå·¦è¾¹å¼å§ï¼æ¾ç¤ºé¡¹ç®åçææå¯ç¨ç©ºé´é½æ¾ç½®å¨é¡¹ç®ä¹åã

å¦æä½ å¨å¼¹æ§å®¹å¨ä¸è®¾ç½®äº justify-content: space-between ï¼é£ä¹å¯ç¨ç©ºé´ä¼è¢«å
±äº«å¹¶æ¾ç½®å¨é¡¹ç®ä¹é´ã

为äºä½¿è¿äºå ³é®åçæï¼å¨é¡¹ç®è¦å¯¹é½ç维度ä¸å¿ é¡»æå¯ç¨ç©ºé´ã没æç©ºé´ï¼å°±æ²¡æç©ºé´å¯ä»¥åå¸ã
溢åºå¯¹é½
safe ä¸ unsafe å
³é®åå¯ä»¥å¸®å©æä»¬å®ä¹å½å¯¹é½ä¸»ä½æ¯å¯¹é½å®¹å¨æ´å¤§æ¶ç表ç°ãsafe å
³é®åä¼å¨ä¸ä¸ªæå®ç坹齿¹å¼å¯¼è´äºæº¢åºæ¶å¯¹é½å° start ï¼å
¶ç®çæ¯é¿å
âæ°æ®ä¸¢å¤±âï¼å³é¡¹ç®çä¸é¨åè¶
åºäºå¯¹é½å®¹å¨çè¾¹ç并䏿 æ³æ»å¨å°è¯¥ä½ç½®ã
å¦æä½ æå® unsafe ï¼é£ä¹å³ä½¿å¯¹é½æ¹å¼ä¼å¯¼è´æ°æ®ä¸¢å¤±ä¹ä¼æç
§è¯¥å¯¹é½æ¹å¼æ¥å¯¹é½ã
çåé´çé´é
çå对é½è§èè¿å
æ¬ gap, row-gapï¼å column-gap 屿§ãè¿äºå±æ§å
许å¨ä¸è¡æä¸åä¹é´è®¾ç½®ä¸è´çé´éï¼åªè¦å¸å±æ¯ç¨è¿ç§æ¹æ³æå项ç®çã
gap 屿§æ¯ row-gap å column-gap 屿§çç®åï¼è®©æä»¬å¯ä»¥ä¸æ¬¡æ§ç设置è¿äºå±æ§ï¼
å¨ä¸é¢çä¾åä¸ï¼ä¸ä¸ªç½æ ¼å¸å±ä½¿ç¨äº gap ç®åæ¥å¨è¡è½¨éä¸è®¾ç½® 10px çé´éï¼å¨å轨éä¸è®¾ç½® 2em çé´éã
ä¸é¢è¿ä¸ªä¾åå¨ gap ä¹å¤æè¿ä½¿ç¨äº grid-gap 屿§ãgap 屿§åæ¬å¨ç½æ ¼å¸å±ä¸æ¯æ¥æ grid- åç¼çï¼èæäºæµè§å¨åªæ¯æè¿äºæåç¼ççæ¬ã
带åç¼ççæ¬å°ä½ä¸ºæªå¸¦åç¼çæ¬çå«åä¿çï¼ä¸è¿ä½ 对äºè¿äºç¬¬ä¸æ¹çåç¼ä½ æ»æ¯å¯ä»¥ä¸¤è
å
¼åï¼å ä¸ä¸ä¸ª grid-gap 屿§ç¶ååå ä¸ä¸ä¸ªå
·æç¸åçå¼ç gap 屿§ã
å¦å¤ï¼è¯·æ³¨æå ¶ä»çä¸è¥¿å¯è½ä¼å¢å æ¾ç¤ºçè§è§é´éï¼ä¾å¦ä½¿ç¨ç©ºé´åå¸å ³é®åæä¸ºé¡¹ç®å¢å å¤è¾¹è·ã
详ç»è¯´æå个对é½å±æ§ç页é¢
ç±äº CSS çå对é½å±æ§çå®ç°æ¹å¼åå³äºä¸å®ä»¬ç¸äº¤äºçè§èï¼å æ¤è¯·åè§ä»¥ä¸æ¯ç§å¸å±ç±»åç页é¢ï¼ä»¥è·åå ³äºå¦ä½å°å¯¹é½å±æ§ä¸å ¶ä¸èµ·ä½¿ç¨ç详ç»ä¿¡æ¯ï¼
åè
>CSS 屿§
è¯æ±è¡¨
æå
- CSS å¼¹æ§çåæåï¼Basic concepts of Flexbox
- CSS å¼¹æ§çåæåï¼Aligning items in a flex container
- CSS ç½æ ¼æåï¼Box alignment in CSS Grid layouts