CSS: игнорирование атрибутов div с одним блоком внутри
От: annihilator  
Дата: 10.09.08 10:11
Оценка:
Необходимо получить заголовок фиксированной высоты.

Пробовал только на FF 3, кажется, в FF 2 так же.
Демонстрационный код:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
    <title>title</title>
    <style type="text/css">
        #heading {
            height: 100px;
            /* border: 1px solid gray; */
        }
    </style>
</head>

<body>
    <div id="heading">
        <h1>heading 1</h1>
    </div>

    <h2>heading 2</h2>
</body>

</html>


В таком случае высота div-а будет -- 100 px плюс margin внутреннего h1.
Это плохо. И считаю, что неправильно.

Если внутрь div-а поместить еще какой-то span или раскомментировать
строку border в стилях, то все стает на свои места -- div ровно 100 px.

Почему так происходит? Если это баг, то как лучше с ним бороться?

h1 { height: 100px; margin/padding: ... } по подходит,
так как отступы я задаю в относительных едиицах.
css
Re: CSS: игнорирование атрибутов div с одним блоком внутри
От: dimgel Россия https://github.com/dimgel
Дата: 10.09.08 12:05
Оценка: 4 (1)
Здравствуйте, annihilator, Вы писали:

A>h1 { height: 100px; margin/padding: ... } по подходит,

A>так как отступы я задаю в относительных едиицах.

Процитированного не понял, но в общем и не важно. Попробовал, помогло добавление стиля "overflow: hidden;" к #heading.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: CSS: игнорирование атрибутов div с одним блоком внутри
От: Mamut Швеция http://dmitriid.com
Дата: 10.09.08 12:06
Оценка:
A>В таком случае высота div-а будет -- 100 px плюс margin внутреннего h1.
A>Это плохо. И считаю, что неправильно.

#heading h1 {margin: 0};

A>h1 { height: 100px; margin/padding: ... } по подходит,

A>так как отступы я задаю в относительных едиицах.

Почему не подходит? id/class для h1 никто не отменял. Можно сделать и

h1.heading {все, что мне нужно}


dmitriid.comGitHubLinkedIn
Re[2]: CSS: игнорирование атрибутов div с одним блоком внутр
От: annihilator  
Дата: 10.09.08 12:36
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Здравствуйте, annihilator, Вы писали:


A>>h1 { height: 100px; margin/padding: ... } по подходит,

A>>так как отступы я задаю в относительных едиицах.

D>Процитированного не понял, но в общем и не важно. Попробовал, помогло добавление стиля "overflow: hidden;" к #heading.


Я о том, что можно было бы не обворачивать h1 в div теоретически.
Но не в моем случае.

Что я реально хочу получить, это жестко фиксированную высоту заголовка.
Можно написать h1 { height: 100px }, но тогда я не могу делать для него
margin/padding: 1em, так как это уже не 100px выйдет.

