0%

Typora样式研究

Typora样式研究

Typora编辑器做了件重要的事就是:把Markdown源文件自动生成HTML文件,同时用CSS样式对转换后的HTML进行渲染。这样的好处有两点:

  • 简化语法: Markdown的语法比HTML语法简单极多,但同时我们写作中常用的编辑工具都涵盖了。比如标题、正文、强调、表格、图片、超链等。
  • 分离样式:利用HTML+CSS本有的内容与形式的分离机制,让写作人员只需沉下心关注内容创作本身,而把排版和样式交给Typora工具。内容写完后,样式可以随便换。

本文主要讲解的内容是:

  1. Markdown源文件:用一个DEMO源文件,里面涵盖了我们日常写作中常用的语法。
  2. 转换的HTML文件: 查看Typora把这个DEMO源文件,转换成了什么样的HTML文件。重点关注Markdown的标签怎么映射到HTML的标签上的。比如加粗,在MD里面是**加粗**,相应的在HTML里是<strong>加粗</strong>。我们会用一张图来完整呈现标签映射关系
  3. 默认样式: 默认样式就是CSS样式为空。样式的适用通常都是在HTML里面有idclass的埋点,然后用CSS样式作用于这些埋点。当然也可以纯用HTML标签来指定样式,例如h3 {color: red; font-size: 25px},就不需要任何埋点。但通常埋点更方便控制。
  4. 自定义样式: 看看社区里面提供的VUE样式具体内容。

Markdown源文件

一个Markdown样例源文件,里面涵盖常用的标签:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# HelloWorld

## 这是二级标题

### 这是三级标题

这是正文部分

---

上面分割线后,接着是无须列表:

- **加粗**
- _倾斜_
- ``术语``

> 这里是原文引用。

----

接着多媒体:

1. 图片
2. 超链
3. 表格

| 表头C1 | 表头C2 |
| ------ | ------ |
| 行1列1 | 行1列2 |
| 行2列1 | 行2列2 |

[作业部落是个很好的在线编辑器](https://www.zybuluo.com/mdeditor)

![img](Typora样式研究/image.png)

转换后HTML文件

查看转化后的HTML文件(在Typora中导出HTML,并用浏览器查看源文件):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width initial-scale=1" />
<title>HelloWord</title>
<style type="text/css">
/* 此处省去了 Typora 生成的默认内联样式 */
</style>
</head>
<body class="typora-export">
<div id="write" class="is-mac">
<h1><a name="header-n205" class="md-header-anchor "></a>HelloWorld</h1>
<h2><a name="header-n207" class="md-header-anchor "></a>这是二级标题</h2>
<h3><a name="header-n208" class="md-header-anchor "></a>这是三级标题</h3>
<p>这是正文部分</p>
<hr />
<p>上面分割线后,接着是无须列表:</p>
<ul>
<li><strong>加粗</strong></li>
<li><em>倾斜</em></li>
<li><code>术语</code></li>
</ul>
<blockquote>
<p>这里是原文引用。</p>
</blockquote>
<hr />
<p>接着多媒体:</p>
<ol start="">
<li>图片</li>
<li>超链</li>
<li>表格</li>
</ol>
<figure>
<table>
<thead>
<tr>
<th>表头C1</th>
<th>表头C2</th>
</tr>
</thead>
<tbody>
<tr>
<td>行1列1</td>
<td>行1列2</td>
</tr>
<tr>
<td>行2列1</td>
<td>行2列2</td>
</tr>
</tbody>
</table>
</figure>
<p><a href="https://www.zybuluo.com/mdeditor">作业部落是个很好的在线编辑器</a></p>
<p><img src="assets/image.png" alt="img" referrerpolicy="no-referrer" /></p>
</div>
</body>
</html>

MD->HTML标签映射关系

依据Markdown源文件和HTML的源代码,观察并总结它们的标签映射关系:

Typora-Mapping

生成的默认样式

默认样式就是在Typora自带的Github样式中,把GitHub.css文件内容全部清空,再对MD文件导出HTML,并查看HTML文件中的内敛样式。这样做的目的就是看下样式骨架。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
html {   /* 批注: 元素(标签)选择器,它是一种基础选择器。 */
overflow-x: initial !important;
}

:root { /* 批注: CSS的特效选择器(伪类选择器)。:root表示根元素。 */
--bg-color: #ffffff;
--text-color: #333333;
--select-text-bg-color: #B5D6FC;
--select-text-font-color: auto;
--monospace: "Lucida Console",Consolas,"Courier",monospace;
}

html {
font-size: 14px;
background-color: var(--bg-color);
color: var(--text-color);
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
}

body {
margin: 0px;
padding: 0px;
height: auto;
bottom: 0px;
top: 0px;
left: 0px;
right: 0px;
font-size: 1rem;
line-height: 1.42857143;
overflow-x: hidden;
background-image: inherit;
background-size: inherit;
background-attachment: inherit;
background-origin: inherit;
background-clip: inherit;
background-color: inherit;
background-position: inherit inherit;
background-repeat: inherit inherit;
}

iframe {
margin: auto;
}

a.url { /* 交集选择器,复合选择器的一种形式。两个选择器之间没有空格连接。 */
word-break: break-all;
}

a:active, a:hover { /* 批注: 并集选择器,用逗号链接,复合需选择器的一种。a:hover又是特效选择器*/
outline: 0px;
}

.in-text-selection, ::selection {
text-shadow: none;
background: var(--select-text-bg-color);
color: var(--select-text-font-color);
}

#write { /* 批注: ID选择器。整个HTML文章都在一个叫write的div里面。 */
margin: 0px auto;
height: auto;
width: inherit;
word-break: normal;
word-wrap: break-word;
position: relative;
white-space: normal;
overflow-x: visible;
}

