【发布时间】:2019-07-30 13:12:13
【问题描述】:
我喜欢在我的博文中添加响应式旁注。响应式如下:在小视口上隐藏,在宽视口上的边缘可见。
当隐藏在小屏幕上时,需要一个可见元素(“链接”)来指示还有更多要阅读的内容。到目前为止,我的解决方案是:
<p>Some sentence with
<span class="sidenote" onclick="this.classList.toggle('active');">
underlined text
<span class="sidenote__content">
Sidenote content
</span>
</span>, which is clickable on small viewports.</p>
(为了可读性添加了换行符)
使用 CSS,我在带下划线的文本和旁注内容中都添加了星号,以便在大屏幕上直观地连接它们。
这个解决方案的问题是sidenote__content 的正确显示依赖于CSS。它在 Pocket 等阅读器中显示:
- 旁注内容显示在句子中间,没有任何视觉提示
- 带下划线的文本和旁注内容之间没有空格。
我希望有一个比简单跨度更语义化的解决方案。 <aside> 和 <section> 不能使用,因为它们是块元素,can automatically close 是父元素的 p 元素。
解决方案可能是将旁注内容与链接分开。但是,我更愿意将一组旁注及其链接保留为一组或一对,以便可以将它们插入到帖子中。拆分它们需要 javascript 逻辑来将链接与其内容相匹配,并且当集合的一半丢失时可能会导致维护问题。
【问题讨论】:
-
将两者分开,并让链接的
href指向旁注的id可能是最便携的语义解决方案。另一种方法是将旁注存储为span上的data-*属性,包裹下划线文本,然后使用CSS 伪元素有条件地内联显示该内容。不过,这可能不那么便携。 -
基于this discussion 和MDN's documentation,
<small>元素似乎是旁注内容的最佳候选。使用<small>并不能解决内容的中间句子可见性问题。我认为您必须拆分这些部分是正确的。 -
我首先想到的是
<aside>元素,您已经排除了它,然后是<details>元素,出于同样的原因,它被排除了。出于某种原因,我天生不喜欢<small>,但我认为那是从我以前的表格布局时代开始,然后转向语义;<small>感觉 - 不公正 - 就像倒退了一步。好问题! :)
标签: html semantic-markup