徿¡
å¨æçæ¥ patternsï¼å¾æ¡ï¼æ¯ SVG ä¸ç¨å°çæè®©äººæ··æ·çå¡«å
ç±»åä¹ä¸ãå®çåè½éå¸¸å¼ºå¤§ï¼æä»¥æè®¤ä¸ºä»ä»¬å¼å¾è®¨è®ºä¸ä¸å¹¶ä¸æä»¬åºè³å°å¯¹ä»ä»¬ææåºæ¬çäºè§£ãè·æ¸å䏿 ·ï¼<pattern> éè¦æ¾å¨ SVG ææ¡£ç <defs> å
é¨ã
<?xml version="1.0" standalone="no"?>
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<linearGradient id="Gradient1">
<stop offset="5%" stop-color="white" />
<stop offset="95%" stop-color="blue" />
</linearGradient>
<linearGradient id="Gradient2" x1="0" x2="0" y1="0" y2="1">
<stop offset="5%" stop-color="red" />
<stop offset="95%" stop-color="orange" />
</linearGradient>
<pattern id="Pattern" x="0" y="0" width=".25" height=".25">
<rect x="0" y="0" width="50" height="50" fill="skyblue" />
<rect x="0" y="0" width="25" height="25" fill="url(#Gradient2)" />
<circle
cx="25"
cy="25"
r="20"
fill="url(#Gradient1)"
fill-opacity="0.5" />
</pattern>
</defs>
<rect
fill="url(#Pattern)"
stroke="black"
x="0"
y="0"
width="200"
height="200" />
</svg>
å¨ pattern å ç´ å é¨ä½ å¯ä»¥å å«ä»»ä½ä¹åå å«è¿çå ¶ä»åºæ¬å½¢ç¶ï¼å¹¶ä¸æ¯ä¸ªå½¢ç¶é½å¯ä»¥ä½¿ç¨ä¹åå¦ä¹ è¿ç任使 ·å¼æ ·å¼åï¼å æ¬æ¸åååéæãè¿éæä»¬å¨ pattern ä¸ç»å¶ä¸¤ä¸ªç©å½¢ï¼ä¸¤ä¸ªç©å½¢äºç¸éå ï¼ä¸ä¸ªç©å½¢æ¯å¦ä¸ä¸ªç©å½¢å¤§å°çäºåï¼ä¸ç¨äºå¡«å æ´ä¸ª patternï¼åä¸ä¸ªåã
å
³äº pattern å®¹ææ··æ·çäºæ¯ï¼pattern å®ä¹äºä¸ä¸ªåå
ç³»ç»ä»¥åä»ä»¬ç大å°ãä¸ä¾ä¸ï¼æä»¬å¨ pattern å
ç´ ä¸å®ä¹äºwidthåheight屿§ï¼ç¨äºæè¿°å¨éå¤ä¸ä¸ä¸ªå¾æ¡ä¹ååºè¯¥è·¨è¿å¤è¿ãå¦æä½ æ³è¦å¨ç»å¶æ¶åç§»ç©å½¢çå¼å§ç¹ï¼ä¹å¯ä»¥ä½¿ç¨ x å y 屿§ï¼åå å¦ä¸ã
å°±ååé¢ä½¿ç¨äºgradientUnits屿§ï¼åæ ·çpattern乿ä¸ä¸ªå±æ§patternUnitsç¨äºæè¿°æä»¬ä½¿ç¨ç屿§åå
ãè¿åä¹å使ç¨çobjectBoundingBoxé»è®¤å¼ä¸æ ·ï¼æä»¥å½ä¸ä¸ªå¼ä¸º 1 æ¶ï¼å®è¢«ç¼©æ¾å°åºç¨ pattern 对象ç宽é«å¼ãå æ¤ï¼æä»¬å¸æ pattern åç´åæ°´å¹³çéå¤ 4 æ¬¡ï¼æä»¥å®½é«è¢«è®¾ç½®ä½ 0.25ï¼è¿ä¸ä½ç½® pattern ç宽é«ä»
为æ»å¤æ¡å¤§å°ç 0.25ã
䏿¸åä¸åï¼pattern æç¬¬äºä¸ªå±æ§patternContentUnitsï¼å®æè¿°äºpatternå
ç´ åºäºåºæ¬å½¢ç¶ä½¿ç¨çåå
ç³»ç»ï¼è¿ä¸ªå±æ§é»è®¤å¼ä¸ºuserSpaceOnUseï¼ä¸patternUnits屿§ç¸åï¼è¿æå³çé¤éä½ è³å°æå®å
¶ä¸ä¸ä¸ªå±æ§å¼ï¼patternContentUnitsæpatternUnitsï¼ï¼å¦åå¨patternä¸ç»å¶çå½¢ç¶å°ä¸patternå
ç´ ä½¿ç¨çåæ ç³»ä¸åï¼å½ä½ æåè¿é¨åæ¶ä¼å®¹ææ··æ·ã为äºä½¿ä¸ä¾çæï¼æä»¬å¿
é¡»èèæä»¬çè¾¹æ¡ï¼200 åç´ ï¼å¤§å°åæä»¬å®é
叿patternåç´åæ°´å¹³éå¤ 4 次çéæ±ãè¿æå³çæ¯ä¸ª pattern åå
åºè¯¥æ¯ 50x50çæ¹å½¢ï¼pattern ä¸ç两个ç©å½¢ååå½¢ç大å°ä¼è¢«ç¼©æ¾éåºå°ä¸ä¸ª 50x50 çè¾¹æ¡éï¼ä»»ä½æä»¬ç»å¶å¨è¾¹æ¡å¤çå
容é½ä¸ä¼æ¾ç¤ºãå 为æä»¬å¸æ pattern ä»è¾¹æ¡çå·¦ä¸è§éå¼å§ï¼æä»¥ pattern ä¹å¿
é¡»åç§» 10 åç´ ï¼ä¹å°±æ¯ pattern ç x å y 屿§éè¦è°æ´ä¸º 10/200=0.05ã
å¦æå¯¹è±¡æ¹åäºå¤§å°ï¼pattern ä¼èªéåºå
¶å¤§å°ï¼ä½æ¯å¯¹è±¡éé¢çå
容ä¸ä¼èªéåºãæä»¥å½æä»¬å¨ pattern ä¸è¿æ¯æ¾ç½® 4 个éå¤ç pattern æ¶ï¼ç»æ pattern ç对象å°ä¸ä¼ä¿æç¸åç大å°ï¼åæ¶å¨ä»ä»¬ä¹é´ä¼æå¤§ç空ç½åºåãéè¿æ¹åpatternContentUnits屿§ï¼æä»¬å¯ä»¥æææçå
ç´ æ¾å°ç¸åçåå
ç³»ç»ä¸ï¼
<pattern id="Pattern" width=".25" height=".25" patternContentUnits="objectBoundingBox">
<rect x="0" y="0" width=".25" height=".25" fill="skyblue"/>
<rect x="0" y="0" width=".125" height=".125" fill="url(#Gradient2)"/>
<circle cx=".125" cy=".125" r=".1" fill="url(#Gradient1)" fill-opacity="0.5"/>
</pattern>
ç°å¨ï¼å 为 pattern å
å®¹ä¸ pattern æ¬èº«å¤äºç¸åçåå
ç³»ç»ä¸ï¼æä»¥æä»¬ä¸ç¨å移边æ¡ä»¥ä½¿ pattern 卿£ç¡®çä½ç½®ä¸å¼å§ï¼å¹¶ä¸å³ä½¿å¯¹è±¡å大ï¼pattern ä¹ä¼èªå¨ç缩æ¾ä»¥ä¿è¯ pattern å
é¨ç对象æ°ç®åéå¤ä¸åãè¿ä¸ userSpaceOnUse ç³»ç»ä¸åï¼userSpaceOnUse ç³»ç»ä¸å¦æå¯¹è±¡æ¹å大å°ï¼pattern æ¬èº«ä¼ä¿æä¸åï¼åªæ¯é夿´å¤æ¬¡å»å¡«æ»¡è¾¹æ¡ã
宿ä¸ç¹ç¹çå¯ä½ç¨ï¼å¨ Gecko ä¸çå妿åå¾è®¾ç½®å¾å°äº 0.075ï¼å°½ç®¡åå¾åºè¯¥è®¾ç½®çæ¯è¿ä¸ªå¼å¤§å¾å¤ãè¿ä¸ªå¯è½æ¯ pattern å
ç´ ä¸çä¸ä¸ª bugï¼æè
ä¹ä¸ç® bugï¼æä¹ä¸å¤ªæ¸
æ¥ï¼çè¯ç»å¶çæ¶åå¯è½ä¼åºç°é®é¢ï¼ä¸ºäºè§é¿è¿ä¸ªé®é¢ï¼å¯è½æå¥½çåæ³æ¯å°½éé¿å
å¨ objectBoundingBox åå
ä¸ç»å¶å¾å½¢ã
å¨ä½ æ³è¦ä½¿ç¨ pattern çæ¶åï¼å¯è½ä½ å¹¶ä¸ä¸æè¿äºæ¹æ³ä¸çä»»ä½ä¸ä¸ªï¼Pattern é叏齿¯æç¡®è®¤ç大å°å¹¶ä¸éå¤ä»ä»¬èªå·±ï¼ä¸å¯¹è±¡å½¢ç¶ç¬ç«å¼æ¥ãè¦æ³å建è¿ç§ patternï¼pattern åå®çå å®¹å¿ é¡»å¨å½åç¨æ·ç©ºé´ä¸ç»å¶ï¼è¿æ ·å½å¯¹è±¡å¨åå¦ä¸æä½æ¶ä»ä»¬æä¸ä¼æ¹åå½¢ç¶ï¼
<pattern id="Pattern" x="10" y="10" width="50" height="50" patternUnits="userSpaceOnUse">
<rect x="0" y="0" width="50" height="50" fill="skyblue"/>
<rect x="0" y="0" width="25" height="25" fill="url(#Gradient2)"/>
<circle cx="25" cy="25" r="20" fill="url(#Gradient1)" fill-opacity="0.5"/>
</pattern>
å½ç¶ï¼è¿æå³çå¦æä½ åç»æ¹åäºå¯¹è±¡å¤§å°ï¼pattern ä¹ä¸ä¼ç¼©æ¾ãä¸è¿°ä¸ä¸ªä¸¾ä¾å¨ä¸å¾ä¸æ¾å¨ä¸ä¸ªç©å½¢ä¸å±ç¤ºï¼é«åº¦è¢«è½»å¾®æä¼¸å° 300pxï¼ä½æ¯ææ³¨æå°è¿ä¸æ¯å®æ´çå¾çï¼å¹¶ä¸æäºå ¶ä»é项å¯è½ä½ çåºç¨ä¸æ¯æã
