polygon()
åºçº¿
广æ³å¯ç¨
èª 2020å¹´1æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
polygon() CSS 彿°æ¯ <basic-shape> æ°æ®ç±»åä¹ä¸ãå®ç¨äºéè¿æä¾ä¸ä¸ªæå¤ä¸ªåæ å¯¹ï¼æ¯ä¸ä¸ªåæ 代表形ç¶çä¸ä¸ªé¡¶ç¹ï¼æ¥ç»å¶å¤è¾¹å½¢ã
å°è¯ä¸ä¸
clip-path: polygon(
0% 20%,
60% 20%,
60% 0%,
100% 50%,
60% 100%,
60% 80%,
0% 80%
);
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
<section class="default-example" id="default-example">
<div class="transition-all" id="example-element"></div>
</section>
#default-example {
background: #fe9;
}
#example-element {
background: linear-gradient(to bottom right, #f52, #05f);
width: 100%;
height: 100%;
}
è¯æ³
/* æå®åæ å表 */
/* polygon(<length-percentage> <length-percentage>, ... )*/
polygon(50% 2.4%, 34.5% 33.8%, 0% 38.8%, 25% 63.1%, 19.1% 97.6%)
polygon(0px 0px, 200px 100px, 0px 200px)
polygon(0% 0px, 100% 100px, 0px 100%)
polygon(0 0, 50% 1rem, 100% 2vw, calc(100% - 20px) 100%, 0 100%)
/* æå®å¡«å
è§åååæ å表 */
/* polygon(<fill-rule> <length-percentage> <length-percentage>, ... )*/
polygon(nonzero, 0% 0%, 50% 50%, 0% 100%)
polygon(evenodd, 0% 0%, 50% 50%, 0% 100%)
polygon() çåæ°ç¨éå·åå¯éçç©ºæ ¼åéã第ä¸ä¸ªåæ°æ¯ä¸ä¸ªå¯éç <fill-rule> å¼ãå
¶ä»åæ°æ¯å®ä¹å¤è¾¹å½¢çç¹ãæ¯ä¸ªç¹æ¯ä¸å¯¹ x/y åæ <length-percentage> å¼ï¼ç¨ç©ºæ ¼åéï¼ä¾å¦å·¦/ä¸è§åå³ä¸è§çâ0 0âåâ100% 100%âã
åæ°
<fill-rule>å¯é-
ä¸ä¸ªå¯éçå¼ï¼å¯ä»¥æ¯
nonzeroï¼é»è®¤å¼ï¼å½çç¥æ¶ï¼æevenoddï¼æå®å¡«å è§åã <length-percentage>-
æ¯ä¸ªå¤è¾¹å½¢çé¡¶ç¹ç±ä¸å¯¹
<length-percentage>å¼è¡¨ç¤ºï¼ç»åºäºç¸å¯¹äºå½¢ç¶çåèçåçé¡¶ç¹ç x/y åæ ã
è¿åå¼
è¿åä¸ä¸ª <basic-shape> å¼ã
æè¿°
éè¿æå®å
¶ç¹çåæ ï¼ä½ å¯ä»¥ä½¿ç¨ polygon() 彿°å建å ä¹ä»»ä½å½¢ç¶ãå®ä¹ç¹ç顺åºå¾éè¦ï¼å¯è½ä¼å¯¼è´ä¸åçå½¢ç¶ãpolygon() 彿°è³å°éè¦ 3 个ç¹ï¼è¿å°å建ä¸ä¸ªä¸è§å½¢ï¼ä½æ²¡æä¸éã
polygon() 彿°æ¥åéå·åéçåæ æç¹ä½ä¸ºå
¶å¼ãæ¯ä¸ªç¹ç±ä¸å¯¹ä»¥ç©ºæ ¼åéç x å y å¼è¡¨ç¤ºï¼è¿äºå¼æç¤ºå¤è¾¹å½¢å
çç¹çåæ ã
polygon(x1 y1, x2 y2, x3 y3, x4 y4, xn yn)
ç»å®ä¸è¿°å 容ï¼å°å®¹å¨çåæ æ å°ä¸ºå¯è§åï¼
| è½´ | ç¹ 1 | ç¹ 2 | ç¹ 3 | ç¹ 4 | ç¹ n |
|---|---|---|---|---|---|
| x | 0% | 100% | 100% | 0% | xn |
| y | 0% | 0% | 100% | 100% | yn |
å°è¿äºåæ åºç¨äºä½¿ç¨ polygon() 彿°ç CSS clip-path 屿§ï¼
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
è¿å°å建ä¸ä¸ªç©å½¢å½¢ç¶ï¼å
¶å¤§å°ä¸å
¶ç¶å
容ç¸åï¼éè¿æå®å
¶å个è§çåæ ï¼å·¦ä¸è§ï¼0% 0%ï¼ãå³ä¸è§ï¼100% 0%ï¼ãå³ä¸è§ï¼100% 100%ï¼åå·¦ä¸è§ï¼0% 100%ï¼ã
å½¢å¼è¯æ³
<polygon()> =
polygon( <'fill-rule'>? [ round <length> ]? , [ <length-percentage> <length-percentage> ]# )
<fill-rule> =
nonzero |
evenodd
<length-percentage> =
<length> |
<percentage>
示ä¾
>å建ä¸ä¸ªä¸è§å½¢
卿¤ç¤ºä¾ä¸ï¼éè¿å®ä¹å ¶ä¸ä¸ªç¹çåæ æ¥å½¢æä¸ä¸ªä¸è§å½¢ã
HTML
<div class="triangle"></div>
CSS
.triangle {
width: 400px;
height: 400px;
background-color: magenta;
clip-path: polygon(100% 0%, 50% 50%, 100% 100%);
}
ç»æ
ä¸è§å½¢çåæ æ¯å®¹å¨çå³ä¸è§ï¼100% 0%ï¼ãä¸å¿ç¹ï¼50% 50%ï¼åå³ä¸è§ï¼100% 100%ï¼ã
为 shape-outside 设置å¤è¾¹å½¢
卿¤ç¤ºä¾ä¸ï¼ä½¿ç¨ shape-outside 屿§å建ä¸ä¸ªå½¢ç¶ï¼ä½¿ææ¬éµå¾ªå®ã
<div class="box">
<div class="shape"></div>
<p>
æ®è¯´ï¼1782 å¹´ 11
æçä¸ä¸ªå¤æï¼å¨æ³å½å°åå®è¯ºå
ï¼æä¸¤å
å¼åå¨å¬æ¥ççç«æï¼çççèéç°è²ççåæ²¿ç宽大ççå±è¢
è¢
åèµ·ãä»ä»¬çåå嫿¯èè¬Â·èå¥è²å°å约ç夫·èå¥è²å°ï¼è䏿¯é 纸工人ï¼ä»¥å¿æç¼å¯èç§°ï¼å¯¹ææç§å¦ç¥è¯åæ°åç°é½æçæµåçå
´è¶£ãå¨é£ä¸ªå¤æââä¸ä¸ªå¼å¾çºªå¿µç夿ââä¹åï¼æ°ä»¥äº¿è®¡ç人é½å¨æ³¨è§çèªå®¶çç«åèµ·ççåï¼å´æ²¡æä»ä¸å¾å°ä»»ä½ç¹å«çå¯åã
</p>
</div>
.box {
width: 250px;
}
.shape {
float: left;
shape-outside: polygon(
0 5%,
15% 12%,
30% 15%,
40% 26%,
45% 35%,
45% 45%,
40% 55%,
10% 90%,
10% 98%,
8% 100%,
0 100%
);
width: 300px;
height: 320px;
}
p {
font-size: 0.9rem;
}
è§è
| è§è |
|---|
| CSS Shapes Module Level 1> # funcdef-basic-shape-polygon> |
æµè§å¨å ¼å®¹æ§
åè§
- ä½¿ç¨æ¤æ°æ®ç±»åç屿§ï¼
clip-pathãshape-outside - åºæ¬å½¢ç¶æå