Заставь div вести себя как стол - PullRequest
3 голосов
/ 15 февраля 2010

Так что я действительно пытаюсь использовать исключительно div, в отличие от таблиц для разметки, но я все еще застреваю здесь и там. Сегодня у меня есть один из таких случаев.

Рассмотрим следующую разметку:

<div style="width:943px;margin:0px auto;height:auto">
    <div style="display:block;clear:both">
        <div style="float:left;display:block-inline;clear:none;background:url(tl.png);width:26px;height:25px"></div>
        <div style="float:left;display:block-inline;clear:none;background:url(t.png) repeat-x;width:865px;height:25px"></div>
        <div style="float:left;display:block-inline;clear:none;background:url(tr.png);width:26px;height:25px"></div>
    </div>
    <div style="height:auto;display:block;clear:both">
        <div style="float:left;width:26px;display:block-inline;clear:none;background:url(l.png) repeat-y;width:26px;height:100%"></div>
        <div style="padding:0 15px;height:100%;float:left;width:835px;display:block-inline;background:#FFF;clear:none;">
            <br />
            Some text heeere.
            <br />
            Some more text heeere.
        </div>
        <div style="float:left;width:26px;display:block-inline;clear:none;background:url(r.png) repeat-y;width:26px;height:100%"></div>
    </div>
    <div style="display:block;clear:both">
        <div style="float:left;display:block-inline;clear:none;background:url(bl.png);width:26px;height:25px"></div>
        <div style="float:left;display:block-inline;clear:none;background:url(b.png) repeat-x;width:865px;height:25px"></div>
        <div style="float:left;display:block-inline;clear:none;background:url(br.png);width:26px;height:25px"></div>
    </div>
</div>

Теперь вот что он делает:

alt text

Обратите внимание, что он немного превышает высоту страницы.

Вот что я хочу сделать:

alt text

Я хочу, чтобы он плавно "вписывался" в текст без указания высоты. Кажется, что проблема заключается в двух боковых делениях, которые не будут работать, если вы не укажете высоту как 100%. Может быть, есть другой / более простой способ сделать это?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 15 февраля 2010

Если данные являются табличными (то есть семантически попадают в правильные строки и столбцы, а не только визуально), вам следует использовать таблицу.

Если вы предпочитаете только макет, существует правило css, которое может помочь, но не для всех браузеров:

div.column {
   display: table-column;
}

div.cell {
  display: table-cell;
}

Предполагается, что вы присваиваете всем своим «столбцам» дивизий класс column, а вашей «ячейке» - класс cell.

Полный список параметров отображения для табличного поведения:

table   
table-caption
table-cell
table-column
table-column-group
table-footer-group
table-header-group
table-row
table-row-group
3 голосов
/ 16 февраля 2010

Если ширина будет фиксированной, почему бы не использовать одно фоновое изображение для каждой из трех «строк»:

<style type="text/css">
.container    {width:943px;}
.header       {background:url(header.png) no-repeat;}
.body         {background:url(body.png) repeat-y;}
.footer       {background:url(footer.png) repeat-none;}
</style>

<div class="container">
    <div class="header">&nbsp:</div>
    <div class="body">
        <br />
        Some text heeere.
        <br />
        Some more text heeere.
    </div>
    <div class="footer">&nbsp;</div>
</div>

Div'ы будут естественным образом складываться и расширяться до полной ширины контейнера.

2 голосов
/ 16 февраля 2010

Вы просили об этом, так что здесь идет.Это мой ручной, кросс-браузерный, совместимый со стандартами метод создания границ изображения для гибких контейнеров.

Я предположил, что размер границы изображения здесь составляет 16 пикселей, вам необходимо настроить его в соответствии с требованиями.Также для наглядности при отсутствии изображений я добавил границы.Это должно быть удалено, очевидно.

Демо .

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Borders</title>
<style>
.outer {
    position:relative;
    float: left;
    border: 1px solid blue
}
.inner {
    border: 1px solid green
}
.tl, .tm, .tr, .ml, .mr, .bl, .bm, .br {
    border: 1px solid red;
    margin: 0;
    padding: 0;
}
.tm, .bm, .tl, .tr, .bl, .br {
    height: 16px
}
.tl, .tr, .bl, .br {
    width: 16px
}
.tm, .bm {
    height: 16px;
    margin: 0 0px
}
.tm {
    background-repeat:repeat-x;
    margin: 0 16px
}
.bm {
    background-repeat:repeat-x;
    margin: 0 16px
}
.tl {
    position: absolute;
    top: 0;
    left: 0;
}
.tr {
    position: absolute;
    top: 0;
    right: 0;
}
.bl {
    position: absolute;
    left: 0;
}
.br {
    position: absolute;
    right: 0;
}
.ml {
    padding-left: 16px;
    background-repeat:repeat-y
}
.mr {
    padding-right: 16px;
    background-repeat:repeat-y;
    background-position: 100% 0
}
</style>
</head>
<body>
<div class="outer">
    <div class="tm">
        <div class="tl"></div>
        <div class="tr"></div>
    </div>
    <div class="ml">
        <div class="mr">
            <div class="inner">
                <h2>Lorem</h2>
                <p>Ipsum dolor</p>
            </div>
        </div>
    </div>
    <div class="bm" >
        <div class="bl"></div>
        <div class="br"></div>
    </div>
</div>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...