2012-08-24 26 views
1

我一直在为一个团队创建用于Windows 8的应用程序。我使用CSS3网格来布置页面,这已经非常容易。但是,我们正在使用来自外部数据源的数据填充应用程序的某些区域,因此无法控制导入文本的长度。我们的应用程序是从左到右滚动的,所以我需要填充的网格列来自动调整宽度并将文本流动到列中 - 所以使用CSS网格和CSS列(都设置为“auto”)应该工作很好,对吧?Win8应用程序中的灵活网格和多列

嗯,它没有。我尝试了许多CSS的不同组合,但我需要给我的div一个确定的宽度(如果导入的内容很短,这将不起作用),或者定义一定数量的文本可以流入的列(这对于很短或很长的内容都不起作用)。我认为这主要是因为我试图水平构建一个灵活的页面,即使Win8应用程序似乎也感到困惑。我想我需要找到一个JS/jQuery解决方法,但我相对较新的JS/jquery,我不知道我会写什么。

当然,如果任何其他Win8前端开发者有这方面的经验,您的洞察力将非常感谢。

我的.detailSection位于其他列的中间,所以它绝对必须根据需要扩展和收缩,无论内容是否填满它。

这是我现在的CSS代码片段。当然,如果我可以提供任何其他信息,请告诉我。

.advisorDetail { 
    height: 100%; 
    -ms-grid-columns: 120px 560px 80px auto 80px auto auto; 
} 
.advisorDetail section[role=main].detailSection { 
    -ms-grid-column: 4; 
    display: -ms-grid; 
    -ms-grid-rows: 24px 20px 1fr; 
    -ms-grid-columns: auto; 
} 
    .advisorDetail section[role=main].detailSection .detailFeed { 
     -ms-grid-row: 3; 
     column-count: 3; 
     column-width: 400px; 
     column-gap: 40px; 
    } 

回答

1

您的CSS片段显示正在定义列数。根据您的描述,您不希望在多列元素上指定column-countwidth。我假设你问的是如何删除column-count并仍然可以获得你想要的视觉效果。那是对的吗?假设它是...

当多列元素试图确定它应该如何自行调整大小时,其高度尚未定义。因此,它的大小就好像对高度没有限制,并且你得到一列文本。如果您在多列元素上指定height: 100%确保其容器的高度在确定大小时定义,则应该获得要查找的视觉效果。

