2013-04-10 66 views
1

我需要最後一條紅線與之前的所有紅線相等。 UL容器的寬度可能不同(這使得第n個選擇器在這裏無用)。 每個LI的線條高度也可能不同。內嵌塊元素後的水平線

演示:http://jsfiddle.net/6ZX9W/34/

<ul> 
    <li>Medium medium medium medium medium contnent.</li><!-- 
    --><li>Short contnent.</li><!-- 
    --><li>Long long long long long long long long long long long long long long long long long long long long long long long long long long long long long contnent.</li><!-- 
    --><li>Short contnent.</li><!-- 
    --><li>Even more long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long contnent.</li><!-- 
    --><li>Short contnent.</li><!-- 
    --><li>Medium medium medium medium medium contnent.</li> 
</ul> 

li { 
    position: relative; 
    display: inline-block; 
    width: 200px; 
    vertical-align: top; 
    margin-right: 20px; 
    margin-bottom: 20px; 
    border: solid 1px #ccc; 
} 
li:before { 
    content: ''; 
    position: absolute; 
    top: -10px; 
    left: 0; 
    display: block; 
    width: 222px; 
    border-top: solid 10px rgba(255,0,0,.3); 
} 

希望找到沒有JavaScript的幫助解決。

upd。邊框顏色應該是透明的。所以要小心重疊。

upd2。紅線不應該太長(它應該在最後一列+添加邊距(margin-right:20px)之後結束)。

+0

你想要的列數是否已修復?或取決於用戶的屏幕大小? – Arkana 2013-04-10 08:29:48

+0

列數不固定。這取決於用戶的屏幕大小。 – Sladex 2013-04-10 10:05:24

回答

0

可以使用display: block,而不是display: inline-block爲您的列表:

li { 
    position: relative; 
    display: block; 
    width: 200px; 
    vertical-align: top; 
    margin-right: 20px; 
    margin-bottom: 20px; 
    border: solid 1px #ccc; 
} 

Demo

,或者你可以過去裏設置不同的CSS:

li:last-child:before { 
    width: 450px; 
} 

Demo

+0

1演示:這不是我正在尋找的東西(我需要漂浮的元素......)。 2演示:我不知道我需要的寬度,因爲它取決於容器的寬度(或用戶的屏幕大小)。 – Sladex 2013-04-10 10:14:27

0

好的,那麼這樣的事情呢? 使用9999px作爲寬度值似乎和大概種哈克,但無論什麼作品,對不對?

這裏是小提琴:http://jsfiddle.net/6ZX9W/26/

這裏是使用的CSS:

ul{ 
    margin: 0; 
    padding: 0; 
    padding-top: 10px; 
    overflow: hidden; 
    border: 1px #aaa dashed; 
    list-style: none; 
} 

li { 
    position: relative; 
    display: inline-block; 
    width: 200px; 
    vertical-align: top; 
    margin-right: 20px; 
    margin-bottom: 20px; 
    border: solid 1px #ccc; 
} 
li:before { 
    content: ''; 
    position: absolute; 
    top: -10px; 
    left: 0; 
    display: block; 
    width: 9999px; 
    border-top: solid 1px #f00; 
} 

當然,這一切都取決於一個事實,即在UL必須有overflow: hidden + I增加了一些額外的樣式:刪除正確的填充和padding-top: 10px是因爲我們想要顯示第一行的:before紅線,爲此您定義了top: -10px

+0

對不起,我忘記了我需要的邊框顏色是透明的。你的黑客將無法正常工作http://jsfiddle.net/6ZX9W/32/另一件事紅線太長(它應該在最後一列+ margin-right:20px之後結束)。 – Sladex 2013-04-10 10:07:25

+0

邊框顏色是我放在那裏看到更好的佈局,這是一件你可以完全改變/刪除的東西。 – Smuuf 2013-04-10 10:24:54

0

而是採用李: 之前嘗試使用: -

li:nth-child(2n+1):before { 
     border-top: 1px solid #FF0000; 
     content: ""; 
     display: block; 
     left: 0; 
     position: absolute; 
     top: -10px; 
     width: 214%; /*(or 444px)*/ 
    } 
+0

我不知道有多少元素可以放入UL容器中。所以我不知道所需的寬度和第n個孩子的表情。 – Sladex 2013-04-10 10:18:28

+0

並不重要... 要麼沒有元素將是奇數或甚至...在任何情況下,你想紅線覆蓋整個UL。所以,如果你只是在奇數元素之前(對於寬度= 200%)放置紅色線條,它將覆蓋整個寬度,而不管偶數小孩是否存在或不存在。 因此您可以使用li:nth-​​child(單數) – 2013-04-10 11:41:25

0

我想,我終於得到了一點;)嘗試this

我刪除您<li>標籤的位置和刪除top:before選擇器,然後將背景更改爲1像素高度。

+0

適合純色作品。但是,如果您嘗試更改容器大小並查看不透明度將如何變化(實際上:在元素相互重疊之前)http://jsfiddle.net/3GF8R/3/而紅線太長右邊(它應該在最後一列之後結束+ margin-right:20px)。 – Sladex 2013-04-10 10:48:20

+0

是否這樣? http://jsfiddle.net/3GF8R/5/ – Arkana 2013-04-10 10:53:53

+0

在外觀上看起來是正確的(直到你試圖改變UL的寬度)。 – Sladex 2013-04-10 11:17:21