2016-08-25 4 views
0

В следующем коде, в #content правила, overflow:hidden делает некоторые магии для автоматической настройки width для div. Я попытался вручную установить ширину до определенного значения, например, 10000px в #content, но ширина не работает. Ширина определяется, если я использую overflow:hidden|scroll|auto.Почему переполнение: скрытое влияние ширины

Мне просто интересно, почему overflow:hidden делает магию?

Я изучил возможность того, что overflow:hidden может начать BFC. Но display:flex имеет тот же эффект от BFC.

Чтобы быть более конкретным, моя первоначальная попытка состояла в том, чтобы оставить весь текст в #content ellipsis line by line. И я обнаружил, что установка width в #content делает работу правильно. Но я случайно обнаружил, что могу сделать то же самое 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

Ваши идентификаторы являются вводящими в заблуждение. #floated элемент вообще не плавает; он и #content являются гибкими элементами, а элементы гибкости не могут плавать. Это, я подозреваю, не имеет ничего общего с установлением (или отсутствием) BFC. – BoltClock

+0

Да, имя тега ID вводит в заблуждение, и оно не имеет отношения к теме. Я изменю его – Nemo

+0

Сказав это, flex items * do * всегда устанавливает контексты форматирования для своего содержимого. Тем не менее я не уверен, что это проблема, поскольку они устанавливают их независимо от значения переполнения, хотя изменение значения переполнения оказывает неблагоприятное воздействие на ваш макет. Я позволю кому-то, более знакомому с гибким макетом, объяснить. – 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

вы можете удалить overflow:hidden в #content, и эффект совершенно другой. Это ссылка jsFiddle [link] (http://jsfiddle.net/9b6bdbt9/1/) – Nemo

+0

Только что обновил ее для вас, чтобы проверить – Option

+0

Я все еще смущен. Вы оставили переполнение: скрыто в #content. Я хочу знать, почему он разрешает ширину до вычисленного значения, которое я даже не могу изменить. – Nemo

Смежные вопросы