由于语雀不支持较复杂的排版,建议阅读微信公众号原文,获得更棒的体验:

https://mp.weixin.qq.com/s?__biz=MzI0Njc2NDY0Mg==&mid=2247484893&idx=1&sn=920adeefcae80459575fb84dd4483459&chksm=e9bb00d0decc89c61ff96528110bf48e7735e758e33331ac07221f5c912e98d2f3bc16fede3e&token=1910190309&lang=zh_CN#rd


20190226丨浏览器清爽看图 - 图1

我之前写过这样一篇文章《stylish 给网页换个皮肤》,其中提到了 stylish,他除了可以美化网页外,还能进行广告屏蔽。

今天就用它配合一款油猴插件,对网页上的图片浏览页面进行设计,实现清爽看图的功能。

1. stylus 网页页面重新设计

今天说到的这个 stylus 可以说是 stylish 更好的替代品。

由于 stylish 涉嫌窃取用户浏览历史,曾被下架。而且 Stylish 扩展原作者在 2016 年 8 月将其出售,变成了一个商业软件。而 Stylus 是一个基于 Stylish 1.5.2 版本开发的分支,这是 Stylish 原作者维护的最后一个版本。在此基础上,Stylus 重写并优化了大部分代码来提升性能。

Stylus 的使用方法和 Stylish 基本一致,就不做过多介绍了,不懂的可以看一下上篇文章

之前我提到过,使用 display:none; 可以隐藏页面的元素,但对如何选择页面的元素没有详细地说明,这里来介绍一下,如何用 CSS 选择器来进行元素的选择(介绍我们可能会用到的):

:统配选择器,表示选择所有的元素 TAG:表示选择某标签的元素,比如 div、p、body 等 *.CLASS:表示选择 class=”CLASS” 的元素

ID:表示选择 id=”ID” 的元素

:not(NOT): 伪类选择器,表示排除括号内的所有符合?特点的元素,类似于逻辑中的 “非” FATHER>SON:子代选择器,表示选择 FATHER 内部的 SON 元素,且 SON 是 FATHER 下面的第一层级 YUAN,SU:组合选择器 “,”,表示选择 YUAN 和 SU 这两个元素,同时对其应用相同的样式,类似逻辑中的 “或” .YUAN.SU:我们可以直接在前一个选择器后加另外一个选择器,来同时选中具有这两个特性的元素,类似逻辑中的 “与” 另外,上面这些选择器可以组合使用,更加强大!

好了,我们通过具体的实例来讲解一下如何应用:

比如我们的这个页面 https://www.tp8.com/fengjing/weimei/18645.html

20190226丨浏览器清爽看图 - 图2

我们直接定位到图片的位置,(如何定位请查看《这篇文章》)可以看到他的框架结构基本如下:

  1. <body>
  2. <div class="header h-pub"></div>
  3. <div class="position"></div>
  4. <div class="pic">
  5. <div class="w1200">
  6. <h1>厦门美景图片 (1/6)</h1>
  7. <div class="pic-info">图片信息</div>
  8. <div class="pic-main">
  9. <a href="/dongwu/xiaoniao/16535_2.html" title="下一页"><img src="src.jpg" alt="图片备注"></a>
  10. </div>
  11. <div class="page">上一页下一页</div>
  12. <div class="pic-l">标签</div>
  13. <div class="pic-a">上\下一篇</div>
  14. <div class="clear"></div>
  15. </div>
  16. </div>
  17. <div class="channel c-pub"></div>
  18. <div class="channel2 c-pub mb40"></div>
  19. <div class="label mb30"></div>
  20. <div class="footer"></div>
  21. </body>

而其中的 .pic-main 是我们的主角,是要保留的,其他的我们都可以忽略。

首先我想到的是:

  1. *{
  2. display:none;
  3. }
  4. .pic-main{
  5. display:block;
  6. }

但这种方法会杀掉主角. pic-main 的前辈(父亲、爷爷等)元素. pic 等,如果没有前辈元素. pic,也就没有了. pic-main。

