电子书阅读器上的浏览器 [Day14] 中文直排阅读模式

这功能对於浏览器来说,应该是个没人(或很少人)想过会存在的功能。

从十几二十年前开始有浏览器以来,浏览器就一直是以横读为主。而中文阅读习惯,也渐渐地变成横式阅读。除了实体出版的小说有一定比例还是会用直排发行外,连电子书有支援直排功能的也不多(最近有愈来愈多的趋势就是了,很好)。

所以网路上找得到的文章或是讨论,也大都围绕着电子书的直排支援上。在电子书都还支援得不是很完整的情况下,何况是一般的网页浏览呢?

下面是一篇对我帮助很大的文章。里头提到中文直排的现况,和 css style 的相关语法支援。透过文章中提到的 css style 语法,我得以初步的将网页转为直排。

https://bobtung.medium.com/电子书直横转换有什麽困难-5926fa019003

private const val verticalLayoutCss = "body {" +
        "-webkit-writing-mode: vertical-rl;" +
        "writing-mode: vertical-rl;" +
        "}"

private const val horizontalLayoutCss = "body {" +
        "-webkit-writing-mode: horizontal-tb;" +
        "writing-mode: horizontal-tb;" +
        "}"

虽然文字部分可以成功转为直排,而且是由左往右读;但是画面中的其他元素全都不受控制地散在画面中:

https://ithelp.ithome.com.tw/upload/images/20210912/201402604u7HPVwewN.png https://ithelp.ithome.com.tw/upload/images/20210912/20140260PrNymTaJxL.png

转换後的直排效果会根据每个网页的复杂度不同,有的看起来走位的元素比较少,可以正常的直排阅读;有的就跟上面的例子一样,把画面东一块西一块地盖住,想看也看不了。如此不稳定的功能,很难让人有想用的念头。

Combo 技: 阅读模式 + 直排

直排功能的窘境,无法直接在直排的实作上排除,因为网页上的元件写法千千万万种,不大可能针对每一种都去处理直排的应变方式。但是,如果搭配上最近刚实作好,接近完美的阅读模式,直排的效果瞬间有了跳跃式的改善!开启阅读模式後,画面上的元件已经是可以完全(几乎?)在掌控之中;这时再加上直排的处理 -- 一个堪用的浏览器直排功能诞生了!

https://ithelp.ithome.com.tw/upload/images/20210912/20140260OwXeYlW6lH.png https://ithelp.ithome.com.tw/upload/images/20210912/20140260PsnPCC6s9P.png

虽然还有些小地方要处理,但现在的直排模式已经可以拿来日常使用了。对於内容较多的中文网页内容,切换成直排模式,搭配点击翻页,在阅读上的感觉会更接近於电子书。

至於内容里夹杂的数字,桌上型电脑的浏览器其实有支援 css style 语法可以将其转正;但在 Mobile 上的 WebView 目前都还没有支援;得要自己捞出这些数字,再利用 将它转正。以後有时间应该会再补一下这个修正。而内容中的英文单字和句子…就无能为力了。

参考影片

参考版本: https://github.com/plateaukao/browser/releases/tag/v8.4.5


<<:  onnx - Ubuntu18.04 yolov3 tiny 转 onnx 使用 Python 3.6.9

>>:  Day-14 美化Excel枢纽分析表

自学教材选择

Photo by The Climate Reality Project on Unsplash ...

[2020铁人赛Day28]糊里糊涂Python就上手-Pandas的观念与运用(上)

今日目标 学习了解 Python Pandas 的观念与运用 What is Pandas? Pan...

Day18:Flow 的中间运算子,资料输出前还可以做很多事喔

我们在上一篇的文章中,介绍了 Flow 的基本概念,包括如何建立一个 Flow,以及 Flow 是一...

Day4-React Hook 篇-认识 useRef & useImperativeHandle

今天要介绍的是可以用来操作 DOM 元素的 useRef 及和它有关的 useImperativeH...

Python & Celery 学习笔记_任务链结

Celery 提供任务链结的功能,字面上的意思,就是将任务一个一个串联在一起,下面的叙述 or 范例...