Я ищу способ создания CSS-only (без JavaScript) макета с 5 регионами, которые выглядят следующим образом:
┌────────────────────┐
│ H │
├────┬────────┬──────┤
│ │ │ │
│ │ │ │
│ │ │ │
│ A │ B │ C │
│ │ │ │
│ │ │ │
│ │ │ │
├────┴────────┴──────┤
│ F │
└────────────────────┘
(Вышеприведенная диаграмма будет отображаться правильно, только если ваш шрифт имеет символы рисования строки в Юникоде.)
Макет должен полностью заполнить доступное пространство в веб-браузере (как по высоте, так и по ширине). A, B, C должны иметь одинаковую высоту; и H и F должны иметь одинаковую ширину. I.e, не должно быть пробелов между регионами, за исключением фиксированного запаса. Элементы внутри региона должны знать размер своих родителей; это означает, что если я поставлю
<textarea style="width:100%;height:100%">Just a test</textarea>
внутри области, она будет распространяться на всю ширину и высоту области. В правой части окна браузера не должно быть полосы прокрутки (поскольку высоты H, C и F точно совпадают с высотой клиентской области браузера).
Это очень легко сделать, если вы используете <table>
для создания макета. Но я продолжаю читать, что использование таблиц для форматирования - это плохо, а CSS - путь.
Мне известно, что есть рабочие группы W3C, которые работают над расширением стандарта CSS с помощью функций, которые сделали бы эту схему очень простой в реализации. Эти стандартные расширения, однако, в настоящее время не реализованы большинством браузеров; и мне нужно решение, которое работает с текущими браузерами.
Я просматривал множество веб-страниц, содержащих типовые макеты CSS, но ни один из них не может делать то, что я описал выше. Большинство этих макетов либо не являются полноразмерными, либо столбцы имеют разную высоту, либо они требуют JavaScript.
Поэтому мой вопрос: возможно ли создать вышеприведенный макет, используя только CSS (без JavaScript, без подделок, no <table>
)? Разумеется, решение должно работать с текущими веб-браузерами.
РЕДАКТИРОВАТЬ: На основе решения, предоставленного Gilsham, мне удалось написать образец страницы, которая генерирует желаемый макет только для CSS (тестируется с Firefox 3.5.5 и IE8):
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
html,body{
height:100%;
margin:0;
padding:0;
border:0;
}
div{
margin:0;
border:0;
}
textarea {
margin:0;
border:0;
padding:0;
height:100%;
width:100%;
}
.content{
display:table;
width:100%;
border-collapse:separate;
height:80%;
}
.Col{
display:table-cell;
width:30%;
height:100%;
}
#header,#footer{
height:10%;
position:relative;
z-index:1;
}
</style>
</head>
<body>
<div id="header"><textarea style="background-color:orange;">H Just a test</textarea></div>
<div class="content">
<div id="left" class="Col"><textarea style="background-color:lightskyblue;">A Just a test</textarea></div>
<div id="center" class="Col"><textarea style="background-color:green;">B Just a test</textarea></div>
<div id="right" class="Col"><textarea style="background-color:lime;">C Just a test</textarea></div>
</div>
<div id="footer"><textarea style="background-color:yellow;">F Just a test</textarea></div>
</body>
</html>
Один из недостатков заключается в том, что div должны быть указаны в определенном порядке, что плохо для поисковой оптимизации и для чтения с экрана; это, однако, не важно для предполагаемого веб-приложения.
/Фрэнк