Потому я обрамил в div, ему задал высоту, а заголовку нужный margin.
И оно делает высоту -- поле плюс заданное значение высоты. А если
добавить рамку (border), то уже считает нормально (: Бред.

А overflow: hidden -- да, такой workaround работает и, кажется,
меня устраивает. Спасибо.

Но хотелось бы понять, чья вина: моя или браузера?
Re[2]: CSS: игнорирование атрибутов div с одним блоком внутр
От: annihilator  
Дата: 10.09.08 12:39
Оценка:
Здравствуйте, Mamut, Вы писали:

A>>В таком случае высота div-а будет -- 100 px плюс margin внутреннего h1.

A>>Это плохо. И считаю, что неправильно.

M>#heading h1 {margin: 0};


Для h1 мне margin то как раз и нужен (: Просто не приводил его явно в стилях,
опираясь на значение по-умолчанию.

A>>h1 { height: 100px; margin/padding: ... } по подходит,

A>>так как отступы я задаю в относительных едиицах.

M>Почему не подходит? id/class для h1 никто не отменял. Можно сделать и


M>h1.heading {все, что мне нужно}


Я попытался объяснить это в предыдущем ответе
Автор: annihilator
Дата: 10.09.08
.
Re[3]: CSS: игнорирование атрибутов div с одним блоком внутр
От: Mamut Швеция http://dmitriid.com
Дата: 10.09.08 13:36
Оценка:
A>>>В таком случае высота div-а будет -- 100 px плюс margin внутреннего h1.
A>>>Это плохо. И считаю, что неправильно.

M>>#heading h1 {margin: 0};


A>Для h1 мне margin то как раз и нужен (: Просто не приводил его явно в стилях,

A>опираясь на значение по-умолчанию.

Нужен для всех h1 или для h1 внутри дива можно пренебречь? Если второе, то я привел CSS-правило для этого. Можно сдлеть margin для дива


A>>>h1 { height: 100px; margin/padding: ... } по подходит,

A>>>так как отступы я задаю в относительных едиицах.

M>>Почему не подходит? id/class для h1 никто не отменял. Можно сделать и

M>>h1.heading {все, что мне нужно}
A>Я попытался объяснить это в предыдущем ответе
Автор: annihilator
Дата: 10.09.08
.


Я там ничего не понял


dmitriid.comGitHubLinkedIn
Re[3]: CSS: игнорирование атрибутов div с одним блоком внутр
От: dimgel Россия https://github.com/dimgel
Дата: 10.09.08 13:44
Оценка:
Здравствуйте, annihilator, Вы писали:

A>Но хотелось бы понять, чья вина: моя или браузера?


Тайна, покрытая мраком... Таблицы рулят.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: CSS: игнорирование атрибутов div с одним блоком внутр
От: annihilator  
Дата: 10.09.08 13:48
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Нужен для всех h1 или для h1 внутри дива можно пренебречь? Если второе, то я привел CSS-правило для этого. Можно сдлеть margin для дива


Селекторы я отлично знаю, они здесь непричем (:


A>>Я попытался объяснить это в предыдущем ответе
Автор: annihilator
Дата: 10.09.08
.


M>Я там ничего не понял


(: ай.

Как-то вот так... (=

+--------------------------+  -\
| div      ^               |   |
|          |               |   |
|          v               |   |
|    +---------------------+    > height: 100px;
|<-->| h1                  |   |
|    +---------------------+   |
|                          |   |
+--------------------------+  -/


Стрелки внутри -- это отступы.
Re: CSS: игнорирование атрибутов div с одним блоком внутри
От: c-smile Канада http://terrainformatica.com
Дата: 10.09.08 16:37
Оценка: 7 (2)
Здравствуйте, annihilator, Вы писали:

A>Необходимо получить заголовок фиксированной высоты.


A>В таком случае высота div-а будет -- 100 px плюс margin внутреннего h1.

A>Это плохо. И считаю, что неправильно.

A>Если внутрь div-а поместить еще какой-то span или раскомментировать

A>строку border в стилях, то все стает на свои места -- div ровно 100 px.

A>Почему так происходит? Если это баг, то как лучше с ним бороться?


Это называется margin collapsing http://www.w3.org/TR/CSS21/box.html#collapsing-margins

collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or more boxes (which may be next to one another or nested) combine to form a single margin.


Я выделил то что относится к твоему случаю ("или раскомментировать строку border в стилях....")
Re[2]: CSS: игнорирование атрибутов div с одним блоком внутр
От: annihilator  
Дата: 10.09.08 18:07
Оценка:
Здравствуйте, c-smile, Вы писали:

A>>Почему так происходит? Если это баг, то как лучше с ним бороться?


CS>Это называется margin collapsing http://www.w3.org/TR/CSS21/box.html#collapsing-margins


CS>

CS>collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or more boxes (which may be next to one another or nested) combine to form a single margin.


CS>Я выделил то что относится к твоему случаю ("или раскомментировать строку border в стилях....")


Круто! Спасибо большое за proof link (;
Вариант "борьбы" с этой штукой для моего случая предложенный dimgel-ем -- хороший?
Re[2]: CSS: игнорирование атрибутов div с одним блоком внутр
От: dimgel Россия https://github.com/dimgel
Дата: 11.09.08 03:50
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>

CS>collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or more boxes (which may be next to one another or nested) combine to form a single margin.


А можешь разжевать, как это работает в случае топикстартера? У него ж получается наоборот — суммарная высота увеличивается, а не уменьшается. Да и где там margin во внешнем div?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: CSS: игнорирование атрибутов div с одним блоком внутр
От: annihilator  
Дата: 11.09.08 04:34
Оценка:
CS>>

CS>>collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or more boxes (which may be next to one another or nested) combine to form a single margin.


D>А можешь разжевать, как это работает в случае топикстартера? У него ж получается наоборот — суммарная высота увеличивается, а не уменьшается. Да и где там margin во внешнем div?


Я особо не вчитывался пока, но думаю, что объяснение проиллюстрированно вот здесь:
8.2 Example of margins, padding, and borders.
Там немного другой пример, но есть "формула" (: -- collapsed margin is max(12px, 12px) = 12px.
Re[4]: CSS: игнорирование атрибутов div с одним блоком внутр
От: dimgel Россия https://github.com/dimgel
Дата: 11.09.08 04:47
Оценка:
Здравствуйте, annihilator, Вы писали:

A>Я особо не вчитывался пока, но думаю, что объяснение проиллюстрированно вот здесь:

A>8.2 Example of margins, padding, and borders.
A>Там немного другой пример, но есть "формула" (: -- collapsed margin is max(12px, 12px) = 12px.

Не вижу, как это относится к твоей проблеме с атрибутом height.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: CSS: игнорирование атрибутов div с одним блоком внутр
От: Mamut Швеция http://dmitriid.com
Дата: 11.09.08 07:26
Оценка:
M>>Нужен для всех h1 или для h1 внутри дива можно пренебречь? Если второе, то я привел CSS-правило для этого. Можно сдлеть margin для дива

A>Селекторы я отлично знаю, они здесь непричем (:


ПОчему? Мешает margin заголовка, который находится внутри дива c id="header"? Убираем margin для заголовка, который находится внутри дива c id="header".


A>>>Я попытался объяснить это в предыдущем ответе
Автор: annihilator
Дата: 10.09.08
.


M>>Я там ничего не понял


A>(: ай.


A>Как-то вот так... (=


A>
skip
A>


A>Стрелки внутри -- это отступы.


Все равно не понял Что нужно-то? Какого визуального эффекта требуется добиться?


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.