#write.first-line-indent p {
text-indent: 2em;
}

#write.first-line-indent li p, #write.first-line-indent p * {
text-indent: 0px;
}

#write.first-line-indent li {
margin-left: 2em;
}

.for-image #write {
padding-left: 8px;
padding-right: 8px;
}

body.typora-export {
padding-left: 30px;
padding-right: 30px;
}

.typora-export .footnote-line, .typora-export p {
white-space: pre-wrap;
}

@media screen and (max-width: 500px) {

body.typora-export {
padding-left: 0px;
padding-right: 0px;
}

.CodeMirror-sizer {
margin-left: 0px !important;
}

.CodeMirror-gutters {
display: none !important;
}
}

#write li > figure:first-child {
margin-top: -20px;
}

#write ol, #write ul {
position: relative;
}

img {
max-width: 100%;
vertical-align: middle;
}

button, input, select, textarea {
color: inherit;
font-family: inherit;
font-size: inherit;
font-style: inherit;
font-variant-caps: inherit;
font-weight: inherit;
font-stretch: inherit;
line-height: inherit;
}

input[type="checkbox"], input[type="radio"] {
line-height: normal;
padding: 0px;
}

*, ::after, ::before {
box-sizing: border-box;
}

#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre {
width: inherit;
}

#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p {
position: relative;
}

h1, h2, h3, h4, h5, h6 {
break-after: avoid-page;
break-inside: avoid;
orphans: 2;
}

p {
orphans: 4;
}

h1 {
font-size: 2rem;
}

h2 {
font-size: 1.8rem;
}

h3 {
font-size: 1.6rem;
}

h4 {
font-size: 1.4rem;
}

h5 {
font-size: 1.2rem;
}

h6 {
font-size: 1rem;
}

.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p {
margin-top: 1rem;
margin-bottom: 1rem;
}

.hidden {
display: none;
}

.md-blockmeta {
color: rgb(204, 204, 204);
font-weight: 700;
font-style: italic;
}

a {
cursor: pointer;
}

sup.md-footnote {
padding: 2px 4px;
background-color: rgba(238, 238, 238, 0.701961);
color: rgb(85, 85, 85);
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
cursor: pointer;
}

sup.md-footnote a, sup.md-footnote a:hover {
color: inherit;
text-transform: inherit;
text-decoration: inherit;
}

#write input[type="checkbox"] {
cursor: pointer;
width: inherit;
height: inherit;
}

figure {
overflow-x: auto;
margin: 1.2em 0px;
max-width: calc(100% + 16px);
padding: 0px;
}

figure > table {
margin: 0px !important;
}

tr {
break-inside: avoid;
break-after: auto;
}

thead {
display: table-header-group;
}

table {
border-collapse: collapse;
border-spacing: 0px;
width: 100%;
overflow: auto;
break-inside: auto;
text-align: left;
}

table.md-table td {
min-width: 80px;
}

.CodeMirror-gutters {
border-right-width: 0px;
background-color: inherit;
}

.CodeMirror {
text-align: left;
}

.CodeMirror-placeholder {
opacity: 0.3;
}