例如,假设您的.detailFeed元素是-ms-grid-row-span:3(跨越所有行)。由于第三行使用的是分数单位,因此网格需要事先定义其高度,以便知道第三行应该有多大。如果希望Grid元素始终为窗口高度的100%,则通常应指定height: 100%,并确保网格的百分比值通过确保其具有非自动高度的祖先而及时解决(例如,设置为height: 100%在树上的所有元素上)。另一个选择是使用视口高度单位(即height: 100vh

如果多列元素所在的网格行都是非自动和非分数的,则不需要定义网格的高度因为网格单元的高度仍然会被定义。

这是一些示例标记,显示了我所描述的内容。你可以在IE 10或应用程序中运行它。您会注意到,在调整窗口大小时,列数会调整。

<!doctype html> 
<html> 
<head> 
<style> 
html, body, .advisorDetail, section 
{ 
    height: 100%; 
} 
.advisorDetail section[role=main].detailSection { 
    -ms-grid-column: 4; 
    display: -ms-grid; 
    -ms-grid-rows: 24px 20px 1fr; 
    -ms-grid-columns: auto; 
    height: 100%; 
} 
    .advisorDetail section[role=main].detailSection .detailFeed { 
     -ms-grid-row-span: 3; 
     column-width: 400px; 
     column-gap: 40px; 
     height: 100%; 
    } 
</style> 
</head> 
<body> 
<div class="advisorDetail"> 
    <section role="main" class="detailSection"> 
    <div class="detailFeed"> 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna. 
Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus. 
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci. 
Aenean nec lorem. In porttitor. Donec laoreet nonummy augue. 
Suspendisse dui purus, scelerisque at, vulputate vitae, pretium mattis, nunc. Mauris eget neque at sem venenatis eleifend. Ut nonummy. 
Fusce aliquet pede non pede. Suspendisse dapibus lorem pellentesque magna. Integer nulla. 
Donec blandit feugiat ligula. Donec hendrerit, felis et imperdiet euismod, purus ipsum pretium metus, in lacinia nulla nisl eget sapien. Donec ut est in lectus consequat consequat. 
Etiam eget dui. Aliquam erat volutpat. Sed at lorem in nunc porta tristique. 
Proin nec augue. Quisque aliquam tempor magna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. 
Nunc ac magna. Maecenas odio dolor, vulputate vel, auctor ac, accumsan id, felis. Pellentesque cursus sagittis felis. 
Pellentesque porttitor, velit lacinia egestas auctor, diam eros tempus arcu, nec vulputate augue magna vel risus. Cras non magna vel ante adipiscing rhoncus. Vivamus a mi. 
Morbi neque. Aliquam erat volutpat. Integer ultrices lobortis eros. 
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin semper, ante vitae sollicitudin posuere, metus quam iaculis nibh, vitae scelerisque nunc massa eget pede. Sed velit urna, interdum vel, ultricies vel, faucibus at, quam. 
Donec elit est, consectetuer eget, consequat quis, tempus quis, wisi. In in nunc. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. 
Donec ullamcorper fringilla eros. Fusce in sapien eu purus dapibus commodo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. 
Cras faucibus condimentum odio. Sed ac ligula. Aliquam at eros. 
Etiam at ligula et tellus ullamcorper ultrices. In fermentum, lorem non cursus porttitor, diam urna accumsan lacus, sed interdum wisi nibh nec nisl. Ut tincidunt volutpat urna. 
Mauris eleifend nulla eget mauris. Sed cursus quam id felis. Curabitur posuere quam vel nibh. 
Cras dapibus dapibus nisl. Vestibulum quis dolor a felis congue vehicula. Maecenas pede purus, tristique ac, tempus eget, egestas quis, mauris. 
Curabitur non eros. Nullam hendrerit bibendum justo. Fusce iaculis, est quis lacinia pretium, pede metus molestie lacus, at gravida wisi ante at libero. 
Quisque ornare placerat risus. Ut molestie magna at mi. Integer aliquet mauris et nibh. 
Ut mattis ligula posuere velit. Nunc sagittis. Curabitur varius fringilla nisl. 
Duis pretium mi euismod erat. Maecenas id augue. Nam vulputate. 
Duis a quam non neque lobortis malesuada. Praesent euismod. Donec nulla augue, venenatis scelerisque, dapibus a, consequat at, leo. 
Pellentesque libero lectus, tristique ac, consectetuer sit amet, imperdiet ut, justo. Sed aliquam odio vitae tortor. Proin hendrerit tempus arcu. 
In hac habitasse platea dictumst. Suspendisse potenti. Vivamus vitae massa adipiscing est lacinia sodales. 
Donec metus massa, mollis vel, tempus placerat, vestibulum condimentum, ligula. Nunc lacus metus, posuere eget, lacinia eu, varius quis, libero. Aliquam nonummy adipiscing augue. 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas porttitor congue massa. Fusce posuere, magna sed pulvinar ultricies, purus lectus malesuada libero, sit amet commodo magna eros quis urna. 
Nunc viverra imperdiet enim. Fusce est. Vivamus a tellus. 
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin pharetra nonummy pede. Mauris et orci. 
    </div> 
    </div> 
</div> 
</body> 
</html> 

披露:我在参与微软CSS网格实施的团队。

+0

我编辑了我的问题,添加了一些其他相关的CSS,我之前遗漏了。 我可以看到您的解决方案完全按照预期工作,但是,.advisorDetail列后面的列现在正在折叠到这些列的顶部 - 就好像“-ms-grid-columns:auto”部分一样.detailSection中的CSS只抓取第一个400px的文本列。 –

+0

网格首先解析列宽,然后解析第二个行高。有一些启发式方法用于确定如果解析的行高度影响项目的最小大小,则需要返回并重新计算列大小。 不幸的是,这种启发式方法不适用于子网格中的嵌套网格和多列元素。 我的建议是在这种情况下不嵌套网格 - 将所有内容放在一个网格中。 –

+0

不幸的是,当我将这个页面上的6个部分放在网格外时,它们都相互重叠 - 就好像浮动或内嵌块不起作用。我想它试图阻止像普通网页那样的垂直滚动? –

相关问题