我正在构建一个模板来编写一些技术文档。我想用尽可能少的JavaScript来做这件事。我包括一个minimal example
当屏幕较宽时,它会将span标记中的引用浮动到左边距。当屏幕变窄时(例如,在移动的设备上),没有足够的数字真实的显示左边距,我想立即显示段落后面的引用(或者,也许,在结尾)。我见过其他人建议这样做,以一些绝对的位置,但我不认为这在我的情况下起作用,因为在一个段落中可能有多个引用。我看到的另一种选择是将一个段落的所有页边注解放在一个单独的块中,并浮动到页边。出于各种原因,我希望能够将span标记尽可能靠近它所引用的文本。在一个完美的世界里,我想让html尽可能地保持语义,所以我不想把每个段落都 Package 在另一个div标签或table标签中。
我已经能够做的一个近似的解决方案(如Codepen示例所示)是将段落显示为一个flexbox,并更改引用范围的顺序,以便它们显示在主文本之后。这几乎是可行的,除了通过将段落更改为显示为flexbox,跨度之间的每一个连续文本行都被呈现为一个块,这会产生尴尬的换行符。我已经尝试了一些CSS技巧,试图让剩余的文本像没有span标签时一样 Package ,但我开始相信这是不支持的(也许是一些聪明的CSS选择器display: content
)
article {
margin-left: 25%;
padding: 5px;
}
main {
margin-left: auto;
margin-right: auto;
max-width: 800px;
flex-wrap:wrap;
}
section {
margin-top: 40px;
}
h1 {
width: calc(125% - 10px);
margin-left: -25%;
text-align: center;
}
h2 {
width: calc(125%);
margin-left: calc(-33%);
border-top: 1px solid gray;
padding-top: 10px;
padding-left: 40px;
}
span.ref {
float: left;
clear: both;
width: calc(33% - 8px);
margin-left: -33%;
hyphens: auto;
font-size: 14px;
color: #666;
text-align: left;
}
@media only screen and (max-width: 500px) {
article {
margin-left: 0px;
}
h1, h2 {
margin-left: 0;
padding-left: 0;
width: 100%;
}
p {
display: flex;
flex-direction: column;
}
span.ref {
order: 2;
float: none;
margin-left: 0px;
}
p > span.ref:first-of-type {margin-top: 10px;}
}
<body>
<main>
<article>
<h1>Document Title</h1>
<section>
<h2>First section of the document</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras fringilla porta est nec rhoncus. Vestibulum ultricies molestie ante, vel fringilla turpis tempor at. Maecenas eu leo justo. Aliquam scelerisque metus in massa hendrerit [1], <span class="ref">[1] Wikipedia. </span>non condimentum augue pharetra. Etiam in lorem eu nibh sagittis [2] <span class="ref">[2] A fancy textbook</span> lacinia sit amet eu odio. Quisque ultricies lacinia dignissim. Suspendisse blandit urna justo, et blandit metus tincidunt at. Quisque vel varius enim.
</p>
<p>
Aenean cursus vestibulum libero, eu vulputate nisi efficitur sit amet. Praesent quis metus ac leo eleifend tempus. Praesent ac mauris eleifend, luctus ligula vel, interdum lectus. Donec iaculis in est non iaculis. Nullam vulputate, lorem quis placerat condimentum, risus lectus feugiat neque, id auctor augue elit ut enim. Donec vel rutrum massa. Nunc laoreet nulla et eleifend facilisis. Morbi scelerisque velit sit amet libero viverra mattis. Vivamus non porta neque, et rhoncus mi. In lectus nisl, faucibus nec sem sed, ullamcorper commodo ante. Aliquam ac massa imperdiet, viverra lacus eget, convallis ex. Phasellus tempus lacinia enim id tincidunt.
</p>
</section>
<section>
<h2>A second section</h2>
</section>
</article>
</main>
</body>
3条答案
按热度按时间tyg4sfes1#
因为你不想要JavaScript,我能想到的唯一方法就是复制引用,一个只在桌面上可见,另一个只在移动的端可见:
b91juud32#
我建议在桌面版本中将链接放在段落的底部,在移动的版本中,它们将位于您需要的位置。此外,不要忘记可访问性。就像这样:
50pmv0ei3#
我有另一个裂缝,并能够让它工作与一个单一的版本(与一些警告)。完全不需要复制引用或调整基础HTML。
注意:我使用的是Firefox目前不支持的
:has
选择器。How do you enable :has() selector on Firefox跨度需要用
position: absolute
将其从默认的内联点中“拉”出来,以便使剩余段落文本上移到引用跨度之前所在的位置。