[英]CSS: multi-column layout containing blocks aligned to a horizontal rule
我正在嘗試為以下布局創建CSS。 這與表非常相似,但我使用它來呈現不包含表格數據的XML。
我想要兩個或更多列以及一個或多個貫穿這些列的水平規則(不可見線)。 規則之間的垂直空間確定與表的行高完全相同,取決於該行單元格中內容的最大高度。
此“表”中的所有“單元格”包含兩個可選塊。 上部塊在上部規則下方對齊。 下部塊在下部規則上方對齊。 這是一個例子:
上面和下面的塊都是可選的,因此每個“單元”將具有以下配置之一。 塊沒有固定的高度; 它們可能包含根據“單元格”的寬度包裝的文本。
由於這非常像一個表,我嘗試用display:table
渲染它。 第一個問題:如何在單個table-cell
內創建上下塊? 這是我的第一次嘗試 。
我認為這相當於在其容器底部“浮動”一個塊的問題。 這個問題的公認答案表明這可能是不可能的。
XML片段
這是我正在嘗試渲染的XML的簡化示例。
<block>
<horizontal-rule>
<column>
<above-rule>When in the Course of human events</above-rule>
</column>
<column>
<above-rule>to dissolve the political bands</above-rule>
<below-rule>it becomes necessary for one people</below-rule>
</column>
<column>
<below-rule>which have connected them with another</below-rule>
</column>
</horizontal-rule>
</block>
在試圖讓它工作時,我一直在嘗試修改我原來的XML模式。 在第二個XML示例中,我不是按相鄰的水平規則進行分組,而是按行嘗試更像“表”的分組。 在翻譯中, <above-rule>
變為<cell-bottom>
, <below-rule>
變為<cell-top>
。 我更喜歡原來的,但我在這個方面取得了更多進展。
<block>
<row>
<cell>
<cell-bottom>When in the Course of human events</cell-bottom>
</cell>
<cell>
<cell-top>it becomes necessary for one people</cell-top>
<cell-bottom>to dissolve the political bands</cell-bottom>
</cell>
<cell>
<cell-top>which have connected them with another</cell-top>
</cell>
</row>
</block>
一個非常難看的解決方案
我有一個特別難看的想法。 我可以修改我的XML模式,並要求使用完全相同的內容重復整個XML <block>
兩次。 然后我將<block>
兩個副本放在包裝元素<block-wrapper>
並<block-wrapper>
的第一個子節點和包裝器的最后一個子節點定義單獨的樣式。
第一個孩子在頂部對齊單元格內容並隱藏<bottom>
塊。 最后一個孩子在底部對齊單元格內容並隱藏<top>
塊。
我使用position:absolute
來使兩個渲染表完全重疊。
問題
display:table
是一種聰明的方法嗎? 您不必使用表格。 試試這個(僅在Chrome中測試):
<html>
<head>
<title>CSS</title>
</head>
<style type="text/css">
div {
float: left;
width: 100px;
margin-left: 10px;
margin-right: 10px;
border-width: 1px;
border-style: solid;
visibility: visible;
height: 50%;
background-color: white;
position: relative;
}
div div {
background-color: grey;
z-index: 3;
}
div#OUTER {
width: 100%;
display: block;
height: 600px;
border: 0;
}
span { background-color: white; width: 100%; }
.line { width: 100%; visibility: visible; z-index: 5; }
.top { position: absolute; top: 10%; }
.bottom { position: absolute; bottom: 10%; }
.red-line { border: solid 2px red; }
.blue-line { border: solid 2px blue; }
.top-line { position: absolute; top: 2%; }
.bottom-line { position: absolute; bottom: 50%; }
</style>
<body>
<div id="OUTER" style="">
<hr class="line red-line top-line" />
<hr class="line blue-line bottom-line" />
<div>
<span class="top">11111<br>111111<br>111111111</span>
</div>
<div>
<span class="bottom">22222</span>
</div>
<div>
<span class="bottom">33333<br>33333<br>33333</span>
</div>
<div>
<span class="top">44444<br>44444<br>4444<br>4444</span>
<span class="bottom">55555<br>555555<br>5555<br>5555</span>
</div>
</div>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.