C# 如何在ASP.NET MVC中创建两列蛇行布局?
我有大约一百个简短的文本数据项(这个数字可能会有很大的变化),我想把它们放在一个页面中,让浏览器在一个周围的div中把它们分成三列,并将这些项依次排列,如下所示:C# 如何在ASP.NET MVC中创建两列蛇行布局?,c#,asp.net-mvc,css,layout,rendering,C#,Asp.net Mvc,Css,Layout,Rendering,我有大约一百个简短的文本数据项(这个数字可能会有很大的变化),我想把它们放在一个页面中,让浏览器在一个周围的div中把它们分成三列,并将这些项依次排列,如下所示: A F L B G M C H N D I O E K ... 有没有一种方法可以将其呈现为li的(或者可能只是单独的行),并让浏览器自动将其整理成三个等高列,可能使用CSS 是否存在任何浏览器兼容性问题?A <div style="float: left">A
A F L
B G M
C H N
D I O
E K ...
有没有一种方法可以将其呈现为li的(或者可能只是单独的行),并让浏览器自动将其整理成三个等高列,可能使用CSS
是否存在任何浏览器兼容性问题?A
<div style="float: left">A</div>
<div style="float: left">B</div>
<div style="float: left">C</div>
<div style="float: left">D</div>
<div style="float: left">...</div>
B
C
D
...
然后将它们放入一个宽度设置正确的div中。在CSS世界中,这是我所知道的在表外做三列的唯一方法
<html>
<div style="width:100px">
<div style="float:left; width:33%;">a</div>
<div style="float:left; width:33%;">bsdf</div>
<div style="float:left; width:33%;">c</div>
<div style="float:left; width:33%;">d</div>
<div style="float:left; width:33%;">e</div>
<div style="float:left; width:33%;">f</div>
<div style="float:left; width:33%;">g</div>
</div>
</html>
A.
bsdf
C
D
E
F
G
显然,您不会使用所有这些样式标记,而是使用实际的样式。请注意,宽度为33%
我在IE和FirFox中尝试了这一点,在这两个方面都没有问题。html可以(实际上并不重要):
A.
B
C
D
...
在javascripts(特别是jquery中的示例)中,您必须用COL包装它们,以便生成的html(在操纵javascript之后)将变成:
<div class="3col_vert">
<div class="col_left">
<div>a</div> ...
</div>
<div class="col_centre">
<div>e</div> ...
</div>
<div class="col_right">
<div>g</div> ...
</div>
</div>
A.
E
G
要维护的Jquery将是:
var vert_divs = $(".3col_vert div");
// Remove them from parent
$(".3col_vert").empty()
.append("<div class='col_left'></div>") // append the wrapper cols to parent
.append("<div class='col_center'></div>")
.append("<div class='col_right'></div>");
// Now place them to the wrappers
var totalDivs = vert_divs.length; // count number of match divs
vert_divs.each(function(i) {
if (i < totalDivs / 3)
$(this).appendTo(".3col_vert div.col_left");
else if (i<totalDivs * 2/3)
$(this).appendTo(".3col_vert div.col_center");
else
$(this).appendTo(".3col_vert div.col_right");
});
var vert_divs=$(“.3col_vert div”);
//从父级中删除它们
$(“.3col_vert”).empty()
.append(“”//将包装列追加到父项
.附加(“”)
.附加(“”);
//现在把它们放在包装纸上
var totalDivs=垂直divs.length;//计算匹配div的数目
每个垂直分区(功能(i){
如果(i 否则,如果(i没有浏览器兼容性问题:
<% var rows = source.Count() % 3 == 0 ? source.Count / 3 : (source.Count / 3) + 1; %>
<table>
<% for(int i=0; i<rows; i++) { %>
<tr>
<td><%= source.Skip(i).FirstOrDefault() %></td>
<td><%= source.Skip(i+rows).FirstOrDefault() %></td>
<td><%= source.Skip(i+rows*2).FirstOrDefault() %></td>
</tr>
<% } %>
</table>
你不能单独用CSS来实现这一点——尽管@griegs已经展示了如何跨越然后向下
如果您总是想要3列,这应该很容易,只需一点服务器端代码和CSS-基本上对于您编写的每一项,如下所示:
<li>item</li>
<style>
.three-column-panel > ul {
float:left; width:33%; list-style-type: none; text-indent:0; }
</style>
<div class="three-column-panel">
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<ul>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
<ul>
<li>g</li>
<li>h</li>
</ul>
</div>
所以你最终会得到这样的结果:
<li>item</li>
<style>
.three-column-panel > ul {
float:left; width:33%; list-style-type: none; text-indent:0; }
</style>
<div class="three-column-panel">
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<ul>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
<ul>
<li>g</li>
<li>h</li>
</ul>
</div>
.三列面板>ul{
浮动:左侧;宽度:33%;列表样式类型:无;文本缩进:0;}
- a
- b
- c
- d
- e
- f
- g
- h
在Xandy建议使用Javascript之后,我在谷歌上搜索了jQuery插件,发现:
报纸专栏JQuery插件
用法:
您需要一个包含如下元素的容器
<div id="npContainer">
<div class="npItem">Item1</div>
<div class="npItem">Item2</div>
</div>
使用插件的网页
外部div的高度如何?它会自动管理吗?它如何知道它应该是三列?是的,应该这样做。我不记得必须设置高度。你可能会遇到的问题是内容和宽度。例如:如果你有a、b、c列,那么另一行、horndrolic、e、f列,那么你会有奇数列。所以设置每个列div的宽度。显然,在样式标记中执行此操作。:)它不知道列。请参阅上面的注释。好的。谢谢你的提示,但我需要一些更关注列的内容。我还尝试将父级的宽度设置为500px,整个内容保留为三列。嗯,不好。它有三列,但它先从左到右排序。我需要它将顶部排序为bottom first。这不就是你放置内部div的顺序吗?我很确定,而且我的css不是专家级的,你要求做的是不可能的。虽然现在肯定有人会证明我错了。如果你同意元素的放置顺序,那么这是一个很好的干净解决方案。你提到了“浏览器”。我认为纯css不可能做到这一点。但你当然可以用javascript来做。你也在寻找javascript的选项吗?当然,我对javascript持开放态度。这正是我看到这个答案时开始写的内容,只要用户熟悉jQuery,它就会工作得很好。在遇到jQuery之前,我不太编写客户端脚本,javascript编程就像是处理浏览器差异,而不是生产力。顺便说一句,如果有人熟悉其他框架或只是用javascript实现,那也没关系,因为它只是为了“帮助”而操作标记css完成了它的工作。谢谢,xandy。另请参阅下面我的新帖子。我认为如果您不反对此解决方案,它可能是最可取的。您生成的代码将比必须使用javascript在客户端处理它更高效。这真的很优雅。正确答案的候选者,尽管我确实找到了客户端解决方案我将很快发布。我喜欢在服务器端处理列高的想法。可能值得编写一个HTMLHelper扩展方法。
<div id="npColumn1"></div>
<div id="npColumn2"></div>
<div id="npColumn3"></div>
jQuery().npColumns();