2016-08-25 76 views
0

在下面的代碼中,在#內容規則中,overflow:hidden做了一些魔術來自動調整div的width。我嘗試在#內容中手動將寬度設置爲某個值,例如10000px,但寬度不起作用。如果我使用overflow:hidden|scroll|auto,則確定寬度。爲什麼溢出:隱藏影響寬度

我只是想知道爲什麼overflow:hidden做的神奇?

我已經對overflow:hidden啓動BFC的可能性做了一些研究。但display:flex具有BFC的相同效果。

更具體地說,我最初的嘗試是讓#content中的所有文字一行一行省略號。我發現在中設置width#內容可以正常工作。但我意外地發現,我可以通過overflow:hidden來做同樣的事情,而不需要設置寬度。那麼,爲什麼這項工作?

#container { 
 
    padding: 12px; 
 
    display: flex; 
 
} 
 

 
#leftblock { 
 
    width: 100px; 
 
    height: 100px; 
 
    background-color: #ccc; 
 
} 
 

 
#content { 
 
    margin-left: 10px; 
 
    display: flex; 
 
    flex-direction: column; 
 
    flex: 1; 
 
    overflow: hidden; 
 
} 
 

 
p { 
 
    text-overflow: ellipsis; 
 
    white-space: nowrap; 
 
    overflow: hidden; 
 
    margin: 8px 0; 
 
}
<div id="container"> 
 
    <div id="leftblock"></div> 
 
    <div id="content"> 
 
    <p><b>This div will take the rest of the available width, and the <code>overflow:hidden;</code> makes sure this text doesn't fall below the <code>#floated</code> div.</b></p> 
 

 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce tincidunt vestibulum magna, nec rutrum lacus lobortis at. Duis convallis tincidunt neque eu viverra. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam condimentum faucibus mauris, pretium varius dui tempor tempor. Aenean in elit dolor, a pellentesque urna. Vestibulum egestas metus id massa elementum quis posuere nunc tincidunt. Curabitur dapibus dictum lacus a fermentum.</p> 
 

 
    <p>Quisque cursus gravida sem quis pretium. Cras cursus, neque sit amet bibendum ornare, nunc mi euismod ligula, ut cursus enim risus nec mi.</p> 
 
    </div> 
 
</div>

+0

您的ID有誤導性。 #floated元素根本不會浮動;它和#content是flex項目,flex項目不能浮動。我懷疑,這與建立(或不是)BFCs無關。 – BoltClock

+0

是的,ID標籤的名稱具有誤導性,與主題無關。我會改變它 – Nemo

+0

話雖如此,flex items * do *總是爲其內容建立格式化上下文。儘管改變溢出值對佈局有不利影響,但我仍然不確定這是否是問題的關鍵,因爲它們會建立它們,而不管溢出的價值如何。我會讓別人更熟悉flex佈局解釋。 – BoltClock

回答

0

完全更新:

#container { 
 
     width:500px; 
 
     padding: 12px; 
 
     display: flex; 
 
     flex-wrap: wrap; 
 
    } 
 

 
    #floated { 
 
     width: 100px; 
 
     height: 100px; 
 
     background-color: #ccc; 
 
    } 
 

 
    #content { 
 
     margin-left: 10px; 
 
     display: flex; 
 
     flex-direction: column; 
 
     flex: 1; 
 
    } 
 

 
    p { 
 
     text-overflow: ellipsis; 
 
     margin: 8px 0; 
 
    }
<div id="container"> 
 
    <div id="floated"></div> 
 
    <div id="content"> 
 
     <p><b>This div will take the rest of the available width, and the makes sure this text doesn't fall below the <code>#floated</code> div.</b></p> 
 

 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce tincidunt vestibulum magna, nec rutrum lacus lobortis at. Duis convallis tincidunt neque eu viverra. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam condimentum faucibus mauris, pretium varius dui tempor tempor. Aenean in elit dolor, a pellentesque urna. Vestibulum egestas metus id massa elementum quis posuere nunc tincidunt. Curabitur dapibus dictum lacus a fermentum.</p> 
 

 
     <p>Quisque cursus gravida sem quis pretium. Cras cursus, neque sit amet bibendum ornare, nunc mi euismod ligula, ut cursus enim risus nec mi.</p> 
 
    </div> 
 
</div>

更新:您確定通過.container的寬度,因爲flex:1;會佔用即容器內留下的空間。我縮小了容器以展示給你。

+0

您可以在#content中刪除overflow:hidden,效果完全不同。這是jsFiddle鏈接[鏈接](http://jsfiddle.net/9b6bdbt9/1/) – Nemo

+0

剛剛更新它爲你檢查 – Option

+0

我仍然困惑。您離開了溢出:隱藏在#內容中。我想知道爲什麼它將寬度解析爲一個我甚至無法更改的計算值 – Nemo

相關問題