.CodeMirror pre {
padding: 0px 4px;
}

.CodeMirror-lines {
padding: 0px;
}

div.hr:focus {
cursor: none;
}

#write pre {
white-space: pre-wrap;
}

#write.fences-no-line-wrapping pre {
white-space: pre;
}

#write pre.ty-contain-cm {
white-space: normal;
}

.CodeMirror-gutters {
margin-right: 4px;
}

.md-fences {
font-size: 0.9rem;
display: block;
break-inside: avoid;
text-align: left;
overflow: visible;
white-space: pre;
background-image: inherit;
background-size: inherit;
background-attachment: inherit;
background-origin: inherit;
background-clip: inherit;
background-color: inherit;
position: relative !important;
background-position: inherit inherit;
background-repeat: inherit inherit;
}

.md-diagram-panel {
width: 100%;
margin-top: 10px;
text-align: center;
padding-top: 0px;
padding-bottom: 8px;
overflow-x: auto;
}

#write .md-fences.mock-cm {
white-space: pre-wrap;
}

.md-fences.md-fences-with-lineno {
padding-left: 0px;
}

#write.fences-no-line-wrapping .md-fences.mock-cm {
white-space: pre;
overflow-x: auto;
}

.md-fences.mock-cm.md-fences-with-lineno {
padding-left: 8px;
}

.CodeMirror-line, twitterwidget {
break-inside: avoid;
}

.footnotes {
opacity: 0.8;
font-size: 0.9rem;
margin-top: 1em;
margin-bottom: 1em;
}

.footnotes + .footnotes {
margin-top: 0px;
}

.md-reset {
margin: 0px;
padding: 0px;
border: 0px;
outline: 0px;
vertical-align: top;
text-decoration: none;
text-shadow: none;
float: none;
position: static;
width: auto;
height: auto;
white-space: nowrap;
cursor: inherit;
line-height: normal;
font-weight: 400;
text-align: left;
box-sizing: content-box;
direction: ltr;
background-position: 0px 0px;
background-repeat: initial initial;
}

li div {
padding-top: 0px;
}

blockquote {
margin: 1rem 0px;
}

li .mathjax-block, li p {
margin: 0.5rem 0px;
}

li {
margin: 0px;
position: relative;
}

blockquote > :last-child {
margin-bottom: 0px;
}

blockquote > :first-child, li > :first-child {
margin-top: 0px;
}

.footnotes-area {
color: rgb(136, 136, 136);
margin-top: 0.714rem;
padding-bottom: 0.143rem;
white-space: normal;
}

#write .footnote-line {
white-space: pre-wrap;
}

@media print {

body, html {
border: 1px solid transparent;
height: 99%;
break-after: avoid-page;
break-before: avoid-page;
}

#write {
margin-top: 0px;
border-color: transparent !important;
}

.typora-export * {
-webkit-print-color-adjust: exact;
}

html.blink-to-pdf {
font-size: 13px;
}

.typora-export #write {
padding-left: 1cm;
padding-right: 1cm;
padding-bottom: 0px;
break-after: avoid-page;
}

.typora-export #write::after {
height: 0px;
}
@ page {
margin: 20mm 0px;
}
}

.footnote-line {
margin-top: 0.714em;
font-size: 0.7em;
}

a img, img a {
cursor: pointer;
}

pre.md-meta-block {
font-size: 0.8rem;
min-height: 0.8rem;
white-space: pre-wrap;
background-color: rgb(204, 204, 204);
display: block;
overflow-x: hidden;
background-position: initial initial;
background-repeat: initial initial;
}

p > .md-image:only-child:not(.md-img-error) img, p > img:only-child {
display: block;
margin: auto;
}

p > .md-image:only-child {
display: inline-block;
width: 100%;
}

#write .MathJax_Display {
margin: 0.8em 0px 0px;
}

.md-math-block {
width: 100%;
}

.md-math-block:not(:empty)::after {
display: none;
}

[contenteditable="true"]:active, [contenteditable="true"]:focus {
outline: 0px;
box-shadow: none;
}

.md-task-list-item {
position: relative;
list-style-type: none;
}

.task-list-item.md-task-list-item {
padding-left: 0px;
}

.md-task-list-item > input {
position: absolute;
top: 0px;
left: 0px;
margin-left: -1.2em;
margin-top: calc(1em - 10px);
}

.math {
font-size: 1rem;
}

.md-toc {
min-height: 3.58rem;
position: relative;
font-size: 0.9rem;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
border-bottom-left-radius: 10px;
}

