我想在HTML中显示多列文档。多列“框”在分页后重新开始打印。我想在屏幕上模拟这种行为(分页符),所以列高不应该高于用户代理窗口的高度。屏幕上的分页符(CSS多列布局)
只为每个虚拟页面使用一个新的容器将很容易,但我不知道屏幕到底在哪里结束,所以我希望文本能够在这些虚拟页面之间流动。
我知道今天的JS有必要的能力,但我想使用CSS,因为这是一个布局问题。
我想在HTML中显示多列文档。多列“框”在分页后重新开始打印。我想在屏幕上模拟这种行为(分页符),所以列高不应该高于用户代理窗口的高度。屏幕上的分页符(CSS多列布局)
只为每个虚拟页面使用一个新的容器将很容易,但我不知道屏幕到底在哪里结束,所以我希望文本能够在这些虚拟页面之间流动。
我知道今天的JS有必要的能力,但我想使用CSS,因为这是一个布局问题。
我有建议的功能。你可以回顶部按钮 页面的底部,为此,你可以继续这样 首页上放
<a name="Top"></a>
,并在页面
<a href="#Top"> Back to Top… </a>
的底部我知道这不是你寻找,但这将是用户友好和轻松导航。
谢谢,但整个问题在某些设备上会有更好的用户体验。 – vbence
尝试使用Javascript功能来设置容器DIV视口高度的高度,命令:
window.innerHeight
完整剧本获得视尺寸: http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
,如果你不喜欢使用JavaScript,你可以尝试创建负责任的CSS样式,但它会不太准确。
我和这个问题中描述的完全一样。这是一个仅适用于我的目的的HTML/CSS解决方案,可能对其他人有用。它有一些潜在的缺点,我会在给出代码之前描述。在下面的讨论中,我将“子页面”一词用于提问者称之为“虚拟页面”的内容,即所需高度的一组水平连续内容列(注意文本从一个子页面的右下角继续到下一子页面的左上方。)
行,到实际的代码。这里的基本策略很简单:多次将相同的文本分解成所需子页面高度的列。将产生的水平列组彼此堆叠在一起,但将每个连续的副本恰好移动到左侧的一个子页面宽度页面。最后,将整个堆栈(使用overflow:hidden;
)剪切到子页面的宽度。关键的难点在于将剪辑div
设置为正确的高度。如果CSS可以选择所有最后没有墨水的子页面单元时,它们会被直接裁剪掉,然后根本不显示它们,但是我找不到这样做的方法。我最终的粗略近似是在所需的子页面宽度和列结构中再次隐藏所有内容,并使用该布局的高度来确定裁剪的高度。但是,该布局总是比较短,因为将内容排列在一堆长列中比在连续的短列中更有效,而且还需要某种子页面分隔符或者子页面布局会变得非常混乱。所以我通过在这个剪辑中投入一个大的底部填充来欺骗这个div
。如果CSS calc()允许整数除法或舍入,可以做出更好的近似。最后,如果CSS区域起飞,整个任务将变得微不足道,但这看起来不太可能。
抱歉关于tl; dr; - 这里的代码,HTML,然后再CSS:
<div class="column-paginator">
<div class="vertical-strut mypage-h vertical-fuzz">
[COPY OF CONTENT HERE]
</div>
<div class="column-paginator-clipper">
<div class="mypage-h mypage-v column-paginator-0">
[COPY OF CONTENT HERE]
</div>
<div class="mypage-h mypage-v column-paginator-1">
[COPY OF CONTENT HERE]
</div>
<div class="mypage-h mypage-v column-paginator-2">
[COPY OF CONTENT HERE]
</div>
<div class="mypage-h mypage-v column-paginator-3">
[COPY OF CONTENT HERE]
</div>
<div class="mypage-h mypage-v column-paginator-4">
[COPY OF CONTENT HERE]
</div>
</div>
</div>
而现在的CSS:
div.column-paginator {
position:relative; /* Ensure we can anchor positions to this element */
}
div.vertical-strut {
visibility: hidden; /* Only laying this out to get its height */
}
div.vertical-fuzz {
padding-bottom: 300px; /* extra height because unpaginated text
* takes less vertical height. This is a
* crude measure. */
}
div.mypage-h {
/* The desired horizontal setup of the column pagination */
columns: 2 200px;
column-gap: 2em;
}
div.column-paginator-clipper {
/* The div that actually constrains the output */
position: absolute;
top: 0px;
left: 0px;
height: 100%;
max-height: 100%;
overflow: hidden;
}
div.mypage-v {
/* the desired vertical setup of the column pagination */
height: 300px;
position: relative;
overflow: visible;
margin-bottom: 1.5em;
}
div.mypage-v:after {
/* Automatically throw in subpage separator. */
content: "";
height:1em;
position: absolute;
left: 0;
top: 100%;
width:500%; /* must be MAX_SUBPAGES * 100% */
background: lightcyan;
}
/* Note the 2em below is precisely the column-gap above; not sure how
* to enforce/encode that equality in CSS.
*/
div.column-paginator-0 { left:calc(0 * (-100% - 2em)); }
div.column-paginator-1 { left:calc(1 * (-100% - 2em)); }
div.column-paginator-2 { left:calc(2 * (-100% - 2em)); }
div.column-paginator-3 { left:calc(3 * (-100% - 2em)); }
div.column-paginator-4 { left:calc(4 * (-100% - 2em)); }
div.column-paginator-5 { left:calc(5 * (-100% - 2em)); }
我不明白究竟什么是你的意图,但也许CSS3列属性可以帮助你:HTTP ://www.css3.info/preview/multi-column-layout/ – abimelex
@abimelex如果我使用多列布局,您可以像下面这样读取pige:读取第一列,向下滚动,阅读更多内容,然后更多滚动,然后在页面的末尾,您一直向上滚动并开始阅读第二列。演示:http://jsfiddle.net/KnJfr/ - 这显然已经中断。我不希望任何列高于窗口高度 - 因此您可以阅读屏幕上的所有内容,然后向下滚动一个屏幕并阅读3列等等。 – vbence