2013-03-22 3 views
0

Я пытаюсь установить размер шрифта, семью и длину строки на div. Затем мне нужно знать правильную высоту div для некоторых макетов. Тем не менее, высота, которую я получаю, ошибочна, и полоса прокрутки появляется у родителя div, по той же причине. Следующий jsfiddle лучше всего иллюстрирует мою проблему: http://jsfiddle.net/JYkAX/19/Неверная высота, когда заданы размер шрифта, семья и высота строки

Вот HTML-код:

<div class="separator"> 
    <div class="PleaseNoScrollBar"> 
     Some Text Here 
    </div> 
</div> 

Вот CSS:

.separator 
{ 
    background: gray; 
    display: block; 
    overflow: auto; 
} 

.PleaseNoScrollBar 
{ 
    font-family: cursive; 
    background: lightgray; 
    line-height: 32px; 
    font-size: 32px; 
    display: block; 
    opacity: 0.5; 
    vertical-align: top; 
} 

Следующая JQuery получает внешнюю высоту DIV (но его неправильный).

alert($(".PleaseNoScrollBar").outerHeight()); 

Любые идеи о том, что вызывает это? К сожалению, мне нужно иметь возможность получить фактическую внешнюю высоту div, я не могу просто увеличить родительский div.

Следует отметить, что полоса прокрутки отображается только в Chrome и IE. В firefox div прокручивается, перетаскивая мышь, но не отображается полоса прокрутки.

+0

Можете ли вы уточнить, что вы на самом деле ожидаете? Я посмотрел на jsFiddle, который вы предоставили, и оповещение JS всплывает «32», и это именно то, что вы указали. – Steve

+0

работает для меня, оповещения '32' – chriz

+0

Конечно. Родительский («.сепаратор») - 32px. Ребенок ('.PleaseNoScrollBar ') на самом деле больше 32 пикселей, о чем свидетельствует тот факт, что он выполняет родительский свиток. – pulekies

ответ

0

Извлечь декларацию overflow:auto из контейнера div.

.separator 
{ 
    background: gray; 
    display: block; 
    overflow: auto; 
} 

от w3c спецификации ...

переполнение: авто Поведения значения «Авто» является агентом пользователя-зависимым, но должен вызывать механизм прокрутки, чтобы быть предусмотрен переполненный коробки.

Источник: http://www.w3.org/TR/CSS21/visufx.html#overflow

это означает, что люди, которые закодированы браузер определяют, как overflow:auto работы. Если вы установите высоту . separator div на 34px, полоса прокрутки исчезнет.

Я бы порекомендовал удалить overflow:auto с .separator div.

Проверьте это: http://jsfiddle.net/JYkAX/26/

Если высота контейнера DIV установлен на что-нибудь менее чем на два пикселя больше, чем высота дочерних элементов, то полоса прокрутки показывает вверх. Я предполагаю, что браузер добавляет границу 1px, которая добавляется как вверху, так и внизу, когда объявляется «overfow auto».

+0

Это избавит вас от полосы прокрутки. К сожалению, мне также нужна фактическая высота div .PleaseNoScrollBar. – pulekies

+0

Мне нужно знать, почему полоса прокрутки появляется на родительском устройстве в первую очередь, так как это должно быть определение размера для размещения ребенка. – pulekies

+0

см. Мои изменения, я не нашел ресурс о том, как браузеры вычисляют высоты переполнения. – superUntitled

1

Вы просматриваете полосу прокрутки, потому что вы устанавливаете overflow:auto; на .separator. Просто удалите его, и у вас больше не будет полос прокрутки.

Что касается высоты, функция предупреждения извлекает «32», что, я думаю, правильная высота div.

+0

«Переполнение: авто» должно показывать только полосу прокрутки, если ее дочерний объект больше. Поскольку я не задал размер на «.сепараторе», он не должен прокручиваться. – pulekies

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