ç®ä»
Bootstrap æ¯å ¨çæå欢è¿çåç«¯æ¡æ¶ï¼ç¨äºæå»ºååºå¼ãç§»å¨è®¾å¤ä¼å çç½ç«ãå©ç¨ jsDelivr åæä»¬æä¾çå ¥é¨æ¨¡æ¿å¸®å©ä½ å¿«éææ¡ Bootstrapã
å¿«éå¼å§
å¦ä½è®©é¡¹ç®å¿«éç¨ä¸ Bootstrapï¼ ä½¿ç¨ jsDelivrï¼è¿æ¯ä¸ä¸ªå è´¹ä¸å¼æºç CDNï¼å¨ä½ ç页é¢ä¸æ·»å å 个æä»¶é¾æ¥å°±è½å¼å§ä½ ç Bootstrap 乿 å¦ãä½ æ¯å¦å¨ä½¿ç¨è½¯ä»¶å 管ç卿æ³ä¸è½½ Bootstrap çæºæä»¶ï¼ 请转å°ä¸è½½é¡µé¢æ¥ç说æã
CSS æä»¶
å¤å¶ä»¥ä¸ <link> æ ç¾å¹¶ç²è´´å° <head> æ ç¾å
ï¼æ³¨æï¼å¡å¿
æ¾å°å
¶å®ææ CSS æ ·å¼åé¢ã
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
JS æä»¶
Bootstrap èªå¸¦ç大é¨åç»ä»¶é½éè¦ä¾èµ JavaScript æè½èµ·ä½ç¨ãå ·ä½æ¥è¯´ï¼è¿äºç»ä»¶ä¾èµ jQueryãPopper 以åæä»¬èªå·±å¼åç JavaScript æä»¶ãæä»¬ä½¿ç¨çæ¯ jQuery ç slim æå»ºçæ¬ï¼å½ç¶ï¼å®æ´çæ¬ä¹æ¯è¢«æ¯æçã
å¤å¶ä¸é¢ç <script> æ ç¾ ç²è´´å°é¡µé¢åºé¨ï¼å¹¶ä¸æ¯å¨ </body> æ ç¾ä¹åï¼å°±è½èµ·ä½ç¨äºã注æï¼é¡ºåºå¾éè¦ï¼ä¸è½éï¼é¦å
æ¯ jQueryï¼ç¶åæ¯ Popperï¼æåæ¯æä»¬èªå·±ç JavaScript æä»¶ã
éæå
æä»¬æä¾ç两个éæå
é½å
å«äº Bootstrap çæ¯ä¸ä¸ª JavaScript æä»¶ãå³ bootstrap.bundle.js å bootstrap.bundle.min.jsï¼æ¤å¤ï¼è¿å
å«äº Popperï¼ç¨äºæ¯æå·¥å
·æç¤ºï¼tooltipï¼åå¼¹åºæ¡ï¼popoverï¼åè½ï¼ä½æ¯ä¸å
å« jQueryãæ·»å å°é¡µé¢ä¸æ¶ï¼æç
§å
jQuery å Bootstrap ç JavaScript éæå
ç顺åºä¾æ¬¡æ·»å ãæå
³ Bootstrap ä¸å
å«äºåªäºå
å®¹çæ´å¤ä¿¡æ¯ï¼è¯·åè§æä»¬ç å
容 ç« èã
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-7ymO4nGrkm372HoSbq1OY2DP4pEZnMiA+E0F3zPr+JQQtQ82gQ1HPY3QIVtztVua" crossorigin="anonymous"></script>
åå¼å è½½
å¦æä½ å³å®åå¼å è½½å个æä»¶ï¼é£ä¹å¡å¿ ææ¤é¡ºåºï¼é¦å æ¯ jQueryï¼å ¶æ¬¡æ¯ Popperï¼å¦æä½ 使ç¨å·¥å ·æç¤ºåå¼¹åºæ¡çè¯ï¼ï¼æåæ¯æä»¬æä¾ç JavaScript æä»¶ã
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-Lge2E2XotzMiwH69/MXB72yLpwyENMiOKX8zS8Qo7LDCvaBIWGL+GlRQEKIpYR04" crossorigin="anonymous"></script>
Bootstrap ç»ä»¶
æ¯å¦å¥½å¥åªäºç»ä»¶æç¡®éè¦ jQueryï¼æè æä»¬æä¾ç JavaScript æä»¶ä»¥å Popperï¼è¯·åå»ä¸é¢çç»ä»¶è¯¦æ 龿¥è¿è¡æ¥çã妿ä¸ç¡®å®é¡µé¢å¦ä½ç»æï¼è¯·ç»§ç»é 读并åè示ä¾é¡µé¢æ¨¡æ¿ã
Show components requiring JavaScript
- Alerts for dismissing
- Buttons for toggling states and checkbox/radio functionality
- Carousel for all slide behaviors, controls, and indicators
- Collapse for toggling visibility of content
- Dropdowns for displaying and positioning (also requires Popper)
- Modals for displaying, positioning, and scroll behavior
- Navbar for extending our Collapse plugin to implement responsive behavior
- Scrollspy for scroll behavior and navigation updates
- Tooltips and popovers for displaying and positioning (also requires Popper)
å ¥é¨æ¨¡æ¿
请确ä¿ä½¿ç¨ææ°ç页é¢è®¾è®¡åå¼åæ åæ¥è®¾ç½®é¡µé¢ãä¹å°±æ¯è¯´ï¼ä½¿ç¨ HTML5 ææ¡£ç±»åï¼doctypeï¼ãå¹¶å
å«ä¸ä¸ªè®¾ç½® viewportï¼è§å£ï¼ç <meta> æ ç¾ä»¥å®ç°æ£ç¡®çååºå¼å¸å±è¡ä¸ºãè¿äºè¦æ±ç»åå¨ä¸èµ·ä¹åï¼ä½ ç页é¢åºå½å¦ä¸æç¤ºï¼
<!doctype html>
<html lang="zh-CN">
<head>
<!-- å¿
é¡»ç meta æ ç¾ -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap ç CSS æä»¶ -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
<title>Hello, world!</title>
</head>
<body>
<h1>Hello, world!</h1>
<!-- JavaScript æä»¶æ¯å¯éçãä»ä»¥ä¸ä¸¤ç§å»ºè®®ä¸éæ©ä¸ä¸ªå³å¯ï¼ -->
<!-- é项 1ï¼jQuery å Bootstrap éæå
ï¼éæäº Popperï¼ -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-7ymO4nGrkm372HoSbq1OY2DP4pEZnMiA+E0F3zPr+JQQtQ82gQ1HPY3QIVtztVua" crossorigin="anonymous"></script>
<!-- é项 2ï¼Popper å Bootstrap ç JS æä»¶åèªç¬ç« -->
<!--
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.min.js" integrity="sha384-Lge2E2XotzMiwH69/MXB72yLpwyENMiOKX8zS8Qo7LDCvaBIWGL+GlRQEKIpYR04" crossorigin="anonymous"></script>
-->
</body>
</html>
以ä¸å°±æ¯å¯¹äºä¸ä¸ªé¡µé¢ç大è´è¦æ±ãè¯·è®¿é® å¸å±ææ¡£ æ æä»¬ç宿¹ç¤ºä¾ ä½ä¸ºä½ å¸å±ç½ç«å 容åç»ä»¶çåèã
éè¦çå ¨å±è®¾ç½®
Bootstrap ä¾èµä¸äºéè¦çå ¨å±æ ·å¼å设置ï¼ä¸é¨éå¯¹çæ¯è·¨æµè§å¨çæ ·å¼ ç»ä¸åï¼normalizationï¼ï¼éè¦ä½ å¨ä½¿ç¨ Bootstrap ä¹åéç¹äºè§£ãæ¥ä¸æ¥å¼å§æä»¬åé©ä¹æ å§ã
HTML5 ææ¡£ç±»åï¼doctypeï¼
Bootstrap è¦æ±ææ¡£ç±»åï¼doctypeï¼æ¯ HTML5ãå¦ææ²¡æè¿ä¸è®¾ç½®ï¼ä½ å°±ä¼çå°ä¸äºå¤æªçãä¸å®æ´çæ ·å¼ï¼å æ¤ï¼æ£ç¡®è®¾ç½®ææ¡£ç±»åï¼doctypeï¼å°±è½è½»æ¾é¿å è¿äºå°æ°ã
<!doctype html>
<html lang="zh-CN">
...
</html>
ååºå¼å¸å±ç¸å ³ç æ ç¾
Bootstrap éç¨çæ¯ ç§»å¨è®¾å¤ä¼å
ï¼mobile firstï¼ çå¼åçç¥ï¼å æ¤ï¼æä»¬é¦å
为移å¨è®¾å¤ä¼å代ç ï¼ç¶åæ ¹æ®éè¦å¹¶å©ç¨ CSS åªä½æ¥è¯¢åè½æ¥ç¼©æ¾ç»ä»¶ã为äºç¡®ä¿ææè®¾å¤é½è½æ¯ææ£ç¡®ç渲æå触å±ç¼©æ¾ï¼è¯·å¡å¿
å¨ <head> æ ç¾ä¸ æ·»å 让 viewportï¼è§å£ï¼æ¯æååºå¼å¸å±ç æ ç¾ã
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
ä½ å¯ä»¥å¨ å ¥é¨æ¨¡æ¿ 䏿¥çæ¤ç¤ºä¾çå®é åºç¨ã
CSS çæ¨¡å
为äºè®© CSS ä¸ç尺寸设置æ´å ç´è§ï¼æä»¬å°å
¨å±ç box-sizing ä» content-box è°æ´ä¸º border-boxãè¿æ ·å¯ä»¥ç¡®ä¿ padding ç设置ä¸ä¼å½±å计ç®å
ç´ çæç»å®½åº¦ï¼ä½æ¯ä¼å¯¼è´æäºç¬¬ä¸æ¹è½¯ä»¶ï¼ä¾å¦ Google Maps å Google Custom Search Engineï¼åºç°é®é¢ã
å¨ä¸ºæ°ä¸å¤çæ åµä¸ï¼ä½ éè¦ä¸é¨è¦çè¿ä¸äºè®¾ç½®ï¼å¯ä»¥ä½¿ç¨å¦ä¸ç¤ºä¾ä»£ç ï¼
.selector-for-some-widget {
box-sizing: content-box;
}
å©ç¨ä¸è¿°ä»£ç çæ®µï¼åµå¥çå
ç´ ï¼å
æ¬éè¿ ::before å ::after çæçå
容ï¼é½å°ç»§æ¿ .selector-for-some-widget ææå®ç box-sizing å¼ã
äºè§£æå ³ çæ¨¡åå尺寸设置 çæ´å¤ä¿¡æ¯ã
Reboot
ä¸ºäºæåè·¨æµè§å¨çæ¸²æææï¼æä»¬ä½¿ç¨ Reboot æ¥çº æ£ä¸åæµè§å¨å设å¤ä¹é´çå·®å¼ï¼å¹¶åæ¶ä¸ºå¸¸è§ç HTML å ç´ æä¾æ´å¤æ´åéçæ ·å¼éç½®ã
社åº
ææ¡ææ°ç Bootstrap å¼åè¿å±æ¹é¢çä¿¡æ¯ï¼å¹¶éè¿è¿äºæç¨çèµæºä¿æä¸ç¤¾åºçç»ä¹ ã
- é 读并订é Bootstrap 宿¹å客.
- å å ¥ 宿¹ Slack ä¼è®®å®¤.
- å¨ IRC é¢éä¸ä¸ Bootstrap åéä¸äººè天ã
irc.libera.chatserveræå¡å¨,#bootstrapé¢éã - å¨ Stack Overflow ä¸å¯ä»¥æ¾å°æ´å®é
ç帮å©ï¼æ ç¾ä¸º
bootstrap-4ï¼. - 妿å¼åè
对 Bootstrap è¿è¡ä¿®æ¹æå¢å åè½å¹¶éè¿ç±»ä¼¼ npm çååæºå¶æ¥å叿°ç软件å
çè¯ï¼è¯·å¡å¿
为软件å
æ·»å
bootstrapå ³é®åï¼ä»¥å¢å æ´å¤çæå ã
ä½ ä¹å¯ä»¥å ³æ³¨ @getbootstrap on Twitter 以è·åææ°çå «å¦åè¶ èµçé³è§é¢ã
CSPï¼å 容å®å ¨çç¥ï¼ååµå ¥å¼ SVG
æäº Bootstrap ç»ä»¶å¨ CSS ä¸å
å«äºåµå
¥å¼ SVGï¼ä»¥ä¾¿è½å¤è®©ä¸ºç»ä»¶è®¾ç½®çæ ·å¼å¨æµè§å¨å设å¤ä¹é´ä¿æä¸è´ã对äºè®¾ç½®äºæ´ä¸¥æ ¼ç CSP é
ç½®çç»ç»ï¼æä»¬å¨ææ¡£ä¸å¯¹ææåºç°åµå
¥å¼ SVGï¼å
¨é¨éè¿ background-image 设置ï¼çå°æ¹é½è¿è¡äºè¯´æï¼å æ¤ä½ å¯ä»¥æ´å¥½çæ§å¶ã
- å ³éæé® ï¼ç¨äºè¦åæ¡åæ¨¡ææ¡ï¼
- èªå®ä¹å¤éæ¡ååéæé®
- 表åå¼å ³
- 表åéªè¯å¾æ
- èªå®ä¹éæ©èå
- è½®ææ§ä»¶
- å¯¼èªæ¡åæ¢æé®
æ ¹æ® æ¤ç¤¾åºè®¨è®ºï¼å¨ä½ èªå·±ç代ç åºä¸è§£å³æ¤é®é¢çå 个éé¡¹å æ¬ï¼ç¨æ¬å°æç®¡çèµæºæ¿æ¢å URLï¼å é¤å¾ç并使ç¨å èå¾çï¼å¹¶é卿æç»ä»¶ä¸é½å¯ä»¥è¿æ ·åï¼ï¼ä¿®æ¹ CSP 设置ãæä»¬ç建议æ¯ä»ç»æ£æ¥ä½ èªå·±çå®å ¨çç¥ï¼å¹¶å¨å¿ è¦æ¶å³å®æä½³è·¯çº¿ã