ããŒãžäžã®èŠçŽ ã®ã¬ã€ã¢ãŠãããã³æ§æäžã®ã€ã³ãã³ãã®ç·šæã«ã¯ãé©åãªçµã¿åãããšæãŸããçµæã確ä¿ããããã®ã¹ãã«ãå¿
èŠã§ãã
ãã¶ã€ã³ã¬ã€ã¢ãŠãã§ãè¡ã®é«ããšãã©ã³ãã¬ã³ããªã³ã°ã®ç©ºã®é åïŒè©ãçºé³åºå¥ç¬Šå·ãéé ã®é«ãïŒãèæ
®ããã«ãèŠæ±ãããã€ã³ãã³ãã瀺ãããŠããå Žå æåã§é·æéåéèšããã«ãã¬ã€ã¢ãŠããã§ããã ãå¹ççã«ã¬ã€ã¢ãŠãã«è¿ã¥ããã«ã¯ã©ãããã°ããã§ããïŒ ãªãŒãã£ã³ã°ããã³åçŽãªãºã ã«ãããèŠçŽ éã®è·é¢ãçµ±äžã§ããŸããã䜿çšããããã©ã³ãã®ããã¹ãã¡ããªãã¯ãèæ
®ããè·é¢è£æ£ã®åé¡ã¯è§£æ±ºããŸããã
é«çŽé¡§å®¢åãã®ã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåããã¹ãŠã®ãã¯ã»ã«ãå¶åŸ¡ãããŠããã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã®æ£ç¢ºãã«ç¹å¥ãªæ³šæãæãããŸãã
ãã®èšäºã§ã¯ãã€ã³ãã³ãã«é¢ããã«ãŒãã³äœæ¥ãæé©åããããã«èšèšãããã¢ãããŒããæ€èšããŸã-ã¿ãŒã²ããèŠçŽ ã®è¡ã®é«ããšã¹ã¿ã€ã«ã®ããªã³ã³ãã€ã«ãŸãã¯ãã¹ãã³ã³ãã€ã«ã®æ®µéã§äœ¿çšããããã©ã³ãã®ããã¹ãã¡ããªãã¯ã«åºã¥ããèªåã€ã³ãã³ã調æŽã
èšèšä»æ§èŠä»¶
ãããã£ãŠãããèŠçŽ ã®ããŒã¹ã©ã€ã³ããæ¬¡ã®èŠçŽ ã®å€§æåïŒãã£ããââã©ã€ã³ïŒã®äžéšå¢çãŸã§ã®ããã¹ããå«ãèŠçŽ éã®è·é¢ã¯ãçºé³åºå¥ç¬Šå·ãšè©ã®æç»é åãé€ããŠãç¹å®ã®å€ïŒããšãã°ïŒ24pxïŒã§ãªããã°ãªããŸããã

