https://github.com/less/less.js/issues/2541ããã§ãããç§ã¯ããããããžã§ã¯ãã§èŠãŸãã
// mixins.less
.background(@image) {
background-image: data-uri(@image);
}
// app/content/button.less
button {
.background("images/btn.jpg");
}
ç»åã¯app/content/images/btn.jpg
ãããã§ããããããšæããŸããã images/btn.jpg
ãããã§ãããããŸãã
ãããé倧ãªå€æŽïŒã¡ãžã£ãŒã¢ãããä¿èšŒããïŒãªã®ãããã°ä¿®æ£ãªã®ãã«ã€ããŠã®ãã£ãŒãããã¯ãæè¿ããŸãã
ãããé倧ãªå€æŽïŒã¡ãžã£ãŒã¢ãããä¿èšŒããïŒãªã®ãããã°ä¿®æ£ãªã®ãã«ã€ããŠã®ãã£ãŒãããã¯ãæè¿ããŸãã
åèïŒéåžžã«ç°¡åãªæ¹æ³ã§ãäžäœäºææ§ãæãªãããšãªããããããšã¬ã¬ã³ãã«å®è£ ã§ããŸãã
çŸåšã data-uri()
é¢æ°ã¯ããã¡ã€ã«ãã¹ãšããŠæååãä¿æããQuoted
ããªãŒããŒããåãå
¥ããé¢æ°åŒã³åºããä¿æãããã¡ã€ã«ã®å Žæã«å¯ŸããURLãšããŠå
éšçã«è§£æ±ºããŸãã data-uri
é¢æ°ããªãŒããŒããŒãããŠãå®éã®URLãä¿æããUrl
ããªãŒããŒããåãå
¥ããããšãã§ããŸãã ãã®ããã«ããŠãURLã¯url()
CSSé¢æ°ãåŒã³åºãããå Žæã«å¯ŸããŠæ£èŠåããã data-uri()
Lessé¢æ°ã®å
éšã§æ£èŠåãããªããªããŸãã
äŸãã°
// app/content/button.less
button {
.background(url("images/btn.jpg"));
}
@rjgotten
ç§ã«ãšã£ãŠã¯ãä¿®æ£ãšããããã¯åé¿çã®ããã«èŠããŸãã ããã«å埩ãããšã url
ãããã¯ã¹ã€ã³ã«ç§»åããããšã§åé·æ§ãåé¿ããããšããŸãããåé¡ãåã³çºçããŸãã ãã1ã€ã®åé¡ã¯ããã®åé¡ãçºçããå
ã®ãŠãŒã¹ã±ãŒã¹ïŒïŒ2541ïŒã䜿çšãããšã次ã®ããã«äœ¿çšãããããšãå€ãããšã§ãã
// mixins.less
.background(@image) {
background-image: data-uri("@{image}.jpg");
}
// app/content/button.less
button {
.background("images/btn");
}
ïŒäŸãšããŠããã©ã³ããšé¢ã®ããã¯ã¹ã€ã³ã®å Žåãéåžžã¯è€æ°ã®woff
ã ttf
ã eot
ã eot?#iefix
ãªã©ã®æ¡åŒµåãåããã¡ã€ã«åã«è¿œå ãããŸãã ïŒã ãããŠãã®ããã«ã以åã®url
ãäžå¯èœã§ãã
@ seven-phases-max
ãããªããé©åãªè§£æ±ºæéããããšã¯æããŸããã çžå¯ŸURLã解決ãããã³ã³ããã¹ãã決å®ããäœããã®æ¹æ³ãå¿
èŠã§ãã ããªãã¯ã«å
¥ãæååå€å®çŸ©ããããã¡ã€ã«ã®ãã¡ã€ã«æ
å ±ããããã®ã³ã³ããã¹ããåãã®ããããdata-uri()
æ©èœãããŸãã¯ããªããçµç±ããŠãã«ãããªãç¹ãããæ確ã«ããurl()
é¢æ°ãšUrl
ããªãŒããŒãã
ãã¹å€æ°ã®çœ®æããµããŒãããå Žåã¯ããã¹ã®ããŸããŸãªéšåãæ£èŠåããå¿ èŠãããæ¹æ³ãç解ããå¿ èŠããããããããã«æ³šæãå¿ èŠã«ãªããŸãã
ããšãã°ã次ã®ãããªãã®ãã©ã®ããã«æ£èŠåããŸããã
// mixins.less
.background(@image) {
background-image: data-uri("../../@{image}.jpg");
}
// app/content/button.less
button {
.background("../images/btn");
}
çžå¯ŸURL解決ãšãããã2ã€ã®ãã¹ã®ããŒã¯ã³çœ®æäž»å°ã®çµã¿åãããã©ã®ããã«çµã¿åãããŸããïŒ
代æ¿ããŒã¯ã³ãurl()
ãŸãã¯data-uri()
å
¥ãæçµçãªURLå€ã®å
é ã«ããå Žåã1ã€ã®ãªãã·ã§ã³ã¯ã代æ¿ããŒã¯ã³ã®ä»£ããã«äœ¿çšãããæååãå®çŸ©ãããã¡ã€ã«ã«å¯ŸããŠã®ã¿è§£æ±ºããããšã ãšæããŸãã
å¥ã®è§£æ±ºçã¯ããã¹ãçµåãããããã¡ã€ã«æ¡åŒµåãè¿œå /åé€/ç·šéãããããããã®ãã¹åŠçé¢æ°ãããã€ãå°å
¥ãïŒ unit()
é¢æ°ããã£ã¡ã³ã·ã§ã³ã«å¯ŸããŠã©ã®ããã«æ©èœããããšåæ§ã§ãïŒãç©äºãããæ確ã«ããããšã§ãã
äŸãã°
// mixins.less
.background(@image) {
background-image: data-uri(extension(<strong i="21">@image</strong>, "jpg"));
}
// app/content/button.less
button {
.background(url("./images/btn"));
}
æåã®äŸã§ã¯ãç¹å¥ãªæ£èŠåã¯å¿
èŠãããŸããã "../../@{image}.jpg"
ã¯ãèšè¿°ããããšããã«"../../../images/btn.jpg"
å±éãããŸãïŒãã¹ãåŠçããã®ã«æ倧data-uri
ã«ãªããŸãïŒã
ãããŠ2çªç®ã®äŸã¯ãã ...é¢æ°ãã¹ã¿ãã¯ããŠé¢æ°ãåé¿ããäžäœäºææ§ãåé¿ããŸã...æ£ç¢ºã«ã¯äœã§ããïŒ ä»ã®ãã¡ã€ã«ã§å®çŸ©ãããããã¯ã¹ã€ã³ãåŒã³åºããšãã®_ééã£ã_ãã¡ã€ã«ãã¹ïŒ
çµå±ã®ãšããã .background(url("images/btn.jpg"));
ã§ãæåŸ
ã©ãããã«_only_åäœããããšã«ãªã£ãŠãããšãããããŸã£ããå€æŽãå ããã«.background(data-uri("images/btn.jpg"));
çŽæ¥æžã蟌ãã®ãšã©ãéãã®ã§ããããã :)
èšãæããã°ããããä¿®æ£ããå Žåã¯ãã©ããªã«å£ããŠãdata-uri
ã§åºå®ããå¿
èŠããããšããããšã§ãã ïŒæ£çŽãªãšãããç§ã¯ããè¯ãæŠç¥ãäœã§ãããããããŸããïŒaãããã«ã€ããŠã®ããå€ãã®ã¬ããŒã/ãªã¯ãšã¹ããåŸ
ã£ãŠããïŒããããååã«ããå ŽåïŒå€æŽããããbãèµ·ããåŸãç Žå£çãªåœ±é¿ãæå°éã«æããããã«ãããæ©ãå€æŽããŸãïŒã
èšãæãããšã url
ãšdata-uri
ãæåã¯äº€æå¯èœãšããŠèšèšããããšä»®å®ããŸãïŒã€ãŸãã data-uri
ã¯url
ç¹å¥ãªããŒãžã§ã³ã§ãïŒãããŠCSS url
ã³ã³ãã€ã«ãããŸãïŒãæçµçã«data-uri
ãããã®ããã«ãåäœããã®ã«å¯ŸãïŒãã®ãããªãªãã·ã§ã³ã䜿çšïŒãæ£ç¢ºã«ulr
ãããã®ããã«ãåäœããçç±ã説æããã®ã¯éåžžã«å°é£ã§ãããã®ãããªãªãã·ã§ã³ïŒãããã³ç¹å®ã®åäœãååŸããããã«ããªããå¿
èŠããããŸãdata-uri(url())
ãã«éå®ã³ã³ãã data-uri
ããã¯ã¹ã€ã³å
éšãšãurl
_out_ãšããã®--relative-urls: on
"<-Bhrrrr ... :)
ç§ã«ãšã£ãŠã¯ãä¿®æ£ãšããããã¯åé¿çã®ããã«èŠããŸãã ããã«å埩ãããšãURLãããã¯ã¹ã€ã³ã«ç§»åããããšã§åé·æ§ãåé¿ããããšããŸãããåé¡ãåã³çºçããŸãã
ãããç§ã¯åæããŸãã
ç§ã¯ãã£ãããšãv3ãªãªãŒã¹ã®ããã«å°ãåªåãæžããããããä¿®æ£ããããã«åªåããŠããŸãã
èãããããã¹ãŠã®ãã¡ã€ã«ãã¹ã調ã¹ãŠã1ã€ãã€è©ŠããŠã¿ãããšèããŠããŸããããç°ãªãå Žæã«è€æ°ã®ãã¡ã€ã«ãããå Žåã¯å°ãåä»ã§ã...ãããæ°žä¹ ã«å®å šã«ä¿®æ£ããããšã¯äžå¯èœã ãšæããŸãããå°ãªããšãéåžžã®ã±ãŒã¹ãä¿®æ£ã§ããŸãã
ããããresolve()
é¢æ°ã¯ã解決ãããURLãé¢æ°ã«æž¡ãã®ã«åœ¹ç«ã€å¯èœæ§ããããŸãïŒãã ããå®å
šãªãã¹ãæ©èœããªãå Žåã¯ããããä¿®æ£ããããšãã«å®å
šãªãã¹ãæ©èœããŸã...ïŒ
ããã«èããæžãçããŠãã¿ãŸããã
ããã¯åãªãç°¡åãªã¡ã¢ã§ãããå€æ°è£éã䜿çšããã€ã³ããŒãã§ãåãåé¡ãçºçããŸãã
å€æ°è£éã䜿çšããŠã€ã³ããŒãããŸãã
ããã¯é¢çœããŠäžå®ãªããšã§ãã
ããã¯å®éã«ãµããŒããããŠãããŠãŒã¹ã±ãŒã¹ã§ããããããšã幞ããªå¶ç¶ã§ããïŒ
@rjgottenãµããŒããããŠããŸããããµããŒãã¯å€å°å¶éãããŠããŸãã ïŒ410ã§è¿œè·¡ãããŸãã
ããã¯æ©èœããŸãïŒ
<strong i="8">@variable</strong>: "path.less";
<strong i="9">@import</strong> "@{variable}";
ããã¯ããŸããïŒ
.mixin(@variable) {
<strong i="13">@import</strong> "@{variable}";
}
ç·šéïŒãªã³ã¯ãæ©èœããããã«å€æŽãããŸããã
ããã¯ã¹ã€ã³ã§å€æ°@import
ããµããŒãããããã©ããããããŸããã
å€æ°ã®ã€ã³ããŒãå
šäœã¯å°ãéæ³ã®ããã§ãçŽæã«åããã³ãŒããäœæããå¯èœæ§ããããŸãã
åé¿çã«ã€ããŠã®å€ãã®è°è«ãå€åå®éã®åé¡ãä¿®æ£ããã ãã§ããïŒ data-uriã¯åŠçäžã®ãã¡ã€ã«ã«é¢é£ããŠããå¿ èŠãããããšã¯æããã§ã¯ãããŸãããã
çŸåšãå¥ã®ãã¹ãã_a reference_ãã€ã³ããŒããããã¡ã€ã«ããããŸãããããã§ãdata-uriã«ã€ããŠæå¥ãèšããŸãã å°ãªããšãããã¯ãã°ã§ããã«éããããŸãããïŒ ã€ãŸããåç §ã«ãã£ãŠã€ã³ããŒãããå ŽåãçŸåšã®ãã¡ã€ã«ãåºæºã«ããŠãã¹ãæžãæããããšããªãã§ãã ããã
@Ciantic
ã€ãŸããåç §ã«ãã£ãŠã€ã³ããŒãããå ŽåãçŸåšã®ãã¡ã€ã«ãåºæºã«ããŠãã¹ãæžãæããããšããªãã§ãã ããã
æ£ç¢ºã«ã¯äœã«åºã¥ããŠããŸããïŒ reference
äœã®é¢ä¿ããããŸããïŒ
çŸåšãå¥ã®ãã¹ããåç §ãã€ã³ããŒããããã¡ã€ã«ããããŸãããããã§ãdata-uriã«ã€ããŠæå¥ãèšããŸãã
äžèšã®åé¡ãšã¯éã®ããã«èãããŸãã 詳现ãæããŠãã ããã ïŒããšãã°ãã€ã³ããŒããã€ã³ããŒããããã³ããŒã¿ãã¡ã€ã«ã®ãã¹ãªã©ïŒã
styles.less
.something {
background: data-uri("some.svg");
}
sub / test.less
<strong i="11">@import</strong> (reference) "../style.less";
.test {
color: green;
}
ããã¯style.lessãã³ã³ãã€ã«ããŸãããtest.lessãšæ¯èŒããŠdata-uriã䜿çšããããšãããããtest.lessã¯ã³ã³ãã€ã«ããŸããã
ãªãåç §ã€ã³ããŒãããã¹ãæžãæããããšããã®ã§ãããããç§ã®æèŠã§ã¯ãåç §ã䜿çšããå Žåã¯å¿ èŠãããŸããã
data-uriã¯ãªãã·ã§ã³ã®URLæžãæãã«ãŒã«ã«åŸãããšãæåŸ ããŸãã ãã¡ãã....ãããdata-uriã§å®éã«äœãæå³ããã®ããèšãã®ã¯é£ããã§ãã
äžè¬ã«ãdata-uriã¯ã.lessãã¡ã€ã«ã®åŒã³åºããã«é¢é£ããŠè§£æ±ºããå¿ èŠããããŸãã ãããã£ãŠãããã¯ã¹ã€ã³ã®å Žåã¯ãããã¯ã¹ã€ã³ã®å Žæã§ã¯ãªããããã¯ã¹ã€ã³ãåŒã³åºãããå Žæãåºæºã«ããŠè§£æ±ºããå¿ èŠããããŸãã ããã¯ã¹ã€ã³ã¯ãããã®ã¹ããŒãã¡ã³ãããããã¯ã¹ã€ã³ãããŠãã解決ããŸãã ã ãã@lukeapageç§ã¯ããªãã®è§£éãæ£ãããšæããŸãïŒ
// app/content/button.less
button {
.background("images/btn.jpg");
}
app/content/images/
ã§btn.jpgãæ¢ãå¿
èŠããããŸãã ããã§ãªãå Žåã¯ãããã¯ã¹ã€ã³ãã©ã®ããã«æ©èœãããã§ã¯ãªããããããã¯ãã°ã§ãã ããã¯ãé倧ãªå€æŽãã§ã¯ãªãããã°ä¿®æ£ã ãšæããŸãã
ããã¯èšã£ãŠã...次ã®ãããªè§£æ±ºã«åé¡ã¯ãªããšæããŸãã
Node.jsã¯ã解決ã®ããã«è€æ°ã®ãã¹ãè©Šè¡ããŸãã 解決é åºãæ確ã«ææžåãããŠããéããæåŸ ã管çã§ããŸãã ãããŠããã®ããã«ãããè¡ãããšã¯ã誰ããè¡åïŒ2ãè¡ãããã«åœŒãã®.lessã«åºã¥ããŠããå Žåãããã¯ãã¹ãŠã§ã¯ãªãã«ããŠãã»ãšãã©ãã¹ãŠã®å Žåã§ãæ©èœããããšãæå³ããŸãã
@ matthew-ãã£ãŒã³
äžè¬ã«ãdata-uriã¯ã.lessãã¡ã€ã«ã®åŒã³åºããã«é¢é£ããŠè§£æ±ºããå¿ èŠããããŸãã ãããã£ãŠãããã¯ã¹ã€ã³ã®å Žåã¯ãããã¯ã¹ã€ã³ã®å Žæã§ã¯ãªããããã¯ã¹ã€ã³ãåŒã³åºãããå Žæãåºæºã«ããŠè§£æ±ºããå¿ èŠããããŸãã ããã¯ã¹ã€ã³ã¯ãããã®ã¹ããŒãã¡ã³ãããããã¯ã¹ã€ã³ãããŠãã解決ããŸãã
ãã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ã§äžè¬çã«æ£ããæ¹æ³ã§ãããæ©èœãããããšã¯ã§ããŸããã§ããã
ããšãã°ããã©ã¡ãŒã¿åãããURLãã€ãŸãã眮æããŒã¯ã³ã®ã¿ãå ¥åãããæ¢ç¥ã®ããŒã¹ãã©ã«ãã«å¯ŸããŠè§£æ±ºããå¿ èŠããã眮æããŒã¯ã³ãå«ãURLãã©ã®ããã«ãµããŒãããŸããïŒ ãã®å ŽåãåŒã³åºãå ã®ãã¡ã€ã«ã§ã¯ãªããåŒã³åºãå ã®ãã¡ã€ã«ã«å¯ŸããŠå解決ããå¿ èŠããããŸãã
ã³ãŒã«ãµã€ãã§url()
ãæ瀺çã«äœ¿çšããã«ããããééçã«ä¿®æ£ããæ¹æ³ã«ã€ããŠå°ãã²ãããããããŸããããããããã¯ã¹ã€ã³ã³ãŒã«ã«ãªãã¡ã¯ã¿ãªã³ã°ããç©äºãå£ããŸãïŒïŒ
ãªãã©ã«Quoted
ããŒããäœæããããšãããããã®ãã¡ã€ã«æ
å ±ãä¿æããŸãã å€æ°ã®å²ãåœãŠãããã¯ã¹ã€ã³åŒã³åºããªã©ãä»ããŠãã®æ
å ±ãäŒéããŸããåŒã³åºãå
ãã¡ã€ã«ããçºçããQuoted
å€ã¯ã url()
ãŸãã¯data-uri()
ã§åŠçããããšããã®åŒã³åºãå
ãã¡ã€ã«ã«å¯ŸããŠè§£æ±ºãããŸãã ã ãã ããããã¯ã¹ã€ã³ã®å
éšããžãã¯ã®äžéšã§ããQuoted
å€ã¯ãããã¯ã¹ã€ã³ã®ããŒã«ã«ãã¡ã€ã«ã«å¯ŸããŠè§£æ±ºãããŸãã
ããã«ããã次ã®ãããªçœ®ææååã䜿çšããã·ããªãªãé€ããŠããã¹ãŠãæåŸ ã©ããã«æ©èœãç¶ããŸãã
// mixins.less
.background(@image) {
background-image: data-uri("@{image}.jpg");
}
// app/content/button.less
button {
.background("images/btn");
}
ããããä¿®æ£ããããã«åŒã£åŒµãããšãã§ããããªãã¯ããããŸãã眮æããŒã¯ã³ã«å ¥åãããšãã«ãããŒã¯ã³ã眮ææååã®æåã«ããå Žåãçµæã®æååã¯ãå ¥åãããããŒã¯ã³ãããã¡ã€ã«æ å ±ãç¶æ¿ããå¿ èŠããããŸãã眮ææååã®ã
ããã¯ã¹ã€ã³èªèº«ã®äœè
ã®æå³ãããã®ãããªãã¹ãããã¯ã¹ã€ã³ãã¡ã€ã«ã«å¯ŸããŠè§£æ±ºããããšã§ããå Žåã§ããããšãã°"./@{image}.jpg"
ããã¿ãŒã³ãšããŠäœ¿çšããããšã§ããã®äœè
ã¯ãããæ©èœãããããšãã§ããŸãã ããã¯ããªããæããã®ã§ããçºä¿¡è
ãã責任ã®è² æ
ãå¹æçã«ã·ããããŸãã
// _mixins.less
.sprite(@image) {
background: data-uri("../images/sprites/@{image}.png") no-repeat;
}
// main.less
div {
.sprite('logo');
}
åºåïŒ
div {
background: url(data:image/png;base64,...) no-repeat;
}
ãããŒãããã¯éåžžã«å€ããã®ã§ã....ãã®åé¡ãç§ã«ã圱é¿ãäžããŠããã®ã§ç§ã®2ã»ã³ãã
URLé¢æ°ã«ãªãã·ã§ã³ãè¿œå ããããURLã絶察ãšããŠè§£æ±ºããæ°ããé¢æ°ãäœæãããããã®ã¯ã©ãã§ããã ããããã°ãããã¯ã¹ã€ã³ãã©ãã«èšå®ãããŠããŠãã絶察ãã¹ã§åäœããééãã®äœå°ã¯ãããŸããã
URLé¢æ°ã«ãªãã·ã§ã³ãè¿œå ããããURLã絶察ãšããŠè§£æ±ºããæ°ããé¢æ°ãäœæãããããã®ã¯ã©ãã§ããã ããããã°ãããã¯ã¹ã€ã³ãã©ãã«èšå®ãããŠããŠãã絶察ãã¹ã§åäœããééãã®äœå°ã¯ãããŸããã
ããã§ã®åé¡ã¯ã絶察ãã¹ãšçžå¯Ÿãã¹ã«é¢ãããã®ã§ã¯ãããŸããã§ããã ããã¯ãã³ãŒã«ãµã€ãã«å¯Ÿããçžå¯Ÿçãªãã®ãšå®£èšãµã€ãã«å¯Ÿããçžå¯Ÿçãªãã®ã«ã€ããŠã§ããã å šãéãåé¡ã
ããããåé¡ã¯é²å±ããŸããããæåã®ã³ã¡ã³ããšã¿ã€ãã«ã¯ãåŒã³åºããããã¡ã€ã«ã«é¢é£ãããã¹ã解決ããdata-uriã«é¢ãããã®ã§ãããå¥ã®å Žæã«é 眮ãããããã¯ã¹ã€ã³ãšçµã¿åããããšããã¹ãæ£ãã解決ãããªãå¯èœæ§ããããŸãã ãŸããããã¯ç§ãçµéšããŠããåé¡ã§ãã
ã§ã¯ã解決çãšããŠçµ¶å¯Ÿãã¹ã¯ã©ãã§ãããèæ ®ã«å ¥ããã®ã§ããããïŒ
data-uriã絶察ãã¹ãåãå
¥ããæ¶ç©ºã®absolute-url
é¢æ°ããããšãããšãããã¯ã¹ã€ã³ãã©ãã«é
眮ãããŠããŠãã次ã®ã³ãŒãã¯æ©èœããŸãã
// mixins.less
.background(@image) {
background-image: data-uri(@image);
}
// app/content/button.less
button {
.background(absolute-url("images/btn.jpg"));
}
@ miljan-aleksicã絶察ããšã¯ã data-uri
å Žæã«ãããã¡ã€ã«ã«é¢é£ããããšãæå³ããŸããïŒ ãããããªããã絶察ãã¯ããããééã£ãçšèªã§ãã
ãã ããURLãã¡ã€ã«çžå¯Ÿãäœæããããã®URLã®æ©èœã©ãããŒã®ããã§ãããããã¯è¯ãã¢ãããŒãã§ãã ãŸãã¯ãurlïŒïŒãžã®è¿œå ã®åŒæ°ã
@ matthew-deanã絶察çã«ã¯ãã¡ã€ã«ãžã®ãã«ãã¹ãæå³ããŸããäŸïŒ /users/myuser/projects/lessproject/icon.svg
ã
urlïŒïŒããubicationãç¥ããã«ãdata-uriãã±ãŒã·ã§ã³ãã¡ã€ã«ãžã®çžå¯Ÿãã¹ãäœæããæ¹æ³ãããããªããããããªãã®ã¢ãããŒãã¯ããããŸããã
ãã ããURLãã¡ã€ã«çžå¯Ÿãäœæããããã®URLã®æ©èœã©ãããŒã®ããã§ãããããã¯è¯ãã¢ãããŒãã§ãã ãŸãã¯ãurlïŒïŒãžã®è¿œå ã®åŒæ°ã
ããããªããšã«; ããã¯ç§ãæ°å¹Žåã«ææ¡ããããšãšã»ãŒåãã§ãã ;-)
絶察ãšã¯ããã¡ã€ã«ãžã®ãã«ãã¹ãæå³ããŸãïŒäŸïŒ/users/myuser/projects/lessproject/icon.svgïŒã
絶察ãã¹ã§ã¯ã absolute-url
é¢æ°ãåŒã³åºããããã¡ã€ã«ã®å Žæã«åºã¥ããŠããã®absolute-url
é¢æ°ãå®å
šãªåºåãã¹ã«æž¡ãããçžå¯Ÿãã¹ã_pre-resolves_ããããšãæå³ããŠããããã«èŠããŸããã³ã³ãã€ã«ãããåºåCSSãã¡ã€ã«ã移åããå Žæãåºæºã«ããŠããŸãã
ã€ãŸããããªãã¯äž¡æ¹ãšãåãããšãæå³ããŸãã ç§ãããã ã£ããåœæã
ã³ã³ãã€ã«ãããåºåCSSãã¡ã€ã«ã移åããå Žæãåºæºã«ããŠãabsolute-urlé¢æ°ãåŒã³åºããããã¡ã€ã«ã®å Žæã«åºã¥ããŠå®å šãªåºåãã¹ã«ç§»åããŸãã
ã®ããã«ãæžãæãURLãŸãã¯ã«ãŒããã¹ã¯åŒãç¶ãé©çšãããŸãããå®çŸ©ã®å Žæã«åºã¥ããŠããŸããïŒ ããã¯ã @ lukeapageã®å
ã®äŸãšã¯å°ãç°ãªãããã§ãããã®äŸã§ã¯ãåºåã«é¢é£ããURLã«ã€ããŠã§ã¯ãªãã_ã³ã³ãã€ã«äžã®_URLã«ã€ããŠèª¬æããŠããŸããã äŸïŒ data-uri()
å Žæã
ãããã£ãŠã人ã ãé¡äŒŒããŠãããå®å šã«åäžã§ã¯ãªãåé¡ã«ã€ããŠæçš¿ããŠããããããã®åé¡ã远跡ããã®ã¯å°ãé£ããã§ãã ã€ãŸããçžå¯Ÿçãª_source_ãå€æŽããã«ã¯ãçžå¯Ÿçãª_output_ãå€æŽããã®ãšã¯ããªãç°ãªããœãªã¥ãŒã·ã§ã³ãå¿ èŠã«ãªãå¯èœæ§ããããŸãã ãŸãã¯ããããããã§ã¯ãããŸããã ãã¹ããžãã¯ã«äŸåããŸãã ãã ããdata-uriã¯åºåãšããŠãã¹ãçæããªãããšãæ確ã«ããå¿ èŠããããŸãã
ãã¶ãresolve()
ãããªãã®ãå¿
èŠã§ããïŒ ããããªãããã åŸãåãã ããªã®ã«url(resolve(file(), "my/path"))
ïŒ @ miljan-aleksicãabsolute()
æå³ãããšããã ãšæããŸããã€ãŸãã絶察URLã«è§£æ±ºãããŸãã ãã ããããã§ãå
¥åãå¿
èŠã§ãïŒè§£æ±ºããã«file()
ã file-resolve()
ãããªããšãå®è¡ããŠããã®ããžãã¯ã1ã€ã®é¢æ°ã§æå®ã§ããŸããã resolve()
ãšfile()
ã2ã€ã®é¢æ°ãšããŠæã€ãšå¥ã
ã«åœ¹ç«ã€å ŽåããããŸãã
ããããã¹ãŠã«ã€ããŠæ³šæãå¿ èŠãªã®ã¯ããã¹ãŠã®æžãæãURLãªãã·ã§ã³ã§ããããã«ãããPRããŒãžã®æç¹ã§ãã¢ãžã¥ãŒã«ã®ãµããŒããè¿œå ãããŸããã ïŒhttps://github.com/less/less.js/pull/3248ïŒã ããã§ããã¡ã€ã«çžå¯ŸURLãè¿ãå Žåã§ãããããæžãæããããšã¯ã§ããŸããïŒ ã¯ããšæããŸãããæ確ã«ããå¿ èŠããããŸãã
ã¯ããresolveïŒïŒãšfileïŒïŒã¯ãç§ã説æããããšããŠããããšãæ£ç¢ºã«å®çŸ©ããŠããŸãã è¿ãå°æ¥ããããå®è£ ãããããšãæåŸ ããŠããŸãã
@ miljan-aleksicããŠãããã¯çã«ããªã£ãŠããŸãã
å®éã file()
ã¯æ£ãããããŸãããããã¯ãç§ãæšæž¬ãããã¡ã€ã«åãè¿ãããã dir()
ãŸãã ãããŠãããã¯ãããããã¡ã€ã«ããšã®å€æ°å®æ°ã§ãªããã°ãªããŸããã
ã©ãã§ããïŒ
data-uri(resolve(<strong i="10">@DIR</strong>, "my/path"))
ãã®ããã2ã€ã®ããšãè¿œå ãããŸããã1ïŒãã¹ãçµåããresolveïŒïŒé¢æ°ã2ïŒè©äŸ¡äžã«åãã¡ã€ã«ã«æ¿å
¥ããã@DIR
ïŒããã³@FILE
ïŒïŒå®æ°ã ããã«ã€ããŠã®å¯äžã®ããªãããŒãªããšã¯ããããã®æ³šå
¥ãããå€æ°ãã«ãŒãå
ã®ä»ã®å€æ°ããªãŒããŒã©ã€ããŸãã¯ããŒãžããªãããšããã¹ãããããšã§ãããããã«å¯ŸããŠãã¹ãããã®ã¯ããªãç°¡åãªã¯ãã§ãã ãŸãã¯ã @arguments
ããã«å°æåã«ããå¿
èŠããããŸããïŒ ãã®å Žåã競åãé¿ããããã«@directory
ãš@filename
ããå§ãããŸãã æãå°ãªãyãªãã·ã§ã³ã¯äœã§ããïŒ
ãã¶ã
resolve()
ãããªãã®ãå¿ èŠã§ããïŒ
^ãã³ãŽã ãŸãã«ãã®éãã§ãã
æãå°ãªãyãªãã·ã§ã³ã¯äœã§ããïŒ
Node.js-yãªãã·ã§ã³ãéžæããŸãïŒ __dirname
ããã¯é·ãéååšããŠããŠãããç¥ãããŠããŸãã Lessã®åãæŠå¿µã«åãååã䜿çšããã®ã¯è¯ãèããããããŸããã
Node.js-yãªãã·ã§ã³ãéžæããŸãïŒ__ dirname
ãšã©ãŒ...ããã¯Less / CSSããŒã¯ãŒãã«ãLesså€æ°ã«ãé¢æ°ã»ãã³ãã£ã¯ã¹ã«ãäžèŽããŸããã ãããããããŸããããªããã°ãªããªãã§ãããã @__dirname
ãããããŸããããã¢ã³ããŒã¹ã³ã¢ã¯ãŸã èšèªã«ãšã£ãŠå°ãå¥åŠã§ãã ããã¯ãŸã£ããé©åããŸããã
ã¢ã³ããŒã¹ã³ã¢ã¯ãèšèªã«ãšã£ãŠãŸã å°ãå¥åŠã§ãã ããã¯ãŸã£ããé©åããŸããã
ç¹ã«çµã¿èŸŒã¿å€æ°ã®ãããªãã®ã«é¢ããŠã¯ãå€ãã®èšèªã§ãã·ã¹ãã ãæäŸãããã®ãã瀺ãããã«ãäºéã®å é ã®äžç·ã䜿çšãããŸãã ã§ããããå Žéãã¯ããã«ãããã€ã³ãã®ãããªãã®ã§ãã
ãã¡ãã; æ°ã«å
¥ããªãå Žåã¯ããã€ã§ã@dirname
ã@dir-name
ãããªæŽŸçç©ã䜿çšã§ããŸãã
ããããããã«ã€ããŠããå°ãèããã®ã«ããªãçŸåšã®ãã¡ã€ã«ãã¹ãå€æ°ãšããŠå
¬éããå¿
èŠãããã®ã§ããããã æŠå¿µçãªresolve()
é¢æ°èªäœã«ç¹ã蟌ãããšã¯ã§ããŸãããïŒ
æŠå¿µçãªresolveïŒïŒé¢æ°èªäœã«çµã¿èŸŒãããšã¯ã§ããŸãããïŒ
ãããŠãé¢æ°åãå€ããã ãã§ãç§ã®ææ¡ã«æ»ããŸããã ç§ã¯ãŸã ãããäžçªå¥œãã§ãresolveïŒïŒãšããŠããã«è¯ãã§ãã
ãããŠãé¢æ°åãå€ããã ãã§ãç§ã®ææ¡ã«æ»ããŸããã
ããçš®ã
ç§ãåŸãŠããã®ã¯ã resolve()
é¢æ°ã®åŒã³åºããä¿æããŠãããã¡ã€ã«ã®URL /ãã¹ãæž¡ãå¿
èŠããªããšããããšã§ãããã®å Žæã¯ãé¢æ°ã«å¯ŸããŠ_æ¢ç¥_ã§ããå¿
èŠãããããã§ãã
é¢æ°å
ã®this
ã¯ã currentFileInfo
ããããã£ãæã€FunctionCaller
ã€ã³ã¹ã¿ã³ã¹ãcurrentFileInfo
ãŸãã
ãã®ããããã£ã¯ãé¢æ°åŒã³åºãã«å¯Ÿå¿ããCall
ASTããŒãã®ãã¡ã€ã«æ
å ±ã«åæåãããŸãã
ã€ãŸã
ã³ãŒããæ£ããèªãã§ããå Žåãããã«ãããã¡ã€ã«æ å ±ã¯ãé¢æ°åŒã³åºããè©äŸ¡ããããã¡ã€ã«ã§ã¯ãªããé¢æ°åŒã³åºãã_宣èšãããŠããå Žæã®ãã¡ã€ã«æ å ±ã«å¯Ÿå¿ããŸãã
ã€ãŸãããã®ãã¡ã€ã«æ å ±ããç±å¿ãªãURLãªãŸã«ããŒã«äœ¿çšããŠãåé¡ãããŸããã å¥ã®ãã¡ã€ã«ã®ã³ã³ããã¹ãå ã§ã€ã³ããŒãããã³è©äŸ¡ãããããã¯ã¹ã€ã³å ã«é¢æ°åŒã³åºããé 眮ãããå Žåã§ããæåŸ ã©ããã«åäœããŸãã ã€ãŸããããã¯ã¹ã€ã³ãå®çŸ©ãããŠãããã¡ã€ã«ã«åºå®ããã解å床ã§ã
ããããããã«ã€ããŠããå°ãèããã®ã«ããªãçŸåšã®ãã¡ã€ã«ãã¹ãå€æ°ãšããŠå ¬éããå¿ èŠãããã®ã§ããããã æŠå¿µçãªresolveïŒïŒé¢æ°èªäœã«çµã¿èŸŒãããšã¯ã§ããŸãããïŒ
çŸåšã®ãã¡ã€ã«ãäžè¬çãªãªãŸã«ããŒé¢æ°ãå¿
èŠãªãããšã確å®ãªå Žå...å€å...æ瀺çãªããŒã«ã«å€æ°ã¯ãããããžã§ããªãã¯é¢æ°ã§ã¯ãªããé¢æ°ã次ã®ããã«è©äŸ¡ãããªãããšãæ確ã«ããŸããã®ä»ã®æ©èœã ãããç§ã®æ¬åœã®é¢å¿äºã§ããã»ãã³ãã£ã¯ã¹ã§ãã ååã«é¢ä¿ãªãããçŸåšã®ãã¡ã€ã«ãã®ç¹å¥ãªãããŒã«ãŒãããªãå Žåã¯ãå
¥åã«åºã¥ããŠåãããã«è§£æ±ºãããä»ã®é¢æ°ãšã¯ç°ãªããŸãã èšãæããã°ãããã¯ç®ã«èŠããªãå
¥åã«åŸã£ãŠè§£æ±ºããé¢æ°ã§ãããããã¯ç§ã«é¢ä¿ããŠããŸãã ãã ããé¢æ°ãcurrent-file-resolve()
ããã«éåžžã«æ瀺çãªãã®ã§ããå Žåã¯ãããã§ååã§ãã ããããªããšãããã¯ã¹ã€ã³ãå®çŸ©ããããã¡ã€ã«ã§ã¯ãªããåŒã³åºããããã¡ã€ã«ã«åŸã£ãŠããã¯ã¹ã€ã³åŒã³åºããspecialfunction()
解決ããªãã£ãçç±ã人ã
ã«æ··ä¹±ãããããšã«ãªããŸãã
ãããã£ãŠãããããããŒã«ã«å€æ°ã¯æè¡çã«ã¯_å¿ èŠ_ã§ã¯ãããŸããããæå³/åºå/åäœã¯ã»ãã³ãã£ã¯ã¹ããæ確ã§ããå¿ èŠããããŸãã
ããŒã...
OKã 次ã«ã resolve-url(url, [base])
é¢æ°ããããŸã-ãªãã·ã§ã³ã®base
; ããã©ã«ãã§ã¯ãé¢æ°åŒã³åºããæžã蟌ãŸãã/宣èšããã/å®çŸ©ããããã¡ã€ã«ã®ãã£ã¬ã¯ããªã«ãªããŸãã 次ã«ãäœæè
ããã¹ãæ瀺çã«ãã«ãããå Žåã«åããŠã this.fileInfo
ããã«ããŠãã¹ãååŸããdeclared-dir()
é¢æ°ãçšæããŸãã å¥ã®ãã¡ã€ã«ãããã¹ãååŸãããã ãŸãã¯ãURL解決ã«é¢ä¿ã®ãªãä»ã®æ©èœã®äžéšãšããŠããã䜿çšããå¿
èŠããããŸãã
ã€ãŸããå®å šãªåœ¢åŒã®åŒã³åºãïŒæé»ã®ããŒã¹ãªãïŒã¯æ¬¡ã®ããã«ãªããŸãã
resolve-url("../foo", declared-dir())
...ãããŠãã ããããšãšåçã ãã
resolve-url("../foo")
...ããã¯æ æ°ãªãã®ãšåçã®ç±å¿ãªãã®ã§ã
url("../foo")
ãã®ããã«ãèªåçã«ã泚å
¥ãããå€æ°ã¯å¿
èŠãããŸããã ããã¯ãçŽç²ã«ãã©ã°ã€ã³é¢æ°ã®ã»ãããšããŠå®è£
ã§ãããšæããŸãã ãããŠãå¿
èŠãªå¯äžã®ã³ã¢ã¡ã«ããºã ã¯ãURLãã解決æžã¿ããšããŠããŒã¯ããæ¹æ³ã§ããããã«ãããããã©ã«ãã®ãªãŸã«ããŒããžãã¯ãresolve-url
é¢æ°ããåºåãããURLã§å®è¡ãããªãããã«ãããã¯ã§ããŸãã
ã»ãã³ãã£ã¯ã¹ã¯ããã¡ããããã¥ã¡ã³ãã§æ確ã«ããå¿
èŠããããŸãã ãããŠããã®ããã¥ã¡ã³ãã¯ã url
ãresolve-url
ãšæ瀺çã«æ¯èŒããŠãç±å¿ã§æ æ°ãªè©äŸ¡/解決ã説æããããšãã§ããŸãã
ã€ã³ããŒãããããã¡ã€ã«ã®ã¹ã³ãŒããåãã§ããããããæ³šå ¥ãããå€æ°ãã®ã¢ã€ãã¢ãïŒè¿œå ã®ããã¯ãªãã§ïŒæ©èœããªãå Žåã«åããŠã
<strong i="7">@__dir</strong>: "whatever";
// *everywhere* it's the only <strong i="8">@__dir</strong> value = the path of "c"
<strong i="9">@import</strong> "a";
<strong i="10">@import</strong> "b";
<strong i="11">@import</strong> "c";
é¢æ°ããŒã¹ã®å®è£
ã«ã€ããŠèšãã°ã this.context.?
ãŸãã¯this.context.frames[?]
ã©ããã§é¢æ°ãåŒã³åºããããã¡ã€ã«ã®ãã¹ãååŸããããšã¯ãŸã å¯èœã ãšæããŸãïŒãã ãã確å®ã§ã¯ãããŸããïŒããšãããããã
ããŒããããã§ç§ãã¡ã¯ããã解決ããããã®ããè¯ãæ¹æ³ããããŸãããïŒ
@heynext
ããŒããããã§ç§ãã¡ã¯ããã解決ããããã®ããè¯ãæ¹æ³ããããŸãããïŒ
é 延è©äŸ¡ã¯ãããé©åã«è§£æ±ºããããšãéåžžã«é£ããããŸããç§ã¯æããŠããŸãã
@ seven-phases-max
é¢æ°ããŒã¹ã®å®è£ ã«ã€ããŠèšãã°ãthis.context.?
ãŸãã¯this.context.frames[?]
ã©ããã§é¢æ°ãåŒã³åºããããã¡ã€ã«ã®ãã¹ãååŸããããšã¯ãŸã å¯èœã ãšæããŸãïŒãã ãã確å®ã§ã¯ãããŸããïŒããšãããããã
ã¯ãããã®éå±€ã§Call
ããŒããèŠã€ããããšãã§ããã¯ãã§ãã
æãåèã«ãªãã³ã¡ã³ã
ããŒã...
OKã 次ã«ã
resolve-url(url, [base])
é¢æ°ããããŸã-ãªãã·ã§ã³ã®base
; ããã©ã«ãã§ã¯ãé¢æ°åŒã³åºããæžã蟌ãŸãã/宣èšããã/å®çŸ©ããããã¡ã€ã«ã®ãã£ã¬ã¯ããªã«ãªããŸãã 次ã«ãäœæè ããã¹ãæ瀺çã«ãã«ãããå Žåã«åããŠãthis.fileInfo
ããã«ããŠãã¹ãååŸããdeclared-dir()
é¢æ°ãçšæããŸãã å¥ã®ãã¡ã€ã«ãããã¹ãååŸãããã ãŸãã¯ãURL解決ã«é¢ä¿ã®ãªãä»ã®æ©èœã®äžéšãšããŠããã䜿çšããå¿ èŠããããŸããã€ãŸããå®å šãªåœ¢åŒã®åŒã³åºãïŒæé»ã®ããŒã¹ãªãïŒã¯æ¬¡ã®ããã«ãªããŸãã
...ãããŠãã ããããšãšåçã ãã
...ããã¯æ æ°ãªãã®ãšåçã®ç±å¿ãªãã®ã§ã
ãã®ããã«ãèªåçã«ãæ³šå ¥ãããå€æ°ã¯å¿ èŠãããŸããã ããã¯ãçŽç²ã«ãã©ã°ã€ã³é¢æ°ã®ã»ãããšããŠå®è£ ã§ãããšæããŸãã ãããŠãå¿ èŠãªå¯äžã®ã³ã¢ã¡ã«ããºã ã¯ãURLãã解決æžã¿ããšããŠããŒã¯ããæ¹æ³ã§ããããã«ãããããã©ã«ãã®ãªãŸã«ããŒããžãã¯ã
resolve-url
é¢æ°ããåºåãããURLã§å®è¡ãããªãããã«ãããã¯ã§ããŸããã»ãã³ãã£ã¯ã¹ã¯ããã¡ããããã¥ã¡ã³ãã§æ確ã«ããå¿ èŠããããŸãã ãããŠããã®ããã¥ã¡ã³ãã¯ã
url
ãresolve-url
ãšæ瀺çã«æ¯èŒããŠãç±å¿ã§æ æ°ãªè©äŸ¡/解決ã説æããããšãã§ããŸãã