Почему элементы "встроенного блока" в переполнении div "nowrap"?

следующий код вызывает переполнение # headline #wrapper, и я не понимаю, почему это происходит.

HTML-код:

<div id="wrapper">
    <div id="logo">
        <img src="/test.png">
    </div>
    <div id="headline">
        <h1>This headline overflows its wrapping div. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #</h1>
    </div>
</div>

CSS:

#wrapper {
    background: #fea;
    white-space: nowrap;
    width: 50%;
}

#logo {
    display: inline-block;
    vertical-align: middle;
}

#logo img {
       width: 6em; 
}

#headline {
     display: inline-block;
     vertical-align: middle;
     white-space: normal;
}

пример кода:http://jsfiddle.net/XjstZ/21/ или http://tinkerbin.com/XvSAEfrK

4 ответов


как следует из названия, встроенные блоки участвуют в встроенном макете, что означает, что они действуют так же, как встроенные элементы и текст. white-space: nowrap вызывает переполнение текста в элементе, предотвращая его обертывание; то же самое происходит с встроенными блоками. Все очень просто.

тот факт, что #headline и white-space: normal не влияет на собственный макет. Элемент white-space свойство влияет на макет его содержимого, а не на себя, даже если собственный ящик элемента является встроенным уровнем.


вам нужно использовать "overflow: hidden" в элементе оболочки

#wrapper {
background: #fea;
white-space: nowrap;
width: 50%;
overflow: hidden;

}

я обновил ваш образец в jsfiddle http://jsfiddle.net/XjstZ/72/


установка ширины для элемента заголовка устраняет проблему.

#headline {
   display: inline-block;
   vertical-align: middle;
   width: 60%;
}

он реагирует, если и обертка изображения, и изображение имеют свою максимальную ширину.

#logo {
   display: inline-block;
   vertical-align: middle;
   max-width: 35%;
}

#logo img {
   width: 6em;
   max-width: 100%;
}

http://jsfiddle.net/tt1k2xmL/


этот контент обернуть из-за white-space: normal;.

на пробел свойство CSS определяет, как обрабатывается пробел внутри элемента. Чтобы заставить слова ломаться внутри себя, используйте overflow-wrap, word-break, или дефисы вместо этого. Если вы хотите ограничить это с #wrapper чем вы можете ограничить свойство overflow для div.Если вы используете white-space: nowrap; для div это очистить текст переполнения и показать div в одной строке (строке).

#wrapper {
    background: #fea;
    width: 50%;
    overflow: hidden;
}

#logo {
    display: inline-block;
    vertical-align: middle;
}

#logo img {
       width: 6em; 
}

#headline {
     display: inline-block;
     vertical-align: middle;


}