HTML/CSS: Почему тело не простирается к его содержанию?

Возьмите этот тривиальный пример и откройте его:

<html>
    <body style="background-image:url(http://upload.wikimedia.org/wikipedia/commons/2/21/Mandel_zoom_00_mandelbrot_set.jpg);background-repeat: no-repeat; background-position: top center;">
        <div style="width: 8000px; border: 3px solid red;">Demo</div>
    </body>
</html>

Страница сделана так, чтобы тело имело центрируемое вершиной фоновое изображение и содержание элемента, который переполняет границ окна, таким образом, существует горизонтальная прокрутка (если у Вас есть монитор шире, чем 8000 пкс затем, Вы действительно спокойны, сделайте окно меньшим и обновление).

Проблема - это по некоторым причинам <body> не простирается для содержания <div>. Это просто остается та же ширина как область просмотра и <div> переполнение это. Это в свою очередь заставляет фон центрироваться в неправильном месте и обрезках это к размеру области просмотра. Довольно ужасный, когда Вы прокручиваете направо.

Я уже нашел решение этой проблемы, но я задаюсь вопросом, ПОЧЕМУ это так? Это, кажется, последовательно через браузеры также. Но по-моему это - довольно парадоксальная и в основном простая несправедливость. Контейнерный элемент должен быть достаточно большим для содержания, это - дети - если они абсолютно не расположены, конечно, в этом случае, они не участвуют в вычислениях макетов.

5
задан Vilx- 29 January 2010 в 10:57
поделиться

2 ответа

Блоки просто не растягиваются горизонтально, чтобы разместить их дочернее содержание; Никогда не имею. (1) Это то, что происходит только в вертикальной оси. (2) логически, оба размера не могут быть растягиваться; Нужно быть исправлен (RT родитель). В CSS ширина блочного элемента в обычном потоке получена исключительно от родителя (минус проб, поля, границы), а затем высота следует от этого, увидев, сколько содержимого вы можете вписываться в ширину блока и текущим Отказ

Фоновое изображение может появиться в запутанном месте, которое вводит в заблуждение к тому, что на самом деле происходит из-за этой quirk CSS:

для документов, корневой элемент которых представляет собой элемент HTML «HTML» или XHTML «HTML» элемент, который вычислял значения «прозрачного» для «фона-цвета» и «нет» для «фонового изображения», пользовательские агенты должны вместо этого использовать вычисленное значение фоновых свойств из первого HTML «тело» этого элемента « Элемент или XHTML «тело» элемент ребенка при покраске фона для холста, а также не должны рисовать фона для этого дочернего элемента. Такие фоны также должны быть закреплены в том же точке, поскольку они были бы, если бы они были окрашены только для корневого элемента.

Это зрелый взлом, поставленный на место, потому что люди использовались для положения фонов на «тело» и наполнив его просмотра, даже если сам сам элемент не представляет просмотр.

(1), за исключением нескольких особых случаев, таких как float и , а положение: абсолют элементы без объявленного ширина .

(2) Если вы не остановите это, устанавливая Высота / Переполнение .

8
ответ дан 14 December 2019 в 01:07
поделиться

Имеется API, доступный по адресу http://lts.online.fr/dev/java/math.evaluator/

Пример:

MathEvaluator m = new MathEvaluator("-5-6/(-2) + sqr(15+x)");
m.addVariable("x", 15.1d);
System.out.println( m.getValue() );
-121--3064180-

EH, как правило, является хорошим. Но реализация C++ не очень дружелюбна, так как на самом деле трудно сказать, насколько хорошо ваше исключение, улавливающее покрытие. Например, Java делает это простым, компилятор будет иметь тенденцию к сбою, если вы не обрабатываете возможные исключения.

-121--542140-

Исключением для разворачивания является видовой экран. Ничто не расширяет видовой экран, если только его прямое или прикрепленное содержимое не требует его - это включает элементы div и table (например, дисплей: table-cell on body), - но не блочный контейнер.

1
ответ дан 14 December 2019 в 01:07
поделиться