ããã£ã³ã°ãããŒãžã³ãªã©ã®å®£èšã§ãã®å€ã䜿çšãããšã次ã®èŠçŽ ãå«ãã€ã³ãã³ãé åãèŠçŽ éã«åœ¢æãããŸãã
- èŠçŽ éã§çŽæ¥æå®ãããã€ã³ãã³ãå€ïŒ24pxïŒã
- ïŒã€ã³ãã³ãããäžïŒããã¹ãã®ããŒã¹ã©ã€ã³ïŒããŒã¹ã©ã€ã³ïŒãšãã©ã³ãå¢çããã¯ã¹ïŒãã©ã³ãå¢çããã¯ã¹ãb-boxãbboxïŒã®äžã®å¢çç·ïŒäžã®ãã¢ãªã³ã°ã©ã€ã³ïŒã®éã®è·é¢ã¯ãäžã®ãªãã»ããã®é«ãïŒéäžã®é«ãïŒã§ãã
- ïŒã€ã³ãã³ãããäžïŒãã©ã³ãå¢çããã¯ã¹ã®äžå¢çç·ãšèŠçŽ ã®è¡ã®é«ãã®äžå¢çç·ã®éã®è·é¢ïŒããšãã°ã16px / 1.5ãæå®ããå Žåã¯4pxïŒã
- ïŒã€ã³ãã³ãïŒè¡ã®é«ãã®äžå¢çç·ãšãã©ã³ãå¢çããã¯ã¹ã®äžå¢çç·ã®éã®è·é¢ã ããšãã°ã16px / 1.5ãæå®ããå Žåã¯4pxïŒã
- ïŒã€ã³ãã³ãïŒãã©ã³ãå¢çããã¯ã¹ã®äžéšã®ãã¢ãªã³ã°ã©ã€ã³ãšã倧æåã®äžç·ãéãã©ã€ã³ïŒãã£ããââã©ã€ã³ïŒã®éã®è·é¢ãåé³èšå·ãšè©ãå«ã¿ãŸãã
äŸ
äŸãšããŠãããã¹ãä»ãã®ãããŒã®å®è£
ãæ€èšããŸãã
<div class="banner"> <div class="banner__media"> <div class="banner__content"> <h2 class="banner__content-title">Men</h2> <p class="banner__content-description">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text.</p> <ul class="banner__content-links"> <li> <a href="#">Women</a> </li> <li> <a href="#">Men</a> </li> <li> <a href="#">Boys</a> </li> <li> <a href="#">Girls</a> </li> </ul> </div> </div> </div>
å¶çºçãªãããžã§ã¯ãã«é©çšãããæŽ»çå°å·ã¹ã¿ã€ã«ïŒ
.type-h2 { font-family: Arial; font-size: 35px; line-height: 40px; font-weight: bold; text-transform: uppercase; letter-spacing: 2px; html[lang^="de"] & { font-family: 'Karla Bold'; font-size: 35px; line-height: 40px; } } .type-p1 { font-family: Arial; font-size: 16px; line-height: 22px; font-weight: normal; letter-spacing: 0; html[lang^="de"] & { font-family: 'Karla Regular'; font-size: 16px; line-height: 22px; } } @media only screen and (min-width: 480px) and (max-width: 767px) { .type-h2 { font-family: Arial; font-size: 50px; line-height: 55px; html[lang^="de"] & { font-family: 'Karla Bold'; font-size: 50px; line-height: 55px; } } .type-p1 { font-family: Arial; font-size: 16px; line-height: 22px; html[lang^="de"] & { font-family: 'Karla Regular'; font-size: 16px; line-height: 22px; } } } @media only screen and (min-width: 768px) { .type-h2 { font-family: Arial; font-size: 80px; line-height: 90px; html[lang^="de"] & { font-family: 'Karla Bold'; font-size: 80px; line-height: 90px; } } .type-p1 { font-family: Arial; font-size: 19px; line-height: 26px; html[lang^="de"] & { font-family: 'Karla Regular'; font-size: 19px; line-height: 26px; } } }
ïŒãã©ã³ããµã€ãºãšè¡ã®é«ãã¯ããã¬ãŒã¯ãã€ã³ããšãã±ãŒã«ã«å¿ããŠãèŠåºãã¯ã©ã¹ïŒ.type-h2ïŒã𿮵èœïŒ.type-p1ïŒã«å¯ŸããŠåå®çŸ©ãããŸããïŒãŸãããããŒã®ã¹ã¿ã€ã«ãçŽæ¥èšå®ããŸãã
@import 'path/to/typography.scss'; .banner { display: flex; flex-direction: column; justify-content: flex-end; background: url('path/to/banner-image.png') no-repeat center bottom; background-size: cover; &__content { color: #fff; padding: 48px 0 48px 48px; &-title { @extend .type-h2; } &-description { @extend .type-p1; max-width: 80%; margin-top: 24px; } &-links { @extend .type-p1; display: flex; flex-direction: row; margin-top: 24px; li { margin-left: 18px; &:first-child { margin-left: 0; } a { color: inherit; } } } } }
ïŒæç¢ºã«ããããã«ãã€ã³ãã³ãã瀺ãé åã¯èŠçŽ ã®èŠèŠçãªå¢çã«ã·ãããããŸãïŒè±èªãã±ãŒã«ã®çµæïŒ

ãã€ãèªãã±ãŒã«ã®çµæ
ïŒçºé³åºå¥èšå·ã®åéã瀺ãããã«ãè±èªããŒãžã§ã³ãšæ¯èŒããŠã¿ã€ãã«ã倿ŽãããŠããŸãïŒ ïŒ

äºæ³ã©ãããå®éã®ã€ã³ãã³ãå€ïŒ24pxïŒã¯ããã©ã³ãã®è¡ã®é«ããšå¢çããã¯ã¹ã®ç©ºã®é åãçºé³åºå¥èšå·ã®é åãããã³ãã©ã³ãã®é«ããäžã®é åã«ãã£ãŠè£å®ãããŸããã
æãŸããçµæãéæããããã«ã次ã®ã¢ãããŒããæ€èšãããŸããã
1.ããã¹ãèŠçŽ ã®è¡ã®é«ããæžãããŸãã
çæïŒ
-è¡éãã«åœ±é¿ãããããè€æ°è¡ã®ããã¹ãã«ã¯é©ããŠããŸããã
-å®éã®å€ã«ãããããããšããã©ã³ãã®é«ãã«ããããã©ã³ãå¢çããã¯ã¹ã®ç©ºã®é å-è©ãæ®ããŸãã
2.ããã¹ãèŠçŽ èªäœïŒãŸãã¯ãããå«ãïŒã®è² ã®ã€ã³ãã³ãå€ã䜿çšãããã代æ¿ãšããŠãã®æ¬äŒŒèŠçŽ ã䜿çšããŠããäœåãªãé«ãã«ãªãã»ããããŸãã
.selector { margin-top: -6px; } .selector-2:before { content: ''; display: table; margin-top: -6px; }
çæïŒ
- æ¢ã«äœ¿çšãããŠããå¯èœæ§ã®ããèŠçŽ ãŸãã¯æ¬äŒŒèŠçŽ ã®ã¹ã¿ã€ã«ã«åœ±é¿ããŸãã
- ç°ãªãããŒã«ã©ã€ãºã«ç°ãªããã©ã³ããã¡ããªã䜿çšããå Žåãç°ãªãå€ã®æåèšç®ãšè¡šç€ºãå¿
èŠã§ããããã¯ã远å ã®ã«ãŒã«ã®äœæãæå³ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®åºæ¬çãªæŽ»çå°å·ã¹ã¿ã€ã«ã倿Žãããããã©ã³ãã倿Žãããããå Žåããã¹ãŠã®å€ãåèšç®ããå¿
èŠããããŸãïŒæ°ãããã©ã³ãã®ããã¹ãã¡ããªãã¯ãç°ãªãããïŒã
3.ãã©ã³ãèªäœã倿ŽããŠããã©ã³ãå¢çããã¯ã¹ã®ãµã€ãºãã°ãªãã®ã¬ã³ããªã³ã°å¢çãŸã§çž®å°ããŸãã
çæïŒ
- ã·ã¹ãã ãã©ã³ãã«ã¯é©ããŠããŸããã
- ã©ã€ã»ã³ã¹ããããã©ã³ãã«ã¯é©ããŠããŸãããäœ¿çšæ¡ä»¶ããã³/ãŸãã¯å€æŽæ¡ä»¶ã«éåããå¯èœæ§ãããããã§ãã
- 倧æåïŒãã£ããââã©ã€ã³ïŒã®äžã®å¢çç·ãšéé ã®é«ãïŒéé ã®é«ãïŒã®é åïŒpãªã©ã®æåã®å ŽåïŒäžã®çºé³åºå¥ç¬Šå·ïŒäŸãã°ãareaããÃãÃãÅžãªã©ã®æåïŒã®é åãè£æ£ããåé¡ã解決ããŸãããgãjïŒã
4.é©çšããã€ã³ãã³ãã®å€ãæžãããŠãç®çã®å€ãšèŠèŠçã«äžèŽãããŸãã
çæïŒ
- 䜿çšãããã©ã³ãã®æŽ»çå°å·ã¹ã¿ã€ã«ãšããã¹ãã¡ããªãã¯ã«å¿ããŠãã¿ãŒã²ããã飿¥èŠçŽ ã§äœ¿çšãããæŽ»çå°å·ã¹ã¿ã€ã«ã«å¿ããŠå€ãèšç®ããå¿
èŠããããŸãã
- ããŒã«ã©ã€ãºããšã«ç°ãªããã©ã³ããã¡ããªã䜿çšããå Žåã¯ãç°ãªãå€ãå¿
èŠã§ããããã¯ã远å ã®ã«ãŒã«ãæåã§äœæããããšãæå³ããŸãã
- ãµã€ãã®åºæ¬çãªæŽ»çå°å·ã¹ã¿ã€ã«ã倿Žãããããã©ã³ãã眮ãæããããããšã䜿çšããå€ãåã«ãŠã³ãããããšãæå³ããŸãïŒæ°ãããã©ã³ãã®ããã¹ãã¡ããªãã¯ãç°ãªãããïŒã
- ããŸããŸãªããŒã«ãªãŒãŒã·ã§ã³ããã³/ãŸãã¯ã¡ãã£ã¢ã¯ãšãªïŒã¡ãã£ã¢ã¯ãšãªïŒã®è¿œå ã«ãŒã«ã®ååšã¯ããã¹ãŠã®å¯èœãªçµã¿åããã®æåäœæãšèšç®ãæå³ããŸãã
æç€ºãããåé¡ã解決ããäžèšã®æ¹æ³ã®ãã¡ãæãä¿¡é Œæ§ãé«ãæ£ç¢ºã§ãããåæã«æãæéããããã®ã¯æ®µèœ4ã§ãã
ããŸããŸãªãã¬ãŒã¯ãã€ã³ããšããã€ãã®ããŒã«ãªãŒãŒã·ã§ã³ããµããŒãããã¢ããªã±ãŒã·ã§ã³ã®å Žåãããã¯ã䜿çšããã宣èšã«é©çšãããå€ãæ£ç¢ºã«èšç®ããã¡ãã£ã¢ã¯ãšãªãããŒã«ãªãŒãŒã·ã§ã³ã»ã¬ã¯ã¿ãŒãããã³äœ¿çšããããã©ã³ãã®ããã¹ãã¡ããªãã¯ãèæ
®ãã远å ã®ã«ãŒã«ãäœæããå¿
èŠãããããšãæå³ããŸãã æ§ããã«èšã£ãŠããçãã¯çãããã ããã«ãæ£ç¢ºãªã¹ã¿ã€ã«ã®èšè¿°ãšãã®åŸã®æ€èšŒã«è²»ããæéãéçºæéãå¢ãããéçºè
ãšãã¹ã¿ãŒã®äž¡æ¹ã«æ¥åžžçãªäœæ¥ã远å ããŸãã
掻çå°å·èŠåãšäœ¿çšãã©ã³ãã®ããã¹ãã¡ããªãã¯ã«åºã¥ããŠããã¹ãèŠçŽ éã®ã€ã³ãã³ããåèšç®ããããã»ã¹ãèªååãããšãšãã«ã掻çå°å·ã¹ã¿ã€ã«ã§äœ¿çšããããã¹ãŠã®äŸåããçµã¿åããã®èªåãµããŒãã®ããã«ãpostcssãã©ã°ã€ã³postcss-text-indentation-adjustmentãäœæãããŸãã
PostCSSãã©ã°ã€ã³postcss-text-indentation-adjustment
postcss-text-indentation-adjustment-䜿çš
ãããã©ã³ãã®
ããã¹ãã¡ããªãã¯ãèæ
®ã«å
¥ãããšãšãã«ã掻çå°å·ã¹ã¿ã€ã«ãèæ
®ããŠã¹ã¿ã€ã«ã§äœ¿çšãããã€ã³ãã³ãå€ã調æŽã§ããpostcssãã©ã°ã€ã³ã
æäœã¢ã«ãŽãªãºã ïŒ
1.ãã©ã³ããããžã§ã¯ãã§äœ¿çšãããããã¹ãã¡ããªãã¯ãæœåºããŸãã
2.䜿çšãããŠããæŽ»çå°å·ã¹ã¿ã€ã«ããããŒã¿ãæœåºãã
3.ãã©ã°ã€ã³ã®åæåãšã¢ã»ã³ããªããã»ã¹ãžã®çµã¿èŸŒã¿ã
4.掻çå°å·ã»ã¬ã¯ã¿ãŒã䜿çšããç¹å¥ãªæ§æã䜿çšããã宣èšã®å€ã®èª¿æŽã®èª¬æã
5.掻çå°å·ã¹ã¿ã€ã«ã®å€éšã«ãŒã«ã®å¯èœãªãã¹ãŠã®çµã¿åããïŒã¡ãã£ã¢ã¯ãšãªã芪ã»ã¬ã¯ã¿ãŒãããã³ãããã®çµã¿åããïŒã䜿çšããŠããããžã§ã¯ããçµã¿ç«ãŠã調æŽã®çµæãååŸããŸãã
å©ç¹ïŒ
- å
ã®ã€ã³ãã³ãå€ã䜿çšããïŒããšãã°ããã¶ã€ã³ã¬ã€ã¢ãŠããŸãã¯æŽ»çå°å·ã¹ã¿ã€ã«ã¬ã€ãããïŒããããã®å€ã倿°ã«äžå
çã«ä¿åãããã¶ã€ã³èŠä»¶ã倿Žãããšãã«åæå€ãç°¡åã«å€æŽã§ããŸãã
- ã€ã³ãã³ãå€ã¯ãè·é¢ãæžããå¿
èŠãããããã¹ãèŠçŽ ã®æŽ»çå°å·ã¹ã¿ã€ã«å€ã䜿çšããŠãè¡ã®é«ãã®ç©ºã®é åããã©ã³ãå¢çããã¯ã¹ãçºé³åºå¥é åããã©ã³ãã®éé ã®é«ããå·®ãåŒãããã«èª¿æŽãããŸãã
- ã¡ãã£ã¢ã¯ãšãªïŒã¡ãã£ã¢ã¯ãšãªïŒãŸãã¯ç¹å®ã®èŠªã»ã¬ã¯ã¿ãŒïŒhtml [lang ^ = "de"] ã. parent-classnameãªã©ïŒã«äŸåããå°å·ã¹ã¿ã€ã«ã®ã«ãŒã«ãè€æ°ããå Žåãã¿ãŒã²ãã宣èšã«å¿
èŠãªè¿œå ã«ãŒã«ãèªåçã«äœæãããŸãããã®å€ã調æŽããå¿
èŠããããŸããã¡ãã£ã¢ã¯ãšãªã芪ã»ã¬ã¯ã¿ãŒãèæ
®ãã宣èšã®æçµå€ãèšç®ããæ¥ç¶ãããŠãããã©ã³ãã®äœ¿çšè¡ã®é«ããšããã¹ãã¡ããªãã¯ãèæ
®ããŸãã
.type-h2ã¯ã©ã¹ã䜿çšããŠããããŒã®æŽ»çå°å·ã¹ã¿ã€ã«ã«é©çšãããã«ãŒã«ã®äŸã¯ããã©ã³ããã¡ããªã®åå®çŸ©ãããã³ç¹å®ã®ç»é¢å¹
ãšãã€ãèªãã±ãŒã«ã®ãµã€ãºãšè¡ã®é«ããèšè¿°ããŠããŸãã .type-h2 { font-family: Arial; font-size: 35px; line-height: 40px; font-weight: bold; text-transform: uppercase; letter-spacing: 2px; html[lang^="de"] & { font-family: 'Karla Bold'; font-size: 38px; line-height: 46px; } } @media only screen and (min-width: 768px) { .type-h2 { font-family: Arial; font-size: 80px; line-height: 90px; html[lang^="de"] & { font-family: 'Karla Bold'; font-size: 86px; line-height: 94px; } }
4. cssããªããã»ããµïŒããšãã°ãsassãscssãlessïŒã䜿çšããå Žå-åŠçæžã¿ã«ãŒã«ã®ãã¹ããããã³å€æ°ã®äœ¿çšããµããŒããããŸãã
ãã©ã°ã€ã³ã®ä¿®æ£ã®ç²ŸåºŠã¯ãåæåæã«åŒæ°ãšããŠæž¡ããããã©ã³ãã®ããã¹ãã¡ããªãã¯ã«äŸåãããããpostcss-text-indentation-adjustmentãã©ã°ã€ã³ããã®äŸã«çµ±åããåã«ãããã¹ãã¡ããªãã¯ã®æœåºæ¹æ³ãæ€èšããŸãã
ããã¹ãã¡ããªãã¯ã®ååŸ
以äžã«èª¬æããããã¹ãã¡ããªãã¯ãæœåºããæ¹æ³ã¯ãåå¥ã®ãã©ã³ãã¡ããªãã¯ããã±ãŒãžã«çµã¿èŸŒãŸããŠããã CSS Font Loading APIã䜿çšããŠããexperimentalCanvasFeaturesïŒtrueããã©ã°ãæå¹ã«ããŠãChromeãã©ãŠã¶ãŒã§ãã£ã³ãã¹ã«ããã¹ããã¬ã³ããªã³ã°ããããšã«ãããããŒã«ã«ã«ä¿åãããã·ã¹ãã ãŸãã¯ãªã¢ãŒãã«ãããã©ã³ãããããã¹ãã¡ããªãã¯ãååŸã§ããŸããã®åŸãå€ããã¡ã€ã«ã«ä¿åããŸãã
ããã¹ãã¡ããªãã¯ãæœåºããã«ã¯ããã£ã³ãã¹ã³ã³ããã¹ãã¡ãœãã
measureTextã䜿çšããŸãã
TextMetricsã®ããã¥ã¡ã³ãã«ãããšããã©ãŠã¶ãŒã§ã¬ã³ããªã³ã°ãããšãã«
TextMetricsãªããžã§ã¯ãã§äœ¿çšã§ããå€
ã¯ãæç»ãããããã¹ãã®å¹
ã®ã¿ã§ãã
ãã®åé¡ã解決ããã«ã¯ã
fontBoundingBoxAscent ïŒããŒã¹ã©ã€ã³ãããã©ã³ãå¢çããã¯ã¹ã®äžå¢çç·ãŸã§ã®è·é¢ïŒã
fontBoundingBoxDescent ïŒããŒã¹ã©ã€ã³ãšãã©ã³ãå¢çããã¯ã¹ã®äžå¢ç
ç·ã®éã®è·é¢ïŒãããã³
alphabeticBaseline ïŒæç»ã®ããã«éžæããã
ããŒã¹ã©ã€ã³éã®è·é¢ïŒããã³ã¢ã«ãã¡ãããã®ããŒã¹ã©ã€ã³ïŒããã³
hangingBaseline ïŒã¬ã³ããªã³ã°çšã«éžæãããããŒã¹ã©ã€ã³ãšçºé³åºå¥ç¬Šå·ã®é åãèæ
®ããªãã°ãªãã¬ã³ããªã³ã°ã®äžéšå¢çç·ãšã®éã®è·é¢ïŒãã¯ãã ã§ã®ã¿äœ¿çšå¯èœ ãã©ã°ExperimentalCanvasFeaturesïŒtrueã
fontBoundingBoxAscentå€ãšfontBoundingBoxDescentå€ã®åèšã¯ããã©ã³ãå¢çããã¯ã¹ã®æç»é åã®å®éã®é«ãã瀺ããhangingBaselineå€ãšalphabeticBaselineå€ã®å·®ã¯ãçºé³åºå¥ç¬Šå·ãè©ãéé ã®é«ãã®ãªãå®éã®ãã£ããã®é«ãã«ãªããŸãã
å€ã¯CSSãã¯ã»ã«ã§è¡šç€ºãããããã¹ãã®ã¬ã³ããªã³ã°ã«äœ¿çšãããfont-sizeå€ã«é¢é£ããŠèšç®ãããããããã©ã³ãå¢çããã¯ã¹ã®é«ããšå€§æåã®é«ãã®å·®ãšå€§æåã®é«ãã®æ¯çã䜿çšã§ããŸãã ããã«ãããã¹ã¿ã€ã«ã§äœ¿çšãããã¿ãŒã²ãããã©ã³ããµã€ãºã®é€å€é åã®çžå¯Ÿçãªé«ããèšç®ã§ããŸãã
ãããããŸãæåã«ã
ExperimentalCanvasFeaturesãã©ã°ã䜿çšããŠChromeãèµ·åãã
ãã£ã³ãã¹ãäœæãããHTMLããŒãžãå¿
èŠã§ãããã¹ã¯ãªããã§äœ¿çšã§ããŸãã
ExperimentalCanvasFeaturesãã©ã°ãæå¹ã«ããŠãã©ãŠã¶ã§ãã£ã³ãã¹ãæäœããã«ã¯ã
Nightmareã©ã€ãã©ãªã䜿çšããŸãã
import Nightmare from 'nightmare'; import fse from 'fs-extra'; const browser = Nightmare({ show: false, webPreferences: { experimentalCanvasFeatures: true } }); const pageUrl = 'your/path/to/canvas/page';
ãã®çµæãå¿
èŠãªãã©ã³ãã®ããã¹ãã¡ããªãã¯ãååŸããŸãã
{ "Arial": { "actualBoundingBoxAscent": 0, "actualBoundingBoxDescent": 24, "actualBoundingBoxLeft": 0, "actualBoundingBoxRight": 93, "alphabeticBaseline": 0, "emHeightAscent": 0, "emHeightDescent": 0, "fontBoundingBoxAscent": 22, "fontBoundingBoxDescent": 5, "hangingBaseline": 17.600000381469727, "ideographicBaseline": -5, "width": 93.375 }, "Karla Bold": { "actualBoundingBoxAscent": 0, "actualBoundingBoxDescent": 24, "actualBoundingBoxLeft": 0, "actualBoundingBoxRight": 85, "alphabeticBaseline": 0, "emHeightAscent": 0, "emHeightDescent": 0, "fontBoundingBoxAscent": 22, "fontBoundingBoxDescent": 6, "hangingBaseline": 17.600000381469727, "ideographicBaseline": -6, "width": 85.30078125 }, "Karla Regular": { "actualBoundingBoxAscent": 0, "actualBoundingBoxDescent": 24, "actualBoundingBoxLeft": 0, "actualBoundingBoxRight": 85, "alphabeticBaseline": 0, "emHeightAscent": 0, "emHeightDescent": 0, "fontBoundingBoxAscent": 22, "fontBoundingBoxDescent": 6, "hangingBaseline": 17.600000381469727, "ideographicBaseline": -6, "width": 85.30078125 } }
ãã®äŸã§ã¯ãArialãKarla Boldãããã³Karla Regularãã©ã³ãã«ã®ã¿ããã¹ãã¡ããªãã¯ãå¿
èŠã«ãªããŸãããå®éã«ã¯ã䜿çšå¯èœãªã·ã¹ãã ãã©ã³ããã«ã¹ã¿ã ãã©ã³ãããŸãã¯ãããžã§ã¯ãã®ãã¹ãŠã®ããŒã«ã©ã€ãºããµããŒãããããã«å¿
èŠãªéã®cdnãä»ããŠæäŸãããä»»æã®ãã©ã³ãã䜿çšã§ããŸãã
ååãšããŠãããã¹ãã¡ããªãã¯ãååŸããæäœã¯1åéãã®æäœã§ããããããžã§ã¯ãã§äœ¿çšããããã©ã³ãã倿Žãããå Žåã«ã®ã¿åèµ·åããå¿
èŠããããŸãã ã»ãšãã©ã®å Žåãå€ãäžåºŠçæãããã¡ã€ã«ã«ä¿åããŠãã¢ã»ã³ããªäžã«äœ¿çšããã ãã§ååã§ãã
font-metricsããã±ãŒãžã䜿çšãããšãããã¹ãã¡ããªãã¯ã®çæããã»ã¹ã倧å¹
ã«ç°¡çŽ åãããŸãã
import fontMetrics from 'font-metrics'; const fontParser = fontMetrics({ fonts: [{ fontFamily: 'Arial' }, { fontFamily: 'Karla Regular', src: '//fonts.gstatic.com/s/karla/v6/S1bXQ0LrY7AzefpgNae9sYDGDUGfDkXyfkzVDelzfFk.woff2' }, { fontFamily: 'Karla Bold', src: '//fonts.gstatic.com/s/karla/v6/r3NqIkFHFaF3esZDc3WT5BkAz4rYn47Zy2rvigWQf6w.woff2' }], output: './font-metrics', filename: 'font-metrics.json' }); fontParser.parse();
çµæïŒ
{ "metrics": { "Arial": { "_fontSize": 24, "_textBaseline": "alphabetic", "actualBoundingBoxAscent": 0, "actualBoundingBoxDescent": 24, "actualBoundingBoxLeft": 0, "actualBoundingBoxRight": 93, "alphabeticBaseline": 0, "emHeightAscent": 0, "emHeightDescent": 0, "fontBoundingBoxAscent": 22, "fontBoundingBoxDescent": 5, "hangingBaseline": 17.600000381469727, "ideographicBaseline": -5, "width": 93.375 }, "Karla Bold": { "_fontSize": 24, "_textBaseline": "alphabetic", "actualBoundingBoxAscent": 0, "actualBoundingBoxDescent": 24, "actualBoundingBoxLeft": 0, "actualBoundingBoxRight": 85, "alphabeticBaseline": 0, "emHeightAscent": 0, "emHeightDescent": 0, "fontBoundingBoxAscent": 22, "fontBoundingBoxDescent": 6, "hangingBaseline": 17.600000381469727, "ideographicBaseline": -6, "width": 85.30078125 }, "Karla Regular": { "_fontSize": 24, "_textBaseline": "alphabetic", "actualBoundingBoxAscent": 0, "actualBoundingBoxDescent": 24, "actualBoundingBoxLeft": 0, "actualBoundingBoxRight": 85, "alphabeticBaseline": 0, "emHeightAscent": 0, "emHeightDescent": 0, "fontBoundingBoxAscent": 22, "fontBoundingBoxDescent": 6, "hangingBaseline": 17.600000381469727, "ideographicBaseline": -6, "width": 85.30078125 } }, "src": [ { "fontFamily": "Arial" }, { "fontFamily": "Karla Regular", "src": "//fonts.gstatic.com/s/karla/v6/S1bXQ0LrY7AzefpgNae9sYDGDUGfDkXyfkzVDelzfFk.woff2" }, { "fontFamily": "Karla Bold", "src": "//fonts.gstatic.com/s/karla/v6/r3NqIkFHFaF3esZDc3WT5BkAz4rYn47Zy2rvigWQf6w.woff2" } ] }
Postcss-text-indentation-adjustmentãã©ã°ã€ã³ã®çµ±å
postcss-text-indentation-adjustmentãã©ã°ã€ã³ã®åäœåçã¯ã宣èšã«é©çšãããåæå€ïŒãã®äŸã§ã¯24pxïŒã®èª¿æŽã®èª¬æã«åºã¥ããŠããŸãã 調æŽã®èª¬æã¯ã
宣èšã®å€å
ã®ã³ã¡ã³ãã®åœ¢åŒã§å®è¡ããããããžã§ã¯ãã¢ã»ã³ããªã«ãã©ã°ã€ã³ãå®å
šã«å®è£
ã§ããŸãã
ãã®äŸã§èª¿æŽãã©ã®ããã«èª¬æã§ããããæ€èšããŠãã ããã
@import 'path/to/typography.scss'; .banner { display: flex; flex-direction: column; justify-content: flex-end; background: url('path/to/banner-image.png') no-repeat center bottom; background-size: cover; &__content { color: #fff; padding: 48px 0 48px 48px ; &-title { @extend .type-h2; } &-description { @extend .type-p1; max-width: 80%; margin-top: 24px ; } &-links { @extend .type-p1; display: flex; flex-direction: row; margin-top: 24px ; li { margin-left: 18px; &:first-child { margin-left: 0; } a { color: inherit; } } } } }
調æŽåŠç
å¿
èŠãªã©ã€ãã©ãªãã€ã³ããŒãããŸãã
ãã®çµæã次ã®ã«ãŒã«ãå«ããã¡ã€ã«ãã³ã³ãã€ã«ãããŸã
ïŒçæãããä¿®æ£ã匷調ããããã«ã掻çå°å·ã¹ã¿ã€ã«ãš@extendã®çµæã¯é€å€ãããŸãïŒ ã
.banner { display: flex; flex-direction: column; justify-content: flex-end; background: url("path/to/banner-image.png") no-repeat center bottom; background-size: cover; } .banner__content { color: #fff; padding: 39.5px 0 43px 48px; } .banner__content-description { max-width: 80%; margin-top: 10.5px; } html[lang^="de"] .banner__content-description { margin-top: 10.5px; } .banner__content-links { display: flex; flex-direction: row; margin-top: 14px; } .banner__content-links li { margin-left: 18px; } .banner__content-links li:first-child { margin-left: 0; } .banner__content-links li a { color: inherit; } html[lang^="de"] .banner__content-links { margin-top: 14px; } html[lang^="de"] .banner__content { padding: 39.5px 0 43px 48px; } @media only screen and (min-width: 480px) and (max-width: 767px) { .banner__content-description { margin-top: 8.5px; } html[lang^="de"] .banner__content-description { margin-top: 7.5px; } .banner__content-links { margin-top: 14px; } html[lang^="de"] .banner__content-links { margin-top: 14px; } .banner__content { padding: 37.5px 0 43px 48px; } html[lang^="de"] .banner__content { padding: 36.5px 0 43px 48px; } } @media only screen and (min-width: 768px) { .banner__content-description { margin-top: -0.5px; } html[lang^="de"] .banner__content-description { margin-top: -1.5px; } .banner__content-links { margin-top: 11px; } html[lang^="de"] .banner__content-links { margin-top: 11px; } .banner__content { padding: 30px 0 41.5px 48px; } html[lang^="de"] .banner__content { padding: 29px 0 41.5px 48px; } }
è±èªãã±ãŒã«ã®

çµæïŒãã€ãèªãã±ãŒã«ã®çµæïŒ

ã芧ã®ãšãããã€ã³ãã³ãã®ã¬ã³ããªã³ã°çµæã¯å€§å¹
ã«èª¿æŽãããŠããŸããèª¿æŽæ§æ
ïŒã³ã³ãã€ã«ãããå€ã¯ãã»ã¬ã¯ã¿ãŒãšã¡ãã£ã¢ã¯ãšãªãçµåããããã®ãã©ã°ã€ã³ã«è¿œå ã§æž¡ãããŸã-css-mqpackerãpostcss-merge-rulesïŒ1.ä¿®æ£ã¯ã³ã¡ã³ãã®åœ¢åŒã§è¡ããã宣èšã®å€å
ã«ãããŸãã .rule-selector { padding-top: 24px ; }
2.調æŽããå¿
èŠãããåå€ã¯ãäžæ¬åŒ§ã§å²ãŸããŠããŸãïŒä¿®æ£ã°ã«ãŒãïŒã .rule-selector { padding-top: 24px ; }
3.ä¿®æ£ãé©çšããå¿
èŠã®ããæŽ»çå°å·ã®ã¯ã©ã¹ãŸãã¯ã¿ã°ã¯ãããŒã¹å€ã®åŸã«ã«ã³ãã§ç€ºãããŸãã .rule-selector { padding-top: 24px ; }
4.è€æ°ã®å€ãæå®ããå¿
èŠãããå Žåããããããç¬èªã®ä¿®æ£ã°ã«ãŒãã«é
眮ãããèšç®ãããå€ã«çœ®ãæããããŸãã .rule-selector { padding-top: 24px 0 24px ; }
5.ãã¹ãŠã®ä¿®æ£ã°ã«ãŒããèšç®ããçµæãå«ãã³ã¡ã³ãã®å
容ã¯ã宣èšã®æçµå€ã§ãã©ã°ã€ã³ã«ãã£ãŠèšå®ãããŸãã .rule-selector { padding-top: 17px 0 19px; }
6.掻çå°å·ã¯ã©ã¹ã®ãœãŒã¹ãã¡ã€ã«ã«èŠªã»ã¬ã¯ã¿ãŒãããå Žåã芪ã»ã¬ã¯ã¿ãŒãšã¿ãŒã²ããã»ã¬ã¯ã¿ãŒã®çµã¿åãããããã³æŽ»çå°å·ã»ã¬ã¯ã¿ãŒã®ãã¹ãŠã®çµã¿åããã®èšç®å€ãå«ã宣èšãå«ã远å ã®ã«ãŒã«ãäœæãããŸãã .p1 { font-size: 16px; line-height: 24px; font-family: Arial; .parent-selector-1 & { font-size: 18px; line-height: 26px; font-family: Arial; } } .p2 { font-size: 18px; line-height: 22px; font-family: Arial; .parent-selector-2 & { font-size: 14px; line-height: 20px; font-family: Arial; } }
.rule-selector { padding-top: 24px ; }
.rule-selector { padding-top: 13px; } .parent-selector-1 .rule-selector { padding-top: 12px; } .parent-selector-2 .rule-selector { padding-top: 13px; }
7.ã¡ãã£ã¢ã¯ãšãªãŸãã¯èŠªã»ã¬ââã¯ã¿ãšçµã¿åãããã¡ãã£ã¢ã¯ãšãªãããå Žåãä¿®æ£ã«å«ãŸããæŽ»çå°å·ã»ã¬ã¯ã¿ã®ãã¹ãŠã®å¯èœãªçµã¿åãããäœæãããŸãã .p1 { font-size: 16px; line-height: 24px; font-family: Arial; .parent-selector-1 & { font-size: 18px; line-height: 26px; font-family: Arial; } @media (min-width: 768px) { font-size: 22px; line-height: 28px; font-family: Arial; html[lang^="de"] .parent-selector-3 & { font-size: 28px; line-height: 40px; font-family: Arial; } } } .p2 { font-size: 18px; line-height: 22px; font-family: Arial; .parent-selector-2 & { font-size: 14px; line-height: 20px; font-family: Arial; } @media (min-width: 321px) { font-size: 22px; line-height: 28px; font-family: Arial; html[lang^="de"] .parent-selector-4 & { font-size: 28px; line-height: 40px; font-family: Arial; } } }
.rule-selector { padding-top: 24px ; }
.rule-selector { padding-top: 13px; } .parent-selector-1 .rule-selector { padding-top: 12px; } .parent-selector-2 .rule-selector { padding-top: 13px; } @media (min-width: 768px) { .rule-selector { padding-top: 13px; } html[lang^="de"] .parent-selector-3 .rule-selector { padding-top: 14px; } } @media (min-width: 321px) { .rule-selector { padding-top: 12px; } html[lang^="de"] .parent-selector-4 .rule-selector { padding-top: 14px; } }
8. --debugãã©ã°ã䜿çšããŠãæçµå€ã®èšç®ã«äœ¿çšããããã©ã¡ãŒã¿ãŒã確èªã§ããŸã .rule-selector { padding-top: 24px ; }
ãã®çµæã調æŽã®äœæã«äœ¿çšãããããŒã¿ã®äžéšãã³ã³ãœãŒã«ã«è¡šç€ºãããŸããèšäºããŒãžã§ã³ïŒ1.0.9ïŒã®å·çæç¹ã§é¢é£ããäœ¿çšæ©èœ
- èšç®ã«äœ¿çšããããã¹ãŠã®å€ã¯ãã¯ã»ã«åäœã§æå®ããå¿
èŠããããŸãã
- 掻çå°å·ã¹ã¿ã€ã«ã®åã«ãŒã«ã«ã¯ãfont-familyãfont-sizeãline-heightãªã©ã®ãã©ã³ããã©ã¡ãŒã¿ãŒãåå¥ã«æå®ããããåäžã®ãã©ã³ã宣èšã«çµåããå¿
èŠããããŸãã
- ã¹ã¿ã€ã«ã®ããªã³ã³ãã€ã«ã®æ®µéã§ããªããã»ããµãšå
±ã«äœ¿çšããå ŽåãplainCSSãªãã·ã§ã³ãfalseã«èšå®ããå¿
èŠããããŸãã
const typographyAdjustmentPlugin = textIndentationAdjustment({ corrections: parsedTypography, plainCSS: false });
çµè«ãšããŠ
- 粟床ãšã¬ã€ã¢ãŠããšèšèšãéåžžã«éèŠã§ããããŸããŸãªãã¬ãŒã¯ãã€ã³ããšããã€ãã®ããŒã«ãªãŒãŒã·ã§ã³ããµããŒãããã¢ããªã±ãŒã·ã§ã³ãçµ¶ããéçºããæéãççž®ããŸãã
- ã©ã®ãã©ã³ãã§ãç°¡åã«ã«ã¹ã¿ãã€ãºã§ããããã¹ãã¡ããªãã¯ãäžåºŠã ãæœåºããŠãã¹ã¿ã€ã«ã®ã³ã³ãã€ã«ããã»ã¹ã§äœ¿çšããã ãã§ååã§ãã
- postcssã§ãµããŒããããããããã¿ã€ãã®ã¢ã»ã³ããªã«çµ±åããŸãã
- ä¿®æ£ã®åè³ªãæ¹åããããã«åžžã«æ¹è¯ãããŠããŸãã
ãæž
èŽããããšãããããŸããã
åççãªæ¹å€ãšãæ¹åãšæé©åã®ææ¡ãèããŠããããã§ãã