CSS¼¼ÊõµÄÑݽø
CSSÊÇWeb¿ª·¢Öв»¿É»òȱµÄÒ»²¿·Ö£¬ÔÚǰ¶Ë¹¤³Ì»¯²»¶Ï½ø²½µÄ½ñÌ죬һ·½ÃæCSSÌØÐÔËæ×Ź淶µÄÉý¼¶Ô½À´Ô½·á¸»£¬ÁíÒ»·½Ã棬ǰ¶ËÒµÎñ¸´ÔÓÐÔµÄÔö¼Ó´øÀ´µÄ¹¤³ÌÓú¼ÓÅÓ´ó£¬
Çýʹ×Å¿ª·¢Õß²»¶ÏѰÕÒCSS¹¤³Ì»¯µÄ×î¼Ñʵ¼ù¡£
Web¿ª·¢Ä£¿é»¯Ç÷ÊÆ
²»¿É·ñÈÏ£¬ ÎÞÂÛ´ÓÏÖ´úǰ¶Ë¿ò¼Ü£¨React¡¢ Vue¡¢Angular¡¢ PolymerµÈ£©£¬ »¹ÊÇ´ÓW3CµÄWeb
Components²Ý°¸À´¿´£¬×é¼þ»¯ÒѾÊÇǰ¶Ë¿ª·¢µÄÖ÷Á÷֮ѡºÍδÀ´µÄ·¢Õ¹·½Ïò£¬ÕýÈçÔÚRedditÉÏÓÐÍøÓÑ˵µÀ¡°Facebook.com¡¯s
codebase includes over 20,000 components¡±¡£ ¹ãÒåÉÏ¿´£¬ËùÓÐÒ³ÃæÉ϶¼¿ÉÒÔ±»»®·Ö³ÉÒ»¸ö¸ö×é¼þ£¬Ïà¶ÔÓÚ¹ýÈ¥ÒÔÍøÒ³×÷Ϊ¿ª·¢µ¥Î»£¬ÒÔ×é¼þΪµ¥Î»¿ª·¢ÓÐ×ſɸ´ÓᢿÉÀ©Õ¹µÈһϵÁÐÓÐÀûÓÚÏîÄ¿¹¤³Ì»¯µÄÓŵ㡣
ÔÚÕâÖÖ×é¼þ»¯Ç÷ÊÆµÄ±³¾°Ï£¬CSSÄ£¿é»¯Ò²½¥½¥ÓÐן÷ÖÖ³¢ÊÔ¡£
Ô¤´¦ÀíÓëºó´¦Àí
Ô¤´¦Àí
±È½ÏÁ÷ÐеÄCSSÔ¤´¦ÀíÆ÷ÓÐSass¡¢LessºÍStylus£¬CSSÔ¤´¦ÀíÆ÷µÄ³öÏÖÖ÷ÒªÒòCSSȱÉÙ±à³ÌÓïÑÔµÄÁé»îÐÔ¶øÉú£¬ÊÇÒýÈëÁËһЩ±à³Ì¸ÅÄî¶øÉúµÄDSL£¬¿ª·¢Õß±àд¼ò½àµÄÓïÒ廯DSL´úÂ룬ÓÉÔ¤´¦ÀíÆ÷±àÒë³ÉCSS¡£
ÒÔSassΪÀý£¬¸ÃÔ¤´¦ÀíÆ÷Ö§³Ö.scss¡¢.sassÎļþÀàÐÍ£¬ÆäÓï·¨Ö§³Ö±äÁ¿¡¢Ñ¡ÔñÆ÷ǶÌס¢¼Ì³Ð£¨extend£©¡¢»ìºÏ£¨mixin£©ºÍһЩÂß¼Óï¾ä£¬Í¬Ê±»¹Ö§³Ö¿çÎļþµÄµ¼È빦ÄÜ£¬Òò¶øÊ¹µÃ¿ª·¢ÕßÄܹ»ºÜºÃµØÊ¹Óñà³Ì˼ÏëÊéдÑùʽ¡£
´Óʵ¼ÊʹÓÃÇé¿öÀ´¿´£¬¼¸¸öÔ¤´¦ÀíÆ÷¸÷ÓÐÓÅȱµã£¬´ÓÉçÇø»îÔ¾¶ÈÉÏ¿´Sass>Less>Stylus¡£SassÊÇÈý¸öÖмä×îÔçÒ²ÊÇ×î³ÉÊìµÄ£¬Òò¶øÓÐןܶ࿪Դ»ýÀۺͺܺñà³Ì·¶Ê½£¬ÏñÄÚÖÃÁ˺ܶàSassº¯ÊýµÄCompass¿ò¼Ü£¬¾ÍÊǺܺõÄÒ»¸öÀý×Ó¡£LessÏà¶ÔÓÚSassµÄÓŵãÔÚÓÚÊ®·ÖµÄÇáÁ¿£¬Ò²ÍêÈ«¼æÈÝCSS£¬µ«ÁíÒ»·½Ãæ¿É±à³ÌÄÜÁ¦²»ÈçSass£¬Bootstrap×îа汾µÄCSSÔ¤´¦ÀíÆ÷Ò²´ÓLess»»³ÉSass¡£StylusÀ´Ô´ÓÚNodeÉçÇø£¬Ê¹ÓÃÌåÑéÉϲ¢²»Ê䏸SassºÍLess£¬ÎÞÂÛÊDZàÒëËÙ¶È»¹ÊÇÓï·¨·¶Ê½£¬¸öÈË¿´À´£¬StylusÔÚijÖ̶ֳÈÉϸü¼ÓÓÅÓÚÆäËûÁ½¸ö¡£
ºó´¦Àí
ºó´¦ÀíÆ÷ÊǶÔÔÉúCSS½øÐд¦Àí²¢×îÖÕÉú³ÉCSSµÄ´¦ÀíÆ÷£¬¹ãÒåÉÏ»¹ÊǸöÔ¤´¦ÀíÆ÷£¬ÓëÉÏÃæÌáµ½µÄÔ¤´¦ÀíÆ÷²»Í¬µÄÊÇ£¬Ëü´¦ÀíµÄ¶ÔÏóÊDZê×¼CSS£¨Èçͼ1Ëùʾ£©£¬±È½ÏµäÐ͵ĺó´¦Àí¹¤¾ßÓÐÒÔϼ¸ÖÖ¡£
clean-css£ºÑ¹ËõCSS
AutoPrefixer£º×Ô¶¯Ìí¼ÓCSS3ÊôÐÔ¸÷ä¯ÀÀÆ÷µÄǰ׺
Rework£ºÈ¡´úStylusµÄ²å¼þ»¯¿ò¼Ü
PostCSS
ͼ1 Ô¤´¦ÀíÆ÷Óëºó´¦ÀíÆ÷¹ØÏµ
PostCSS
PostCSS×î³õÊÇ´ÓAutoPrefixerÏîÄ¿ÖгéÏó³öÀ´µÄ¿ò¼Ü£¬Ëü±¾Éí²¢²»¶ÔCSS×ö¾ßÌåµÄÒµÎñ²Ù×÷£¬Ö»Êǽ«CSS½âÎö³É³éÏóÓï·¨Ê÷£¨AST£©£¬ÑùʽµÄ²Ù×÷ÓÉÖ®ºóÔËÐеIJå¼þϵͳÍê³É£¨Èçͼ2Ëùʾ£©¡£ÕýÈçÆä±¾ÉíËùÑÔTransforming
styles with JS plugins¡±¡£

