2016-12-22 30 views
0

我正在嘗試創建一個標題。我有一個帶有3個子div的父級div容器。子div 1是固定的,並將對齊到左側。子div 3是固定的,並且將對齊到右側。子div 2具有可變大小,並且適合於子1和子3之間。子2將根據瀏覽器大小(它將擴大和縮小到某一點)具有大小的變化。除了FLEXBOX之外,在網站上的單行中的兩個固定大小的物品之間放置一個可拉伸的物品還有什麼?

我希望我的標頭能夠與舊版本的IE兼容,至少可以回到I.E.版本8.我正在閱讀有關FLEXBOXes,看起來它甚至與I.E完全不兼容。 11沒有錯誤。

我正在考慮使用表格,但想知道是否有更好的方法來做到這一點...因爲我簡單地測試了表格,它並沒有按照我的要求做。我試過了,儘管我爲每個元素指定了一個寬度,但當我縮小瀏覽器時,子1和子3的大小發生了變化 - 不是我想要的。

謝謝!

+0

您應該可以將margin:0 auto添加到Child 2,Child 1和Child 3分別左右浮動。 – JDavis

+0

嗯...我會試試,謝謝! – user145190

+0

其實,我認爲這不會奏效。孩子2將嘗試成爲容器的整個寬度並將孩子3推下。 – JDavis

回答

0

好,Flexbox的是專爲提供一個CSS的方式做你的描述,所以這是一個有點像問如何找到一個正方形的面積乘以無...

了flexbox我的中間人之前解決這類問題的方法是使用JavaScript來動態調整適當的div(您的案例中的第二個孩子)。即使那樣,我真的不喜歡這個解決方案,因爲我認爲JavaScript不是佈局邏輯的好地方,但它是我能想到的最好的。

我想你可以使用一個表格,但是我認爲你會在「單元格」內的佈局中遇到古怪的限制。

+0

所以我應該創建一個不縮小或調整大小的東西,如果我想讓它與舊版本的IE兼容? – user145190

+0

我不能說你*應該*做什麼。就像我說的,我曾經想到的最好的就是JavaScript;我不喜歡它,但我確實使用它。對這個問題的評論表明,對於這個具體案例(中間是調整大小的3部分的橫向佈局)可能會通過浮動第一個和第三個部分來工作;這也值得嘗試。 –

2

我不太清楚您嘗試使用表時遇到的問題。你能解釋一下問題是什麼?

您可以嘗試使用div和CSS來創建顯示爲表格。例如,通過這種方式,您可以使用功能查詢來查看Flexbox是否可用並使用它。如果沒有,你可以使用下面的表CSS。所有這些都不需要改變HTML。

讓我知道這是否適合你!

#container{ 
 
    display: table; 
 

 
    /* use table-layout: fixed if you're 
 
    having problems with the content expanding 
 
    the fixed cells */ 
 
    /* table-layout: fixed; */ 
 

 
    width: 100%; /* or however big you need it */ 
 
} 
 

 
    #row{ 
 
    display: table-row; 
 
    } 
 

 
    #one, 
 
    #two, 
 
    #three{ 
 
     display: table-cell; 
 
    } 
 

 
    #one{ 
 
    width: 100px; 
 
    background: blue; 
 
    } 
 
    #two{ 
 
    width: auto; 
 
    background: red; 
 
    } 
 
    #three{ 
 
    width: 100px; 
 
    background: orange; 
 
    }
<div id="container"> 
 
    <div id="row"> 
 
    <div id="one">Div 1</div> 
 
    <div id="two">Div 2</div> 
 
    <div id="three">Div 3</div> 
 
    </div> 
 
</div>

+0

當我運行你的代碼時,它看起來很棒。我會再試一次,我剛剛刪除了我的桌子哈哈。 – user145190

+0

我的孩子1實際上是1個大div,裏面有更多的子div(所有固定寬度),所以當我試圖調整我的瀏覽器的大小時,它最終將我的那些子div放在下面的一行上。 – user145190

+0

你可以把你的代碼放在jsfiddle中嗎?可能是一些問題,但擁有實際的代碼會使這容易很多。例如,你是否複製我的CSS? '#row div'會導致問題,因爲它是一個鬆散的選擇器,並會選擇所有的子div。這僅僅是爲了舉例。它應該只針對3個div。 – heraldo

0

這裏是一個解決方案,但它有侷限性。您必須知道Child 3的寬度,並將您的父div放在相對位置。

https://jsfiddle.net/whatisthebigpicture/sj9xv9m6/1/

header { 
    position: relative; 
} 
div { 
    outline: 1px solid red; 
} 
.div1 { 
    width: 100px; 
    float: left; 
} 
.div2 { 
    margin-right: 100px; 
} 
.div3 { 
    width: 100px; 
    top: 0; 
    right: 0; 
    position: absolute; 
} 
2

與IE8可以考慮表,但這樣做的老辦法是用浮漂。

#wrapper { 
 
    overflow: hidden; /* Establish BFC */ 
 
} 
 
#child1 { 
 
    float: left; 
 
    width: 200px; 
 
    background: yellow; 
 
} 
 
#child3 { 
 
    float: right; 
 
    width: 150px; 
 
    background: pink; 
 
} 
 
#child2 { 
 
    overflow: hidden; /* Establish BFC */ 
 
    background: cyan; 
 
}
<div id="wrapper"> 
 
    <div id="child1">Child 1</div> 
 
    <div id="child3">Child 3</div> 
 
    <div id="child2">Child 2</div> 
 
</div>

要強制執行,你可以添加集max-width百分比,以#child1#child2加起來100%一行。

+0

嗯..這也很好。讓我試一下我的代碼,看看它是否有效。我現在正在使用float。 「建立BFC」意味着你有什麼意見? – user145190

+0

@ user145190請參閱https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context –

+0

@ user145190塊格式化上下文根不重疊浮動幷包含浮動後代。請參見[浮動div內的元素,漂浮在div之外。爲什麼呢?(http://stackoverflow.com/a/32301823/1529630) – Oriol

相關問題