.md-toc-content {
position: relative;
margin-left: 0px;
}

.md-toc-content::after, .md-toc::after {
display: none;
}

.md-toc-item {
display: block;
color: rgb(65, 131, 196);
}

.md-toc-item a {
text-decoration: none;
}

.md-toc-inner:hover {
text-decoration: underline;
}

.md-toc-inner {
display: inline-block;
cursor: pointer;
}

.md-toc-h1 .md-toc-inner {
margin-left: 0px;
font-weight: 700;
}

.md-toc-h2 .md-toc-inner {
margin-left: 2em;
}

.md-toc-h3 .md-toc-inner {
margin-left: 4em;
}

.md-toc-h4 .md-toc-inner {
margin-left: 6em;
}

.md-toc-h5 .md-toc-inner {
margin-left: 8em;
}

.md-toc-h6 .md-toc-inner {
margin-left: 10em;
}

@media screen and (max-width: 48em) {

.md-toc-h3 .md-toc-inner {
margin-left: 3.5em;
}

.md-toc-h4 .md-toc-inner {
margin-left: 5em;
}

.md-toc-h5 .md-toc-inner {
margin-left: 6.5em;
}

.md-toc-h6 .md-toc-inner {
margin-left: 8em;
}
}

a.md-toc-inner {
font-size: inherit;
font-style: inherit;
font-weight: inherit;
line-height: inherit;
}

.footnote-line a:not(.reversefootnote) {
color: inherit;
}

.md-attr {
display: none;
}

.md-fn-count::after {
content: ".";
}

code, pre, samp, tt {
font-family: var(--monospace);
}

kbd {
margin: 0px 0.1em;
padding: 0.1em 0.6em;
font-size: 0.8em;
color: rgb(36, 39, 41);
background-color: rgb(255, 255, 255);
border: 1px solid rgb(173, 179, 185);
border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset;
white-space: nowrap;
vertical-align: middle;
background-position: initial initial;
background-repeat: initial initial;
}

.md-comment {
color: rgb(162, 127, 3);
opacity: 0.8;
font-family: var(--monospace);
}

code {
text-align: left;
}

a.md-print-anchor {
white-space: pre !important;
border: none !important;
display: inline-block !important;
position: absolute !important;
width: 1px !important;
right: 0px !important;
outline: 0px !important;
text-shadow: initial !important;
background-position: 0px 0px !important;
background-repeat: initial initial !important;
}

.md-inline-math .MathJax_SVG .noError {
display: none !important;
}

.md-math-block .MathJax_SVG_Display {
text-align: center;
margin: 0px;
position: relative;
text-indent: 0px;
max-width: none;
max-height: none;
min-height: 0px;
min-width: 100%;
width: auto;
overflow-y: hidden;
display: block !important;
}

.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display {
width: auto;
margin: inherit;
display: inline-block !important;
}

.MathJax_SVG .MJX-monospace {
font-family: var(--monospace);
}

.MathJax_SVG .MJX-sans-serif {
font-family: sans-serif;
}

.MathJax_SVG {
display: inline;
font-style: normal;
font-weight: 400;
line-height: normal;
zoom: 90%;
text-indent: 0px;
text-align: left;
text-transform: none;
letter-spacing: normal;
word-spacing: normal;
word-wrap: normal;
white-space: nowrap;
float: none;
direction: ltr;
max-width: none;
max-height: none;
min-width: 0px;
min-height: 0px;
border: 0px;
padding: 0px;
margin: 0px;
}

.MathJax_SVG * {
transition: none;
}

.MathJax_SVG_Display svg {
vertical-align: middle !important;
margin-bottom: 0px !important;
}

.os-windows.monocolor-emoji .md-emoji {
font-family: "Segoe UI Symbol", sans-serif;
}

.md-diagram-panel > svg {
max-width: 100%;
}

[lang="mermaid"] svg, [lang="flow"] svg {
max-width: 100%;
}

[lang="mermaid"] .node text {
font-size: 1rem;
}

table tr th {
border-bottom-width: 0px;
}

video {
max-width: 100%;
display: block;
margin: 0px auto;
}

iframe {
max-width: 100%;
width: 100%;
border: none;
}

.highlight td, .highlight tr {
border: 0px;
}

.typora-export p, .typora-export .footnote-line {
white-space: normal;
}

自定义VUE样式

在官方网站 https://theme.typora.io/ 下载VUE样式,并简单分析。

