# CSSè¯æ³•å‚考 CSS是æè¿°HML页é¢ç»“æž„çš„æ ·å¼è¯è¨€ã€‚所有组件å‡å˜åœ¨ç³»ç»Ÿé»˜è®¤æ ·å¼ï¼Œä¹Ÿå¯åœ¨é¡µé¢CSSæ ·å¼æ–‡ä»¶ä¸å¯¹ç»„ä»¶ã€é¡µé¢è‡ªå®šä¹‰ä¸åŒçš„æ ·å¼ã€‚请å‚考[é€šç”¨æ ·å¼](../reference/arkui-js/js-components-common-styles.md)了解兼容JS的类Webå¼€å‘èŒƒå¼æ”¯æŒçš„ç»„ä»¶æ ·å¼ã€‚ ## 尺寸å•ä½ - 逻辑åƒç´ px(文档ä¸ä»¥<length>表示): - 默认å±å¹•具有的逻辑宽度为720px(é…ç½®è§[é…置文件](js-framework-js-tag.md)ä¸çš„windowå°èŠ‚ï¼‰ï¼Œå®žé™…æ˜¾ç¤ºæ—¶ä¼šå°†é¡µé¢å¸ƒå±€ç¼©æ”¾è‡³å±å¹•实际宽度,如100px在实际宽度为1440物ç†åƒç´ çš„å±å¹•上,实际渲染为200物ç†åƒç´ (从720pxå‘1440物ç†åƒç´ ,所有尺寸放大2å€ï¼‰ã€‚ - é¢å¤–é…ç½®autoDesignWidth为true时(é…ç½®è§[é…置文件](js-framework-js-tag.md)ä¸çš„windowå°èŠ‚ï¼‰ï¼Œé€»è¾‘åƒç´ px将按照å±å¹•密度进行缩放,如100px在å±å¹•密度为3的设备上,实际渲染为300物ç†åƒç´ 。应用需è¦é€‚é…多ç§è®¾å¤‡æ—¶ï¼Œå»ºè®®é‡‡ç”¨æ¤æ–¹æ³•。 - 百分比(文档ä¸ä»¥<percentage>表示):表示该组件å 父组件尺寸的百分比,如组件的width设置为50%,代表其宽度为父组件的50%。 ## æ ·å¼å¯¼å…¥ 为了模å—化管ç†å’Œä»£ç å¤ç”¨ï¼ŒCSSæ ·å¼æ–‡ä»¶æ”¯æŒ \@import è¯å¥ï¼Œå¯¼å…¥css文件。 ## å£°æ˜Žæ ·å¼ æ¯ä¸ªé¡µé¢ç›®å½•下å˜åœ¨ä¸€ä¸ªä¸Žå¸ƒå±€hml文件åŒåçš„cssæ–‡ä»¶ï¼Œç”¨æ¥æè¿°è¯¥hml页é¢ä¸ç»„ä»¶çš„æ ·å¼ï¼Œå†³å®šç»„件应该如何显示。 1. å†…éƒ¨æ ·å¼ï¼Œæ”¯æŒä½¿ç”¨styleã€classå±žæ€§æ¥æŽ§åˆ¶ç»„ä»¶çš„æ ·å¼ã€‚例如: ```html <!-- index.hml --> <div class="container"> <text style="color: red">Hello World</text> </div> ``` ```css /* index.css */ .container { justify-content: center; } ``` 2. 文件导入,åˆå¹¶å¤–éƒ¨æ ·å¼æ–‡ä»¶ã€‚例如,在common目录ä¸å®šä¹‰æ ·å¼æ–‡ä»¶style.css,并在index.css文件首行ä¸è¿›è¡Œå¯¼å…¥ï¼š ```css /* style.css */ .title { font-size: 50px; } ``` ```css /* index.css */ @import '../../common/style.css'; .container { justify-content: center; } ``` ## 选择器 cssé€‰æ‹©å™¨ç”¨äºŽé€‰æ‹©éœ€è¦æ·»åŠ æ ·å¼çš„å…ƒç´ ï¼Œæ”¯æŒçš„选择器如下表所示: | 选择器 | æ ·ä¾‹ | æ ·ä¾‹æè¿° | | ------------------------- | ------------------------------------- | ---------------------------------------- | | .class | .container | 用于选择class="container"的组件。 | | \#id | \#titleId | 用于选择id="titleId"的组件。 | | tag | text | 用于选择text组件。 | | , | .title, .content | 用于选择class="title"å’Œclass="content"的组件。 | | \#id .class tag | \#containerId .content text | éžä¸¥æ ¼çˆ¶å关系的åŽä»£é€‰æ‹©å™¨ï¼Œé€‰æ‹©å…·æœ‰id="containerId"ä½œä¸ºç¥–å…ˆå…ƒç´ ï¼Œclass="content"ä½œä¸ºæ¬¡çº§ç¥–å…ˆå…ƒç´ çš„æ‰€æœ‰textç»„ä»¶ã€‚å¦‚éœ€ä½¿ç”¨ä¸¥æ ¼çš„çˆ¶å关系,å¯ä»¥ä½¿ç”¨â€œ>â€ä»£æ›¿ç©ºæ ¼ï¼Œå¦‚:\#containerId>.content。 | 示例: ```html <!-- 页é¢å¸ƒå±€xxx.hml --> <div id="containerId" class="container"> <text id="titleId" class="title">æ ‡é¢˜</text> <div class="content"> <text id="contentId">内容</text> </div> </div> ``` ```css /* 页颿 ·å¼xxx.css */ /* 对所有divç»„ä»¶è®¾ç½®æ ·å¼ */ div { flex-direction: column; } /* 对class="title"çš„ç»„ä»¶è®¾ç½®æ ·å¼ */ .title { font-size: 30px; } /* 对id="contentId"çš„ç»„ä»¶è®¾ç½®æ ·å¼ */ #contentId { font-size: 20px; } /* 对所有class="title"以åŠclass="content"的组件都设置padding为5px */ .title, .content { padding: 5px; } /* 对class="container"的组件下的所有textè®¾ç½®æ ·å¼ */ .container text { color: #007dff; } /* 对class="container"的组件下的直接åŽä»£textè®¾ç½®æ ·å¼ */ .container > text { color: #fa2a2d; } ``` ä»¥ä¸Šæ ·å¼è¿è¡Œæ•ˆæžœå¦‚下:  å…¶ä¸â€œ.container textâ€å°†â€œæ ‡é¢˜â€å’Œâ€œå†…容â€è®¾ç½®ä¸ºè“色,而“.container > textâ€ç›´æŽ¥åŽä»£é€‰æ‹©å™¨å°†â€œæ ‡é¢˜â€è®¾ç½®ä¸ºçº¢è‰²ã€‚2者优先级相åŒï¼Œä½†ç›´æŽ¥åŽä»£é€‰æ‹©å™¨å£°æ˜Žé¡ºåºé åŽï¼Œå°†å‰è€…æ ·å¼è¦†ç›–(优先级计算è§[选择器优先级](#选择器优先级))。 ## 选择器优先级 选择器的优先级计算规则与w3cè§„åˆ™ä¿æŒä¸€è‡´ï¼ˆåªæ”¯æŒï¼šå†…è”æ ·å¼ï¼Œid,class,tag,åŽä»£å’Œç›´æŽ¥åŽä»£ï¼‰ï¼Œå…¶ä¸å†…è”æ ·å¼ä¸ºåœ¨å…ƒç´ style属性ä¸å£°æ˜Žçš„æ ·å¼ã€‚ 当多æ¡é€‰æ‹©å™¨å£°æ˜ŽåŒ¹é…到åŒä¸€å…ƒç´ 时,å„类选择器优先级由高到低顺åºä¸ºï¼šå†…è”æ ·å¼ > id > class > tag。 ## 伪类 css伪类是选择器ä¸çš„关键å—,用于指定è¦é€‰æ‹©å…ƒç´ 的特殊状æ€ã€‚例如,:disabled状æ€å¯ä»¥ç”¨æ¥è®¾ç½®å…ƒç´ çš„disabled属性å˜ä¸ºtrueæ—¶çš„æ ·å¼ã€‚ 除了å•个伪类之外,还支æŒä¼ªç±»çš„组åˆï¼Œä¾‹å¦‚,:focus:checked状æ€å¯ä»¥ç”¨æ¥è®¾ç½®å…ƒç´ çš„focus属性和checkedå±žæ€§åŒæ—¶ä¸ºtrueæ—¶çš„æ ·å¼ã€‚支æŒçš„å•个伪类如下表所示,按照优先级é™åºæŽ’列: | åç§° | 支æŒç»„ä»¶ | æè¿° | | --------- | ---------------------------------------- | ---------------------------------------- | | :disabled | 支æŒdisabled属性的组件 | 表示disabled属性å˜ä¸ºtrueæ—¶çš„å…ƒç´ ï¼ˆä¸æ”¯æŒåŠ¨ç”»æ ·å¼çš„设置)。 | | :active | 支æŒclick事件的组件<br/> | è¡¨ç¤ºè¢«ç”¨æˆ·æ¿€æ´»çš„å…ƒç´ ï¼Œå¦‚ï¼šè¢«ç”¨æˆ·æŒ‰ä¸‹çš„æŒ‰é’®ã€è¢«æ¿€æ´»çš„tab-bar页ç¾ï¼ˆä¸æ”¯æŒåŠ¨ç”»æ ·å¼çš„设置)。 | | :waiting | button | 表示waiting属性为trueçš„å…ƒç´ ï¼ˆä¸æ”¯æŒåŠ¨ç”»æ ·å¼çš„设置)。 | | :checked | input[type="checkbox"ã€type="radio"]〠switch | 表示checked属性为trueçš„å…ƒç´ ï¼ˆä¸æ”¯æŒåŠ¨ç”»æ ·å¼çš„设置)。 | 伪类示例如下,设置按钮的:active伪类å¯ä»¥æŽ§åˆ¶è¢«ç”¨æˆ·æŒ‰ä¸‹æ—¶çš„æ ·å¼ï¼š ```html <!-- index.hml --> <div class="container"> <input type="button" class="button" value="Button"></input> </div> ``` ```css /* index.css */ .button:active { background-color: #888888;/*按钮被激活时,背景颜色å˜ä¸º#888888 */ } ``` > **说明:** > 针对弹窗类组件åŠå…¶åå…ƒç´ ä¸æ”¯æŒä¼ªç±»æ•ˆæžœï¼ŒåŒ…括popupã€dialogã€menuã€optionã€picker ## æ ·å¼é¢„编译 预编译æä¾›äº†åˆ©ç”¨ç‰¹æœ‰è¯æ³•生æˆcss的程åºï¼Œå¯ä»¥æä¾›å˜é‡ã€è¿ç®—ç‰åŠŸèƒ½ï¼Œä»¤å¼€å‘者更便æ·åœ°å®šä¹‰ç»„ä»¶æ ·å¼ï¼Œç›®å‰æ”¯æŒlessã€sasså’Œscssçš„é¢„ç¼–è¯‘ã€‚ä½¿ç”¨æ ·å¼é¢„编译时,需è¦å°†åŽŸcss文件åŽç¼€æ”¹ä¸ºlessã€sass或scss,如index.css改为index.lessã€index.sass或index.scss。 - 当剿–‡ä»¶ä½¿ç”¨æ ·å¼é¢„编译,例如将原index.css改为index.less: ```less /* index.less */ /* 定义å˜é‡ */ @colorBackground: #000000; .container { background-color: @colorBackground; /* 使用当å‰less文件ä¸å®šä¹‰çš„å˜é‡ */ } ``` - 引用预编译文件,例如commonä¸å˜åœ¨style.scss文件,将原index.css改为index.scss,并引入style.scss: ```scss /* style.scss */ /* 定义å˜é‡ */ $colorBackground: #000000; ``` 在index.scssä¸å¼•用: ```scss /* index.scss */ /* 引入外部scss文件 */ @import '../../common/style.scss'; .container { background-color: $colorBackground; /* 使用style.scssä¸å®šä¹‰çš„å˜é‡ */ } ``` > **说明:** > 引用的预编译文件建议放在common目录进行管ç†ã€‚ ## CSSæ ·å¼ç»§æ‰¿<sup>6+</sup> cssæ ·å¼ç»§æ‰¿æä¾›äº†åèŠ‚ç‚¹ç»§æ‰¿çˆ¶èŠ‚ç‚¹æ ·å¼çš„能力,继承下æ¥çš„æ ·å¼åœ¨å¤šé€‰æ‹©å™¨æ ·å¼åŒ¹é…çš„åœºæ™¯ä¸‹ï¼Œä¼˜å…ˆçº§æŽ’æœ€ä½Žï¼Œå½“å‰æ”¯æŒä»¥ä¸‹æ ·å¼çš„继承: - font-family - font-weight - font-size - font-style - text-align - line-height - letter-spacing - color - visibility