使用Md可以提升写作效率,同时增强文章排版的工整规范性,因此越来越多人尝试使用Md取代传统富文本编辑器作为写作工具。
如果将Md看作是一门语言,那么与其最恰似的应当就是我们经常接触到的HTML——它们都是面向结构的语言。
因此,使用Md最大的问题是,本身的样式并不丰富。虽然有诸如Mou这种定制功能的Md工具可以很方便地控制基本样式,也有Typora这种支持Md × HTML的Md拓展,但是本身也有无法忽视的缺点:
- Mou:语法经过拓展,不通用于其他Md工具。
- Typora:肉搏HTML很麻烦,尽管需要用到的时刻不多。而且诸如remarkable这种Parser也在开启Typora支持后难以避免地会出现XSS。
因此我们要朝着以下方向去发展:
- 尽可能少修改Parser,达到通用目的;
- 尽量避免使用HTML支持,维护好安全性。当然,我们也可以支持HTML,只是需要对特定标签,例如script这种进行一个关键词过滤。
举一个最近发现的小例子:我想对特定的某几张图片进行居中。
一般来说,像简书这种,图片是通过默认样式 img进行居中的,而在sf.gg中,这个img默认是没有对齐的样式的,也就是直接向左对齐。
那如果我需要对图片A居中,而图片B左对齐,在这两个网站中,仅仅通过Md几乎无法实现。
首先复习一下img的Md语法:
内联写法:
![](url "title")
外联写法:
![alt][id]
[id]: url "title"
在绝大多数情况下,这个alt是不会出现在页面中的——除非你的图片加载不出来。
因此,我们换种说法就是,这个alt是作为一种“退化”属性存在的,为的是让你在加载不出图片的情况下也能给用户一些图片的描述信息。
而title属性是当你将鼠标移动到图片上时会有一个跟随鼠标的小型提示器,用到的机会比alt频繁。
那么看回img的Md语法,总共有三个可以给我们使用的参数:
- alt
- title
- url
其中,title太常用,因此放到最后,alt在需要SEO的场景中比较重要,我们放到第二,而剩下的url理应就是我们的最好选择
结合一下css的属性选择器,我们可以配合css对这几个参数进行客制。
一般我们要把img居中,都会选择在img的父级中添加
text-align:center;
这也是最标准的写法,不会改变img原本的display。但是很显然,我们无法单纯通过CSS来找到img的父级。
CSS4 将很可能提供父元素选择器,但现在连语法都没定下来。
但是标题说了通过CSS来实现,那就不能使用JS了。因此在CSS不能爬树找父级的情况下,我们还是专注回img本身。
如果我们加入这样一个css:
img[url$="center"]{
display:block;
margin:0 auto;
}
$='center'
的意思是以 center 结尾的 src 属性,这里的用法是,在我们需要居中的图片中的url部分加上?center即可。
![alt](http://xx.xx.xx/xx.jpg?center)
由于在HTTP协议中,问号后的参数不会改变请求资源本身,因此即使带参请求,只要后端没有特殊处理,那么这个图片本身的引用是不会有问题的。
那居左居右的排版也可以用这种方式去,甚至我们还能通过这种方式去设置缩放、旋转、偏转等效果。