banana-space / btex

MIT License
39 stars 3 forks source link

不用脚本实现可折叠证明 #4

Open Trebor-Huang opened 1 year ago

Trebor-Huang commented 1 year ago

可以使用details标签;或者可以用一个隐形的checkbox,css可以根据checkbox是否被选中提供不同的风格。

证明: 像这样;这对静态网页更友好,同时会提高性能。
Trebor-Huang commented 1 year ago

我可以改btex引擎,但是bananaspace网站也需要对应更改

abccsss commented 1 year ago

我觉得没有必要,目前网站已经使用非常 heavy 的 js 实现各种功能,也早就舍弃了对非 js 用户的兼容性。之后做动画也需要更多 js。

如果想要完全静态的输出,那么还需要别的改动,例如禁用 [[...]] 链接,禁用 {{...}} 模板等等(目前这些会产生非标准标签)。但如果有用,可以单独做一个静态模式。

Trebor-Huang commented 1 year ago

模板和链接是需要读取网站上的其他内容的,比如决定是蓝色还是绿色,但是折叠证明没有必要。

其实bananaspace网站不用更改(只不过会多一段死代码

abccsss commented 1 year ago

从一种实现改成另一种实现的目的是什么呢?如果为了静态输出,我已说了需要更多工作。如果为了兼容非 js,我已说了做不到。如果为了优化速度,实在是不会有什么效果。如果为了 semantic HTML,这确实合理,不过很多其他地方得一起改。总之我不理解单独改这里的意义,况且之后做了动画,现在的更改也会成为死代码。

abccsss commented 1 year ago

当时还想同时做折叠节标题,不过后来一直拖着没做。当然这也可以用纯 css 实现,但问题是节的内容并不是一个 div,它是由之前的 h2(或 h3, h4)和之后的 h2 之间夹的部分所定义的,所以不可避免需要 js 来做这件事。

Trebor-Huang commented 1 year ago

可折叠证明的不同之处在于在页面内容准备完毕之后仍然需要运行js;其他的功能都是在准备时运行的。 至于两个元素之间夹的元素,在当代已经获得广泛(除IE外)支持,还有这个。 我在这里写了一个使用例。 与此同时,CSS也支持动画。

abccsss commented 1 year ago

我仍然不相信你这样可以实现任意多节的折叠。你有空可以做出来看看或者开一个 PR。

另外这还依赖于自动在每个 h2 那里加一个隐藏 checkbox,因为 btex 输出带 checkbox 是不合理的。当然这可以从 php 那边实现,不过比 js 麻烦很多。

CSS 的动画还是比较鸡肋,比如目前侧边目录的动画效果它就没法做。但你如果追求纯粹,欢迎来帮忙实现可折叠部分的动画。

abccsss commented 1 year ago

比如第 1 节已折叠 (A),第 2 节未折叠 (B),第 3 节 A,第 4 节 B。现在有一个第 4 节里的元素,你怎么判断它该不该显示?这个 CSS 规则大概是 ”在 A 之后的 B 之后的 A 之后的 B 之后,但不在 A 之后的 B 之后的 A 之后的 B 之后的 A 之后“。不过也许有别的办法。

Trebor-Huang commented 1 year ago

不想做太多工作也有折中的方案,因为如果js处理完全在页面准备完成之前,那可以看成是对html的预处理,实现方式比较自由。在页面加载完成后使用js,就必须是js了。

以及一个另外的问题是目前这些js代码是在bananspace里的,造成btex和bananaspace两个项目的耦合。即使最终决定不做任何更改,至少也可以在btex的文档里面添加这些内容。

abccsss commented 1 year ago

当然需要 js 做大量工作,只是我上一条说了纯 css 似乎不太可行,也就是不便采纳此 issue 的建议,除非有更好的办法。

abccsss commented 1 year ago

也许可以把主项目里相关 CSS + JS 提取出来放在这边,然后在那边引用,我有空看看具体实现