我正在使用响应式布局的网站上工作,我遇到了一个问题 解决较新的CSS多列属性的缺点的问题 (http://dev.w3.org/csswg/css3-multicol/)。
当浏览器窗口足够宽时,我将文本分成两部分 带有侧栏的列用于较小的图像。多列css 物业运作良好,但他们不太聪明。
第一部分被均匀地分成两个等高的列,但是 他们太高了。对于有人阅读本节,他们必须这样做 沿着第一列向下滚动,然后返回到第一列的开头 接下来阅读其余部分。
第二部分也被分成两个等高的列,但是 只有两个句子,所以看起来很尴尬;不是真的 足够的内容来证明用户必须阅读的第二列。
在我看来,解决方案就是:
问题是CSS3多列不能以这种方式工作。我觉得 唯一的方法是某种涉及做的javascript解决方案 计算字符数,css文本属性和元素 维度,然后拆分字符串/追加新的html元素,将内容分配到单独的部分,以使列正确中断。
请记住两件事:
有点棘手,但我认为它可能足以尝试。有没有人听说有人在那里可能正在解决 这个问题呢?或者如果没有,你对如何设置有任何想法 算法一起用于此?
非常感谢你的帮助。
13年1月8日
为了澄清,这里是响应式设计的预期模式的一些图像。 (因为我是SO的新人,只有两个链接)
模式1:移动的单列线性化
模式2. Single-column with sidebar for iPad / narrow browser windows
模式3. Two-column for wide browser windows
模式3是问题所在。第一部分的内容太长,无法放在一个页面上,因此在这种情况下,我将其划分为适合浏览器高度的行。这就是我正在寻找的JavaScript解决方案。
答案 0 :(得分:1)
我认为你所追求的是这个 - > http://codepen.io/justincavery/full/KsjHa
我在这里做的是使用jquery来检查内容div中字符数的计数。
var $div = $( '#blah' );
if($div.text().length >= 600) {
$div.addClass('columns');
}
如果字符数等于或大于600,则会将“列”类添加到包含div中。
为了清楚起见,这意味着任何少于600个字符的文章都不会应用“列”类,任何超过600个字符的文章都不会。
现在我们已经将DOM排序到CSS(请注意,此codepen有一些与此答案无关的样式,因此请仅作为指导使用。)
下一个阶段是为超过600个字符的内容添加列,但我们仍然需要确保在较小的宽度上我们只有一个列,否则它看起来很奇怪。
@media screen and (min-width:48em) {
/* 48.000em /*(ackkkkkk, device specific bad)768px*/
.columns {
-webkit-column-count: 2; /* Saf3, Chrome*/
-webkit-column-gap: 4%; /* Saf3, Chrome*/
-moz-column-count: 2; /* FF3.5+ */
-moz-column-gap: 4%; /* FF3.5+ */
column-count: 2; /* Opera 11+*/
column-gap: 4%; /* Opera 11+*/
}
}
在这里,我选择48ems和更高(ipad portrait and up)作为定义列的点,允许任何较小的屏幕为单列。
我后来提到的一个问题是,如果文本太长,你希望它再次出现在一个列中。在这种情况下,您需要删除类以获得更高的值,或者检查字符数是否在两个值之间。
你可能还注意到我开始研究一个垂直媒体查询,它将背景设置为粉红色,将内容设置为两列,但它无法达到你想要的效果。
这个问题正在研究这种技术的几点。
更新问题后,我认为您正在寻找的实施工作是在这项优秀的工作上完成的 - http://kaikkonendesign.fi/typesetting-responsive-css3-columns/
答案 1 :(得分:-1)
你可以单独用CSS做到这一点:
.box {
-o-text-overflow: ellipsis; /* Opera */
text-overflow: ellipsis; /* IE, Safari (WebKit) */
overflow:hidden; /* don't show excess chars */
white-space:nowrap; /* force single line */
width: 300px; /* fixed width */
}
希望这会有所帮助。