打开Typora样式文件

Typora -> Preference... -> General -> Open Theme Folder找到vue.css文件(可能默认样式里面没有,需要手动下载)。

image-20181223101026098

VUE引用时样式

1
2
3
4
5
6
blockquote {
border-left: 4px solid #42b983;
padding: 10px 0px 10px 15px;
color: #777;
background-color: rgba(66, 185, 131, .1);
}

VUE表格时样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
table tr {
border-top: 1px solid #dfe2e5;
margin: 0;
padding: 0;
}

table tr:nth-child(2n),
thead {
background-color: #fafafa;
}

table tr th {
font-weight: bold;
border: 1px solid #dfe2e5;
border-bottom: 0;
text-align: left;
margin: 0;
padding: 6px 13px;
}

table tr td {
border: 1px solid #dfe2e5;
text-align: left;
margin: 0;
padding: 6px 13px;
}

table tr th:first-child,
table tr td:first-child {
margin-top: 0;
}

table tr th:last-child,
table tr td:last-child {
margin-bottom: 0;
}

#write table thead th {
background-color: #f2f2f2;
}

VUE排列时样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
li p.first {
display: inline-block;
}

ul,
ol {
padding-left: 30px;
}

ul:first-child,
ol:first-child {
margin-top: 0;
}

ul:last-child,
ol:last-child {
margin-bottom: 0;
}

VUE强调时样式

1
2
3
4
5
6
7
#write strong {
padding: 0px 1px 0 1px;
}

#write em {
padding: 0px 5px 0 2px;
}

VUE代码时样式

1
2
3
4
5
6
7
8
9
#write code, tt {
margin: 0 2px;
padding: 2px 4px;
border-radius: 2px;
font-family: 'Microsoft YaHei', Source Sans Pro, Roboto Mono, Monaco, courier, monospace !important;
font-size: 0.92rem;
color: #e96900;
background-color: #f8f8f8;
}

附录-1:CSS样式基础

CSS样式

附录-2:中英文不同的字体

如何通过CSS,给中文设置为“微软雅黑”,但给英文设置“Impact”字体呢?

参考Airbnb的国际化字体设置:

1
2
3
4
5
6
7
8
9
10
11
[lang="zh"] body {
font-family: 'Microsoft YaHei'; /* 中文字体用“微软雅黑” */
line-height: 1.6rem; /* 行间距 */
letter-spacing: 1px; /* 字间距 */
}

[lang="en"] body {
font-family: 'Calibri', 'Impact'; /* 英文字体优先用 "Calibri"*/
line-height: 1.6rem;
letter-spacing: 1px;
}

根据font-family的原则,假如客户终端不认识前面的字体,就自动切换到第二种字体,第二种不认识就切换到第三种,以此类推。

注意:CSS的字体名字不能是中文。比如宋体对应的英文是SimSun

宋体 SimSun
黑体 SimHei
微软雅黑 Microsoft YaHei
微软正黑体 Microsoft JhengHei
新宋体 NSimSun
新细明体 PMingLiU
细明体 MingLiU
标楷体 DFKai-SB
仿宋 FangSong
楷体 KaiTi
仿宋_GB2312 FangSong_GB2312
楷体_GB2312 KaiTi_GB2312

附录-3:公众号文章排版

image-20181225121723521

  • 文字
    • 字体:font-family
    • 字号:font-size
    • 字颜色
  • 间距
    • 行间距:line-height
    • 字间距:letter-spacing
    • 段间距:padding,包含padding-leftpadding-rightpadding-toppadding-bottom
    • 页边距:margin

div css padding

比如,我会把段落标记

批量替换成字号为 15px、字距为 1px、行距为 28px 的文字。

我不会在这篇文章,也不会在以后的文章里告诉你,排版时字号应该取多少、应该用什么颜色、行距应该多高。

实际上,你能很容易在网上找到各种(微信)排版教程,告诉你应该用 16px 的字体大小、应该用 #888 的字体颜色、行距应该用 1.2 rem 等。

别把这些教程当铁规,如果一个人告诉你,微信排版,16px 的字体大小是最好的,千万别信。所有模板式教程,都是在传授范例,你跟着这些范例走一遍是好事,会获得不少灵感,但千万不要照搬,因为不同的公众号、不同的内容类型,对排版的要求是不一样的。

参考资料

  1. CSS基础:选择器和样式规则适用
  2. @font-face与Web安全字体
  3. W3School讲解自定义字体