ͼ2 PostCSS ¹¤×÷»úÖÆ
¸ü¶àʱºòÎÒÃÇÔÚÌÖÂÛPostCSSµÄʱºò£¬²¢²»Ö¹Í£ÁôÔÚËüÊǽâÎöCSSµÄºËÐŤ¾ß£¬¸ü°üÀ¨Ëü´´½¨µÄ²å¼þϵͳ£¬¶ø½ñPostCSS×îΪÎüÒý¿ª·¢ÕßµÄÕýÊÇÆäÀ©Õ¹ÐÔ½ÏÇ¿µÄ²å¼þϵͳºÍ·á¸»µÄ²å¼þÖ§³Ö¡£
³£ÓõIJå¼þÓУº
1.Autoprefixer£º×Ô¶¯²¹È«CSSÊôÐÔ¼æÈÝÐÔǰ׺
2.postcss-cssnext£ºÊ¹ÓÃ×îеÄCSSÓï·¨
3.postcss-modules£º×é¼þÄÚ×Ô¶¯¹ØÁªÑùʽÖÁÑ¡ÔñÆ÷
4.Stylelint£ºCSSÓï·¨¼ì²éÆ÷µÈ
Èç¹ûÒÑÓеIJå¼þ²»ÄÜÂú×ãÏÖÓеÄÐèÇó£¬ÍêÈ«¿ÉÒÔÊÖдһ¸ö²å¼þ£º
//
¹Ù·½Ê¾Àýremתpx
var custom = function(css, opts){
css.eachDecl(function(decl){
decl.value = decl.value.replace(/\d+rem/, function(str){
return 16 * parseFloat(str) + "px";
});
});
}; |
µ±È»£¬PostCSSµÄ½âÎö²¢²»¾ÖÏÞÓÚCSS£¬½áºÏËüÌṩµÄ×Ô¶¨ÒåÓï·¨½âÎö½Ó¿Ú£¬ÍêÈ«¿ÉÒÔ¶¨Òå×Ô¼ºµÄÓï·¨¡£ÆäʵÀàËÆÓÚpostcss-scssµÄ²å¼þÉçÇøÒѾÓкܶàÁË£¬Ê¹ÓÃÕâЩ²å¼þ£¬¿ÉÒÔ½«ÔÀ´»ùÓÚSass¡¢LessµÈÔ¤´¦ÀíÆ÷µÄ´úÂëÇ¨ÒÆÖÁPostCSS¡£Ïà¶ÔÓÚ´«Í³µÄÔ¤´¦ÀíÆ÷£¬PostCSSÕâÖÖ¿ª·Åƽ̨Ð͵ÄÌåϵ£¬²»¾ÐÊø¿ª·¢ÕߵĿª·¢·½Ê½£¬Í¬Ê±Ò²´Ù½øÁ˸ü¶à¶ÔÓÚCSS½â¾ö·½°¸µÄ̽Ë÷¡£
»Ø¹ýÍ·À´¿´£¬ÎªÊ²Ã´»áÓÐCSSÔ¤´¦Àí²Ù×÷ºóµÄ´¦Àí²Ù×÷£¿ÆäʵÖ÷ÒªµÄÔÒòÔÚÓÚǰ¶ËÏîÄ¿µÄÅòÕÍʹµÃÓô«Í³ÊÖ¹¤±àд²¢Î¬»¤CSS±äµÃºÜ²»¿°£¬¸ù±¾ÔÒòÔòÊÇCSSȱÉÙ±à³ÌÓïÑÔÌØÐÔ£¬Òª×öµ½CSS´úÂëµÄÄ£¿é»¯ÒÔ¼°¸ß¸´ÓõijéÏó´¦Àí£¬¾Í±ØÐëÒýÈëһЩ±à³ÌµÄ˼Ïë¡£Ïà¶ÔÓÚJavaScript±ê×¼ÍÆ½øÒÔ¼°»ù´¡ÉèÊ©µÄÍ걸£¬CSSÔÚ±à³Ì·½ÃæµÄ̽Ë÷¸ü¶àÀ´×ÔÓÚÉçÇø£¬Ò²²¢ÎÞͳһµÄÊÂʵ±ê×¼£¬ÕâÒ²ÊÇCSS·¢Õ¹ÂäºóÓÚJavaScriptµÄÔÒò¡£
namespaceÔ¼Êø
Ò»·½ÃæÎÒÃÇÐèÒª¹Ø×¢¼¼ÊõÄܹ»´øÀ´´úÂëÉϵÄÄ£¿é»¯£¬ÁíÒ»·½ÃæÎÒÃÇÓÖҪ˼¿¼ÈçºÎʹÓÃÒ»¸öÁ¼ºÃµÄ·ç¸ñ¼Ü¹¹ÆðÏîÄ¿ÖеÄCSS¡£CSS³ýÁË´úÂëÍ⣬ÁíÒ»¸öºÜÖØÒªµÄ¾ÍÊÇCSSÑ¡Ôñ±ê¼Ç¡£¶øCSSÑ¡ÔñÆ÷µÄÃüÃû¿Õ¼äÊÇÈ«¾ÖµÄ£¬²¢Ã»Óоֲ¿µÄ¸ÅÄÒò¶øÈçºÎÀûÓúÃÕâ¸öÈ«¾ÖµÄ¿Õ¼ä£¬Ñ¡ÔñÁ¼ºÃµÄ½á¹¹·ç¸ñ£¬Ò²ÊÇÔÚ¿ª·¢¹ý³ÌÖбØÐ뿼Âǵġ£
OOCSS
OOCS£¨Object-Oriented CSS£©¼´ÃæÏò¶ÔÏóCSS£¬Ö÷ÒªÓÐÁ½¸öºËÐÄÔÔò¡£
·ÖÀë½á¹¹ºÍƤ·ô£¨Separate Structure and Skin£©
Ƥ·ô¼´Ò»Ð©Öظ´µÄÊÓ¾õÌØÕ÷£¬Èç±ß¿ò¡¢±³¾°¡¢ÑÕÉ«£¬·ÖÀëÊÇΪÁ˸ü¶àµÄ¸´Ó㻽ṹÊÇÖ¸ÔªËØ´óÐ¡ÌØÕ÷£¬Èç¸ß¶È¡¢¿í¶È¡¢±ß¾àµÈµÈ¡£
.button
{
padding: 10px;
box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
}
.widget {
overflow: auto;
box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
} |
¸ù¾Ý´ËÔÔò£¬ÎÒÃÇÐèÒª¶Ô¹«ÓÃµÄÆ¤·ô½øÐÐÌáÈ¡²¢·ÖÀ룬ÈçÏ¡£
.button
{
padding: 10px;
}
.widget {
overflow: auto;
}
.skin {
box-shadow: rgba(0, 0, 0, .5) 2px 2px 5px;
} |
·ÖÀëÈÝÆ÷ºÍÄÚÈÝ£¨Separate Container an Content£©
´òÆÆÈÝÆ÷ÄÚÔªËØ¶ÔÓÚÈÝÆ÷µÄÒÀÀµ£¬ÔªËØÑùʽӦ¸Ã¶ÀÁ¢´æÔÚ¡£ÈçÏÂÃæÊ¾Àý¡£
<div
class="container"><h2>xxx</h2></div>
.container h2 {...} |
ÉÏÃæµÄh2ÔªËØÒÀÀµÓÚ¸¸ÔªËØcontainer£¬¶ÔÓ¦´ËÔÔò£¬h2ÔªËØÐèҪʹÓÃÒ»¸öµ¥¶ÀµÄÑ¡ÔñÆ÷£¬ÈçÏ¡£
<div
class="container"><h2 class="category">xxx</h2></div>
.category {...} |
´Óʵ¼ùÖп´³ö£¬Ê¹ÓÃOOSCC·¶Ê½£¬×ñÊØÁËDRYµÄÔÔò£¬Äܹ»´óÁ¿¼õÉÙÖØ¸´µÄÑùʽ´úÂ룬Ìá¸ß´úÂ븴Óã»Í¬Ê±£¬ÊÓ¾õÔªËØ¿ÉÒÔÁé»î×éºÏ¸÷¸öÀàÃû£¬Õ¹Ê¾²»Í¬µÄЧ¹û£¬·á¸»µÄÀàÃûҲͬʱʹµÃÔªËØÓÐןüºÃµÄ¿É¶ÁÐÔ£»ÁíÒ»·½Ã棬ÓÉÓÚÈÝÆ÷ºÍÄÚÈݵķÖÀ룬CSSÍê³ÉÁËÓëHTML½á¹¹½âñî¡£
µ«Í¬Ê±Ò²»á´øÀ´Ò»Ð©È±µã£¬³éÏó¸´ÓûáʹclassÔ½À´Ô½¶à£¬¼«¶ËÇé¿öÏ¿ÉÄÜ»á²úÉúºÜ¶àÔ×ÓÀ࣬Õâ¶ÔÓÚÄÇЩƫÏòÓÚ¡°µ¥Ò»À´Ô´ÔÔò¡±µÄ¿ª·¢ÕßÀ´Ëµ²¢²»ÊÜ»¶Ó¡£
SMACSS
SMACSS£¨Scalable and Modular Architecture for CSS£©¼´Ä£¿é»¯¼Ü¹¹µÄ¿ÉÀ©Õ¹CSS£¬ËüÖ÷Òª½«¹æÔò·ÖΪÎåÀà¡£
»ù´¡£¨Base£©
tag selectµÄÑùʽ£¬ ¶¨Òå×î»ù´¡È«¾ÖÑùʽ£¬ ÈçCSS REST¡£
html,
body, form { margin: 0; padding: 0; }
a { color: #039; } a:hover { color: #03C; } |
²¼¾Ö£¨Layout£©
½«Ò³Ãæ·ÖΪ¸÷¸öÇøÓòµÄÔªËØ¿é¡£
Ä£¿é£¨Module£©
¿É¸´Óõĵ¥Ôª¡£ÔÚÄ£¿éÖУ¬ÐèҪעÒâµÄÊÇÑ¡ÔñÆ÷Ò»ÂÉÑ¡Ôñclass selector£¬±ÜÃâǶÌ××ÓÑ¡ÔñÆ÷£¬¼õÉÙÈ¨ÖØ£¬
·½±ãÍⲿ¸²¸Ç¡£
<div
class="pod pod-constrained">...</
div>
<div class="pod pod-callout">...</div>
.pod { width: 100%; }
.pod .pod-callout { width: 200px; }
.pod .pod-constrained{} |
״̬£¨State£©
״̬classÒ»°ãͨ¹ýJavaScript¶¯Ì¬¹ÒÔØµ½ÔªËØÉÏ£¬¿ÉÒÔ¸ù¾Ý״̬¸²¸ÇÔªËØÉÏÌØ¶¨ÊôÐÔ¡£
.tab
{ background-color: purple;... }
.is-tab-active { background-color:white; } |
Ö÷Ì⣨Theme£©
¿ÉÑ¡µÄÊÓ¾õÍâ¹Û¡£Ò»°ã¸ù¾ÝÐèÇóÓÐÑÕÉ«¡¢×ÖÌå¡¢²¼¾ÖµÈµÈ£¬ÊµÏÖÊǽ«ÕâЩÑùʽµ¥¶À³é³öÀ´£¬¸ù¾ÝÍⲿÌõ¼þ£¨dataÊôÐÔ¡¢Ã½Ìå²éѯµÈ£©¶¯Ì¬ÉèÖá£
SMACSSµÄÖ÷ÒªÓŵãÔÚÓÚ°´ÕÕ²»Í¬µÄÒµÎñÂß¼£¬½«Õû¸öCSS½á¹¹»¯·Ö¸ü¼ÓϸÖ£¬Ô¼ÊøºÃÃüÃû£¬×îС»¯Éî¶È£¬ÔÚ±àдµÄʱºò£¬Ê¹ÓÃSMACSS¹æ·¶Äܹ»¸üºÃµØ×éÖ¯CSSÎļþ½á¹¹ºÍclassÃüÃû¡£
BEM
BEM¼´Block Element Modifier£¬ÀàÃûÃüÃû¹æÔòΪBlock__Element¨CModifier¡£
1.BlockËùÊô×é¼þÃû³Æ
2.Element×é¼þÄÚÔªËØÃû³Æ
3.ModifierÔªËØ»ò×é¼þÐÞÊηû
ÆäºËÐÄ˼Ïë¾ÍÊÇ×é¼þ»¯¡£Ê×ÏÈÒ»¸öÒ³Ãæ¿ÉÒÔ°´²ã¼¶ÒÀ´Î»®·Ö³ö¶à¸ö×é¼þ£¬Æä´Î¾ÍÊǵ¥¶À±ê¼ÇÕâÐ©ÔªËØ¡£BEMͨ¹ý¼òµ¥µÄ¿é¡¢ÔªËØ¡¢ÐÞÊηûµÄÔ¼Êø¹æÔòÈ·±£ÀàÃûµÄΨһ£¬Í¬Ê±½«ÀàÑ¡ÔñÆ÷µÄÓïÒ廯ÌáÉýÁËÒ»¸öеĸ߶ȡ£
<form
class="form form--theme-xmas form--simple">
<input class="form__input" type="text"/>
<input class="form__submit form__submit--disabled"
type="submit" />
</form>
.form { }
.form--theme-xmas { }
.form--simple { }
.form__input { }
.form__submit { }
.form__submit--disabled { } |
BEMͨ¹ý¼òµ¥µÄÃüÃû¹æÔòʹµÃ¹ØÁªÀàÃûÔªËØÓïÒåÐÔ¡¢¿É¶ÁÐÔ¸üÇ¿£¬ÓÐÀûÓÚÏîÄ¿¹ÜÀíºÍ¶àÈËÐ×÷¡£Í¬Ê±BEM·½°¸Öв¢Ã»ÓÐǶÌ×£¬ËùÓÐÀàÃû×îdzÉî¶È£¬²¢²»»á³öÏÖǶÌ×¹ýÉîÄÑÒÔ¸²¸ÇµÄÇé¿ö£¬Ò×ÓÚά»¤¡¢¸´Óá£
ÁíÒ»·½Ã棬BEMÇ¿µ÷µ¥Ò»Ö°ÔðÔÔòºÍµ¥Ò»ÑùʽÀ´Ô´ÔÔò£¬Òâζ×Å´«Í³´¿ÊÖ¹¤CSS¿ÉÄÜ»á²úÉú´óÁ¿Öظ´µÄ´úÂ룬µ«ÊǽáºÏ¸÷ÖÖCSSÔ¤´¦ÀíºÍPostCSS¾Í¿ÉÒԺܺñÜÃâÎÊÌâµÄ²úÉú¡£ÁíÍ⣬Ëä˵ÔÔò¼òµ¥£¬µ«ÔÚʵ¼ÊʹÓÃÖУ¬Î¬»¤BEMµÄÃüÃûȷʵÐèҪһЩ³É±¾£¬ºÜ¶àʱºòÃüÃû·´¶ø³ÉÁËÒ»¼þÄÑÊ¡£
CSS in JS
CSS in JS·½°¸Ò»¿ªÊ¼ÊÇÓÉFacebook¹¤³ÌʦVjeuxÔÚÒ»´Î·ÖÏíÖÐÌá³öµÄ£¬Õë¶ÔCSSÔÚReact¿ª·¢ÖÐÓöµ½µÄ¸÷ÖÖÎÊÌâ£¬ËæºóÉçÇøÓ¿ÏÖÁ˸÷Ñù·½°¸¡£
ËäÈ»ÒÔÉÏÄ£¿é»¯µÄÃüÃûÔ¼¶¨¿ÉÒÔ½â¾ö·ç¸ñÉϵÄÎÊÌ⣬µ«ÕýÈçÉÏÎĶøÑÔ£¬Ò²ÒýÈëһЩ³É±¾¡£¶ø¶ÔÓÚһЩ¸ß¸´ÓõÄ×é¼þ£¬Ê¹ÓÃÒÔÉϸ߶ÈÓïÒ廯µÄ·½°¸ÊǸöºÜºÃµÄÑ¡Ôñ£¬ÕâÖֳɱ¾ÊDZØÐèµÄ£¬µ«¶ÔÓÚûÓи´ÓõÄÒµÎñ×é¼þÀ´Ëµ£¬ÏÔÈ»ÕâÖÖÃüÃûµÄ³É±¾´óÓÚÊÕÒæ£¬ÌرðÊÇÔÚ¶àÈËÐ×÷ʱºò¡£ÁíÍâ£¬Ãæ¶ÔÏÖ´úǰ¶Ë¿ò¼ÜµÄ·¢Õ¹£¬´¿¿¿CSS·½°¸²¢²»Äܺܺõؽâ¾ö¡£
CSS Modlue
CSS Module²»Í¬ÓÚVjeuxÍêÈ«·ÅÆúCSSµÄ×ö·¨£¬ËüÖ»ÊÇÑ¡ÔñÁËÓÃJavaScriptÀ´¹ÜÀíÑùʽÓëÔªËØµÄ¹ØÁª£¬CSS
ModuleΪÿ¸ö±¾µØ¶¨ÒåµÄÀàÃû¶¯Ì¬´´½¨Ò»¸öÈ«¾ÖΨһÀàÃû£¬È»ºó×¢Èëµ½UIÉÏ£¬ÊµÏÖ±àдÑùʽ¹æÔòµÄ¾Ö²¿Ä£¿é»¯¡£
css-loaderÄÚÖÃÖ§³ÖCSS Module£¬ Ö»ÐèÉèÖÃϲéѯ²ÎÊý£¬ ¼´¿ÉÔÚJavaScriptÖÐʹÓÃCSSÎļþµÄµ¼Èë¡£
{
loader: 'css-loader',
query: {
module: true,
localInentName: '[name]__[local]--[hash:base64:5]'
//
}
} |
ÔÚJavaScriptÖе¼ÈëCSSÎļþ£¬×îÖյõ½µÄÆäʵÊÇÒ»¸öCSSÎļþ¾¹ýparseºóÉú³ÉµÄÀàÃûÓ³Éä¶ÔÏó{[localName]:
[hashed-Name], ¡.}¡£
//
Header.jsx
import style from './Header.css'
...
console.log(style)//{header: 'Header__header--3kSIq_0'}
export default () => <div className={style.header}></div> |
ͬʱCSSÎļþÒ²»á±»±àÒë³É¶ÔÓ¦µÄÀàÃû¡£
.Header__header--3kSIq_0-
{}
// from Header.css .header{} |
´Ó¿ª·¢ÌåÑéÉÏ¿´£¬CSS-ModuleÕâÖÖ×ö·¨Èÿª·¢Õß²»±ØÔÚÀàÃûµÄÃüÃûÉÏСÐÄÒíÒí£¬Ö±½ÓʹÓÃËæ»ú±àÒëÉú³ÉΨһ±êʶ£¬ÈÃÀàÃû³ÉΪ¾Ö²¿±äÁ¿³ÉΪÁË¿ÉÄÜ¡£µ«Í¬Ê±Ò²ÒòÎªËæ»úÐÔ£¬Ê§È¥ÁËͨ¹ý´Ë¾Ö²¿ÀàÃûʵÏÖÑùʽ¸²¸ÇµÄ¿ÉÄÜÐÔ£¬¸²¸Çʱ²»µÃ²»¿¼ÂÇʹÓÃÆäËûÑ¡ÔñÆ÷£¨ÈçÊôÐÔÑ¡ÔñÆ÷£©¡£¶ÔÓÚ¸´ÓõÄ×é¼þ¶øÑÔ£¬Áé»îÐÔÊDZز»¿ÉÉٵģ¬ÕâÖÖ¾Ö²¿Ä£¿é»¯·½°¸²¢²»ÊʺÏÕâÖָ߶ȳéÏó¸´ÓõÄ×é¼þ£¬¶ø¶ÔÓÚÒ»´ÎÐÔÒµÎñ×é¼þȷʵÄܹ»ÌáÉý¿ª·¢Ð§ÂÊ¡£
ͬʱCSS Module»¹Ö§³ÖʹÓÃcomposesʵÏÖCSS´úÂëµÄ×éºÏ¸´Óá£
/*
button.css */
.base{}
.normal {
composes: base
...
}
// button.jsx
import style from './button.css'
export default () => <button className={style.normal}>°´°´</button>//
<button class="button__base--180HZ_0
button__normal--x38Eh_0">°´°´</button> |
µ±È»CSS Module»¹¿ÉÒÔÅäºÏ¸÷ÖÖÔ¤´¦ÀíÆ÷Ò»ÆðʹÓã¬Ö»ÐèÔÚcss-loader֮ǰÌí¼Ó¶ÔÓ¦µÄloader£¬µ«ÔÚ±àдµÄʱºòҪעÒâCSS
ModuleµÄÓï·¨ÒªÔÚ´¦ÀíÆ÷Ö®ºóºÏ·¨¡£Êµ¼ÊʹÓÃÖУ¬¶ÔÓÚCSS´úÂëµÄ½âñÈç¹ûÒýÈëÁËÔ¤´¦ÀíÆ÷£¬´úÂëÎļþµÄÄ£¿é»¯¾Í²»½¨ÒéʹÓÃcomposesÀ´½â¾ö¡£
styled-components
//
button
import styled from 'styled-compenents'
const Button = styled.button`
padding: 10px;
${props => props.primary ? 'palevioletred'
: 'white'};
`
<Button>°´Å¥</Button>
<Button primary>°´Å¥</Button> |
Æä±àÒëºóÒ²ÊÇÈçͬCSS-in-moduleÒ»Ñù£¬Ëæ»ú»ìÏýÉú³ÉÈ«¾ÖΨһÀàÃû£¬¶ÔÓ¦Éú³ÉCSSÎļþ¡£styledcomponentµÄºËÐÄÊÇ¡°Ñùʽ¼´×é¼þ¡±£¬½«×Ö·û´®½âÎö³ÉCSS£¬²¢´´½¨¶ÔÓ¦¸ÃÑùʽµÄJSXÔªËØ£¬ËüÓÐ×ÅJavaScriptÇ¿´óµÄ±à³ÌÄÜÁ¦£¬ÍêÈ«¿ÉÒÔʤÈΣ¬Í¬Ê±ÈÃ×é¼þÑùʽÓë×é¼þÂß¼ñîºÏÔÚÒ»Æð£¬ÕæÕý×öµ½×é¼þ½ôñîºÏÉÙÒÀÀµ¡£µ±È»ÓÐЩ¿ª·¢²»Ï²»¶ÕâÖÖñîºÏ£¬Ò²ÍêÈ«¿ÉÒÔ½«Ñùʽ×é¼þºÍÂß¼×é¼þ·ÖÀ룬¶øÔÚJavaScriptÖзÖÀë´úÂë±¾ÉíÒ²ÊǼþÒ×Ê¡£
µ±È»£¬styled-componentsÕæÕýµÄÓ¦Óò¢²»½ö½öÈç´Ë£¬ËüÍêÈ«ÊÇÒ»¸öÍ걸µÄÑùʽ½â¾ö·½°¸£¬ÓÐ×ÅÈçÀ©Õ¹¡¢Ö÷Ìâ¡¢·þÎñ¶ËäÖȾ¡¢Babel²å¼þ¡¢ReactNativeµÈһϵÁÐÖ§³Ö£¬Ò²ÉîÊÜһЩ¿ª·¢Õß»¶Ó¡£ÕâÀï±È½ÏÓÐȤµÄÊÇ¿´ËÆÆæ¹ÖµÄÓï·¨ÐÎʽ£¬
ÆäʵÊÇES6ÖÐÄ£°å×Ö·ûµÄÌØÐÔ¡£
styled-components±¾ÉíÊÇReactÉçÇøÕë¶ÔJSX²úÉúµÄÒ»ÖÖ·½°¸£¬µ±È»ÔÚVueÖÐͨ¹ývue-styledcomponentsÒ²ÄÜʹÓøù¦ÄÜ£¬µ«ÊÇʹÓÃÌåÑéÒ»°ã£¬ÎÞÂÛÊÇÔÚÄ£°åÀﻹÊÇÔÚJSXÖУ¬Ê¹ÓÃ×é¼þ¶¼ÐèÌáǰÉùÃ÷²¢×¢Èëµ½×é¼þ¹¹½¨²ÎÊýÖУ¬¹ý³ÌÊ®·Ö·±Ëö£¬¶øÇÒ²»Í¬ÓÚReact´¿JSXµÄ×é¼þäÖȾÓï·¨£¬VueÖв¢²»ÄܶԼÈÓеÄ×é¼þʹÓÃstyledÓï·¨¡£
µ«ÁíÒ»·½Ã棬½«CSSÍêȫдÔÚJavaScriptÖУ¬ÉçÇøÀïÖÐÒ²ÓкܶàÈ˳ַ´¶Ô̬¶È£¬react-css-modulesµÄ×÷Õß¾ÍרÃÅ·¢Îıíʾ·´¶Ôstyled-componentÕâÖÖÍêÈ«ÅׯúCSSÎļþµÄ¿ª·¢Ä£Ê½¡£
×ܽá
ÎÒÃÇÔÚ¿ª·¢Ö®Ç°£¬Ãæ¶Ô¸÷ÖÖ¼¼Êõ·½°¸£¬Ò»¶¨ÒªÑ¡È¡²¢×éºÏ³ö×îÊʺÏ×Ô¼ºÏîÄ¿µÄ·½°¸£¬ÊÇÑ¡Óô«Í³µÄCSSÔ¤´¦ÀíÆ÷£¬»¹ÊÇÑ¡ÓÃPostCSS£¿ÊÇÈ«¾ÖÊÖ¶¯Î¬»¤Ä£¿é£¬»¹ÊÇÍêÈ«½»¸ø³ÌÐòËæ»úÉú³ÉÀàÃû£¿¶¼ÐèÒª½áºÏÒµÎñ³¡¾°¡¢ÍŶÓϰ¹ßµÈÒòËØ¡£ÁíÒ»·½Ã棬CSS±¾Éí²¢ÎÞ±à³ÌÌØÐÔ£¬µ«ÔÚÆä¹¤³Ì»¯¼¼ÊõµÄ·¢Õ¹Öв»·¦ºÜ¶àÓÅÐãµÄ±à³Ì˼Ï룬ÎÞÂÛÊÇ×Ô¶¨ÒåDSL»¹ÊÇ»ùÓÚJavaScript£¬ÕâÆäÖдø¸øÎÒÃÇ˼¿¼µÄÕýÊÇ¡°±àÒë˼Ï롱¡£
|