LINUX.ORG.RU

Как сделать div внутри другого div с отступами?


0

1

Всем привет!

Что должен делать вот этот код:

<html>
  <head>
    <style type="text/css">
      .c1{
        width:100px;
        height:100px;
        background-color:#ff0000;
        float:left;
        padding:0px 15px;
      }
      .c2{
        width:100%;
        height:100%;
        background-color:#00ff00;
        float:left;
        padding:0px 15px;
      }
      .c3{
        width:100%;
        height:100%;
        background-color:#0000ff;
        float:left;
      }
    </style>
  </head>
  <body>
    <div class="c1">
      <div class="c2">
        <div class="c3">
			
        </div>
      </div>		
    </div>
  </body>
</html>

Я думал он создаст див1 шириной 100 пикселей, внутрь которого положит другой див2 шириной 100-15-15=70 пикселей, внутрь которого он положит другой див3 шириной 70-15-15=40 пикселей. Черта с два! он создаст див1 шириной 145 (!) пикселей, во внутрь которого запихнет другой див2 шириной 130 пикселей, во внутрь которого запихнет див3 шириной 100 пикселей! Другими словами padding не создает отступ внутри дива, он увеличивает его размер!

Что нужно: У меня есть внешний див, ширину которого я жестко задаю, и мне нельзя чтбы он был шире. В нем мне нужно создать внутренний див, который был бы на всю ширину внешнего дива за исключением отступов слева и справа.

Как это сделать?

P. S. Не обязательно div, можно это сделать как-то по-другому? Важен внешний размер (при условии что он может изменяться - сайт резиновый) и отступы вовнутрь.
P. P. S. Браузер Opera

★★★★★

для этого всего достаточно указать размер родителя, а внутренние дивы по умолчанию с width:100%; идут. Вот тогда и нужно ОТСТУП делать: margin:0 15px; для внутренних. И это в соответствии со спецификацией, да

minakov ★★★★★
()
Ответ на: комментарий от minakov

Если резина, то родителю также можно указать margin от краёв ПА

minakov ★★★★★
()
Ответ на: комментарий от Kroz

А как отступ сделать?

padding - это поле внутри контейнера, отступ - это margin

minakov ★★★★★
()
Ответ на: комментарий от minakov

для этого всего достаточно указать размер родителя, а внутренние дивы по умолчанию с width:100%;

Не-а. Попробуй сам: возьми мой пример и закомментируй width в c2 и c3.

Kroz ★★★★★
() автор топика
Ответ на: комментарий от Kroz

Я не хочу за тебя что-то делать. Возьми, поубирай свои флоаты и паддинги, открой файрбаг и потыкай по DOM - вложенные дивы растянуты также как и родитель, если ты не испортил все своими ресетами. Сделай ОТСТУП родителя и посмотри как себя ведут детки. Потом добавь поля в деток и посмотри что ты наделал. Потом отними от размера детки сумму отступов, задай фиксированный размер и посмотри что ничего не поменялось. Затем добавь к ним же нормальные маржины и посмотри, а потом поставь фиксированный размер и потом чини все заново. Дальше тебе нужно открыть спецификацию CSS2.0 и повеселиться от сознания странной логики, которая при рассмотрении становится более понятной, но не менее странной. И вообще, сверстай таблицами, никого не слушай

minakov ★★★★★
()
Ответ на: комментарий от minakov

Я уже сделал все, что ты сказал ДО того как написал туда. А за меня делать ничего не нужно. Ты просто скажи КАК надо делать. Пока что то, что ты сказал, не соответствует действительности.

Kroz ★★★★★
() автор топика
Ответ на: комментарий от Kroz

хорошо, вот тебе два варианта, которые преспокойно у меня везде работают (даже в ie6):
для родителя - fixed width
для детей: width==width-paddingRight+paddingLeft
OR
margin:0 15px;width:inherit !important;

minakov ★★★★★
()
Ответ на: комментарий от minakov

вот тебе третий вариант:
width==width-отступ*2
margin:0 auto;

minakov ★★★★★
()
Ответ на: комментарий от minakov

> width==width-paddingRight+paddingLeft

width==width-отступ*2

Ширина родителя будет изменятся с шириной окна браузера, поэтому ширину детей нужно задавать именно в процентах. Формул и конструкций вида == в CSS нет, AFAIK. JS не предлагать.

> margin:0 15px;width:inherit !important;
Не работает. Вот полный код:

<html>
  <head>
    <style type="text/css">
      .c1{
        width:100px;
        height:100px;
        background-color:#ff0000;
        float:left;
        /*padding:0px 15px;*/
      }
      .c2{
        /*width:100%;*/
        margin:0 15px;width:inherit !important;
        height:100%;
        background-color:#00ff00;
        float:left;
        /*padding:0px 15px;*/
      }
      .c3{
        /*width:100%;*/
        margin:0 15px;width:inherit !important;
        height:100%;
        background-color:#0000ff;
        float:left;
      }
    </style>
  </head>
  <body>
    <div class="c1">
      <div class="c2">
        <div class="c3">
			
        </div>
      </div>		
    </div>
  </body>
</html>
Kroz ★★★★★
() автор топика
Ответ на: комментарий от post-factum

Так, как сказали выше — padding'ом для внутренних div'ов.

Так я и делаю padding'ом. Не работает! Точнее не корректно работает.

Kroz ★★★★★
() автор топика

Вот что выдает Опера (сорри за jpeg): http://imagestun.com/images/2011/7b9nxxm7kw.jpg
Как видно справа не хватает красной полосы справа - отступа. Кроме того, размер всей конструкции - как я описан в топике.

Kroz ★★★★★
() автор топика
Ответ на: комментарий от Kroz

Да, я чтобы показать весь ужас твоего нежелания разобраться, передал для дочек с width:inherit width родителя. Убери у второго элемента и будет тебе счастье. Причем здесь «==» вообще? Ты правда спеки не читал и даже htmlbook.ru не открывал? Тогда я сочувствую и удаляюсь, ибо дальше разговор неблагодарный - тебе оно и не надо, по видимому

minakov ★★★★★
()
Ответ на: комментарий от Kroz

в IE работает.

ie вообще уникальный браузер, и если все вышеприведенное было началом светлого рабочего пути в этой сфере, то научись верстать под него сначала. Будешь аккуратнее в дальнейшем

minakov ★★★★★
()

Не только паддинг, но и бордер входит в ширину элемента, поэтому делать надо как-то так:

.c1 { width: 100px; }
.c2 { margin: 0 15px; }
.c3 { margin: 0 15px; }

А вообще, читать до просветления Box model.

Apple-ch ★★
()
Ответ на: комментарий от Apple-ch

Apple-ch. Спасибо, добрый человек! Твой код сработал!

После детального анализа выяснилось что:
1. Использовать нужно не padding, а margin. Если использовать padding, то родитель расширяется. Таким образом width в Опере задает только размер контента не включая padding, border и margin! «Не только паддинг, но и бордер входит в ширину элемента» (C) Apple-ch работает в IE но не работает в Опере.
2. В дочках нельзя использовать width:100% , иначе они становятся шире чем надо. По умолчанию (при условии пункта 3) в Опере дочки растягиваются, при этом ширина дочки определяется как ширина content родителя минус margin дочки (а может и padding c border - не проверял), что есть меньше чем 100% если его задать явно.
3. Нельзя использовать float:left иначе, без явного указания width, дочки не растягиваются.

Kroz ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.