那么如何做到保留主角这一枝人呢?

首先要保留主角的祖宗. pic,也就是 “杀掉” 其他同级与. pic 竞争的元素,用代码:

  1. body>*:not(.pic){
  2. display:none;
  3. }

为避免 “滥杀无辜”,比如. pic 的后代还有. pic 的转世,我们使用子代选择器(仅选择它的儿子,不包括它的孙子、重孙子等)“>”,保证只 “杀掉” 祖宗. pic 的兄弟姐妹,而不会影响到. pic 的转世的兄弟姐妹。

接下来在. pic 的儿子中,只有 “.w1200” 这个主角的父亲,也就是说,在这级中,直接自然选择就可以了,不用再进行人为干预(“杀” 掉其兄弟姐妹)。

之后就到了主角这一代,他有很多的兄弟姐妹,同样,使用之前的原则就可以了:

  1. .w1200 > *:not(.pic-main){
  2. display:none;
  3. }

由于. w1200 这一代就他一个独苗,因此省略了中间的一步。

2. 正则表达式实现样式的应用

到这里样式修改的部分已经完成了,接下来就是将它应用到类似的网页。

20190226丨浏览器清爽看图 - 图3

我们不能将它应用到所有网页,比如它的上一级页面:https://www.tp8.com/dongwu/xiaoniao/,如果一个网页中没有 “.pic”,页面所有的元素都会消失。

我们也不可能添加所有的网页,毕竟一个网站的页面有很多个,但我们可以打开几个类似的网页,总结这些网页的规律,比如该站上的页面:

通过总结,我们可以发现,https://www.tp8.com / 后面是一个分类,之后是具体的图片细节网页。

第一次我用了这个正则表达式:https://www.tp8.com/.*

其实标准的正则表达式需要进行转义,但这部分插件已经帮我们做好了。

可是问题出现了,这个正则表达式同时匹配了https://www.tp8.com/dongwu/xiaoniao / 这个 总结页面 ,这是我们不希望看到的。

如何排除类似这样的总结页面呢?我们可以在原来的表达式后面增加限定 “\d.“,这个表示后面必须有一个数字,之后可以是任意字符。完整的表达式为:[http://www.tp8.com/.\\d.*](http://www.tp8.com/.*%5Cd.*)

到这里,stylus 就可以基本执行了。

这里解释一下:正则表达式中的\d 表示数字,.*表示任意字符。

3. 脚本实现自动加载

下一步,就是实现自动加载下一页的功能

这里我找到了一个油猴插件:Super_preloaderPlus_one,油猴使用方法请自行搜索。

大家可以到油猴插件的网站搜索下载,也可以后台回复 “清爽看图” 获取代码。

但这个脚本会在页面上生成一个小图标,我们之前的那个代码 body>*:not(.pic) 也包括了这个小图标。因此,我们同样需要排除这个 div,而他在页面中是这样的:

因此,我们需要在第一个代码中排除这个,也就是说用下面的代码:

  1. ody>*:not(.pic):not(#sp-fw-container){
  2. display:none;
  3. }

如果你想应用在多个网站中,这个代码就需要在每个代码段中的 body 下进行排除。
之后插件的使用就比较简单了,勾选 “使用翻页模式” 就可以了。
20190226丨浏览器清爽看图 - 图4
好了,大概就这些了,看下浏览的效果:
20190226丨浏览器清爽看图 - 图5
祝看图愉快!
如果觉得我的文章还不错,欢迎点赞、转发、评论啊!
20190226丨浏览器清爽看图 - 图6

原文链接:
https://mp.weixin.qq.com/s?__biz=MzI0Njc2NDY0Mg==&mid=2247484893&idx=1&sn=920adeefcae80459575fb84dd4483459&chksm=e9bb00d0decc89c61ff96528110bf48e7735e758e33331ac07221f5c912e98d2f3bc16fede3e&token=1910190309&lang=zh_CN#rd