2015-08-23 275 views
0

我需要你的幫助有:CSS - 100%的高度/寬度問題

  1. html, body#content有100%& & #toolbar的高度有50像素的高度,他是靜態=>我需要計算的#content高度以填充而不滾動條中的內容
  2. #content > .a必須具有的300像素和#content > .b寬度必須計算寬度以填充內容

jsfiddle.net

  1. https://jsfiddle.net/4uesapnt/2/
  2. https://jsfiddle.net/4uesapnt/2/embedded/result/

enter image description here

+0

你應該使用JavaScript。邏輯很簡單:第一個問題 - > content.height = window.height - 工具欄。高度,第二個類似的東西,(toolbar_width - total_A_buttons_width)/ number_of_B_buttons =單個按鈕的寬度 –

+0

但是,爲什麼你想讓這個佈局如此「僵化」?我不認爲有任何通過CSS的解決方案。也許你可以嘗試使用百分比來解決你的問題 –

+0

我沒有看到你在那裏提供的例子中的那段代碼,但我認爲它是由不同的邊距或填充或邊界引起的(有一些像素你必須考慮),嘗試使用outerHeight http://api.jquery.com/outerheight/,爲您的情況更加精確 –

回答

2

1)你可以使用這個CSS3 calc()功能(docs)和視臺(vhvw)(docs)。

#content { 
    height: calc(100vh-50px); /* substract #toolbar height from the entire page's height*/ 
} 

2)再次,你可以使用視窗單位和calc()功能:

#content > .a { 
    width: 300px; 
} 

#content > .b { 
    width: calc(100vw-300px); /* substract #content .a's width from the entire page's width */ 
} 

這是對的jsfiddle:https://jsfiddle.net/hL7nxs6v/1/

請注意,如果你調整窗口的大小是寬度小於300px + .b的某些合理寬度,如果沒有指定任何合適的min-width s,佈局可能會中斷。

瀏覽器支持viewport units,calc function通過Can I Use

+0

它確實有效...我可以在這裏瞭解到這個新的CSS功能? – Altaula

+0

@MarekKobida對不起,我不小心刪除了Mozilla開發者網絡文檔的鏈接。我編輯了我的答案,請嘗試與文本'文檔'的鏈接。 [MDN](https://developer.mozilla.org)是閱讀各種網絡技術的絕佳資源。 –

+0

非常感謝:-) – Altaula

0

這似乎爲我在Chrome工作。我從來沒有使用flex之前,所以我真的不知道是什麼支持是這樣的:

https://jsfiddle.net/eeesrkjr/

我給#content頂部填充,以留出空間的標題,因爲box-sizing:border-box;它doesn」強迫它超過100%的高度。然後,標題絕對定位在50px空間中。我試着在#content內部找到標題,以便不必絕對定位,但flex做了奇怪的事情。如果你更好地理解這些事物如何相互作用,也許你可以嘗試這條路線。

HTML:

<div id="toolbar" class="flex aic jcsb"> 
    <div class="a">A</div> 

    <div class="b">B</div> 

    <div class="c flex aic jcsb"> 
     <div class="b">C</div> 
     <div class="c">D</div> 
     <div class="d">E</div> 
    </div> 
</div> 

<div id="content" class="flex"> 
    <div class="a">A</div> 

    <div class="b">B</div> 
</div> 

樣式:

* { 
    box-sizing: border-box; 
} 

html, body { 
    height: 100%; 
} 

body { 
    background: #111; 
    font-family: "Helvetica Neue"; 
    font-weight: 300; 
} 

#toolbar { 
    background: linear-gradient(#333, #222); 
    border-bottom: 1px solid #000; 
    color: #bbb; 
    height: 50px; 
    padding: 0 25px; 
    width:100%; 
    position:absolute; 
    top:0px; 
} 

#toolbar > .c > div { 
    margin: 0 12.5px; 
} 

.flex { 
    display: flex; 
} 

.flex.aic { 
    align-items: center; 
} 

.flex.jcsb { 
    justify-content: space-between; 
} 

.flex.fdc { 
    flex-direction: column; 
} 

#content { 
    color: #fff; 
    height: 100%; 
    padding-top:50px; 
    box-sizing:border-box; 
} 

#content > .a { 
    background: red; 
    width: 300px; 
    float:left; 
} 

#content > .b { 
    background: blue; 
    width:100%; 
} 
+0

添加'min-width:300px; '''#content> .a',你是金。 –

+0

@PatrickAllen爲什麼'width'需要'min-width'? – ryachza

+0

如果你檢查#content div,你會發現它只有〜250px。這是因爲彈性盒不尊重寬度。 –