2013-10-04 182 views
0

在這jsfiddle,我試圖創建一個書籤形狀。只有一個三角形需要改變它的位置。如何更改內容流?

<div id = "bookmark"> 
    <div id = "rectangle"></div> 
    <div id = "triangle-topleft"></div> 
    <div id = "triangle-topright"></div> 
</div> 

我可以很容易地使用相對定位和移動它,但我不想這樣做。我想要一個更有延展性的解決方案。

而不是形狀從上到下流動。我想讓最後一個形狀從左到右流動。所以有三種形狀,前兩種形狀是完美的,但第三種形狀需要放在第二種形狀的右側,而不是在第二種形狀的下面。

我可以用什麼CSS來做到這一點?

+0

我明確地設置默認位置作爲首選項。 –

+0

http://jsfiddle.net/nfxYE/3/ - 這是他最簡單的解決方案。 –

回答

1

您可以將float: left添加到#triangle-topleftmargin-left: 100px#triangle-topright

要刪除不必要的標記,你也可以使用:before:after僞元素,而不是#triangle-*

+0

不確定,誰先回答,你還是先生,但這是最簡單的解決方案。 –

4

首先你不必申報position: static;,因爲它是在默認情況下已經靜態的(除非你使用responsive design,你需要重新在分辨率下的某點的屬性值),其次,分配position: relative;#bookmark和使第二個三角形position: absolute;

Demo

#bookmark{ 
    width: 200px; 
    position: relative; 
} 
#rectangle { 
    width: 200px; 
    height: 300px; 
    background: black; 
} 
#triangle-topleft { 
    width: 0; 
    height: 0; 
    border-top: 100px solid black; 
    border-right: 100px solid transparent; 
} 

#triangle-topright { 
    position: absolute; 
    right: 0; 
    width: 0; 
    height: 0; 
    border-top: 100px solid black; 
    border-left: 100px solid transparent; 
    bottom: 0; 
} 

注意:請務必不要讓你的第一個三角形position: absolute;否則您需要重新定位三角形。但這是最好的方法,因爲您已將absolute包裝在relative容器內。


您也可以看看這個真棒事情 - Font Awesome - Bookmark,你可以調整這個給你想要的任何大小。


你想的東西可以通過使用:beforecontent財產一起:after僞來達到的。所以你可以擺脫多餘的三角形元素。


正如我所說的,你可以用一個元素來創建這個東西。

#bookmark{ 
    width: 200px; 
    position: relative; 
    height: 300px; 
    background: black; 
} 

#bookmark:before { 
    width: 0; 
    height: 0; 
    border-top: 100px solid black; 
    border-right: 100px solid transparent; 
    display: block; 
    content: ""; 
    position: absolute; 
    bottom: -100px; 
} 

#bookmark:after { 
    position: absolute; 
    right: 0; 
    width: 0; 
    height: 0; 
    border-top: 100px solid black; 
    border-left: 100px solid transparent; 
    bottom: -100px; 
    display: block; 
    content: ""; 
} 

在這裏,我使用:before:after僞,用display: block;content: "";這是必不可少的,讓這件事的工作,也是我的定位都採用absolute設置爲-100

Demo值的元素(使用單個元素)

注意::before:after僞可以失敗舊版本的IE, 但您可以隨時使用polyfills使用CSS 3屬性,另外,對於 有關瀏覽器支持的更多信息,可以查看this了。

+0

@ nativist.bill.cutting很顯然,因爲我已經使用這些屬性定位了元素,所以我也編輯了我的答案,您可以看到我共享的最後一個演示,我剛剛添加了這個。 –

5

添加float:left;#triangle-topleftmargin-left:100px;#triangle-topright

#triangle-topleft { 
    position: static; 
    width: 0; 
    height: 0; 
    border-top: 100px solid black; 
    border-right: 100px solid transparent; 
    float:left; 
} 
#triangle-topright { 
    position: relative; 
    width: 0; 
    height: 0; 
    border-top: 100px solid black; 
    border-left: 100px solid transparent; 
    margin-left:100px; 
} 

jsFiddle example

1

添加顯示:內聯塊到兩個三角形狀。他們正在堆疊,因爲他們默認顯示:block。

+1

在這種情況下,您需要刪除兩個三角形之間的空格 –

+1

[Nice,but not perfect。](http://jsfiddle.net/3ym7x/) – totymedli

+0

想要獲得更多'這裏是如何水平安排'而不是'這裏,複製並粘貼這個'。 ;-) – RhinoWalrus

1

僅需將#float:left添加到#triangle-topleft和#triangle-topright就足夠了。

看到提琴:http://jsfiddle.net/nfxYE/

+0

不確定,誰先回答,您還是instanceofme,但這是最簡單的解決方案。 –