|
|
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Переделыаваю разметку страницы с table на div (под html5). Приложил архив с 2-мя файлами: tmpTable.html - это то что мне нужно получить с помощью div-ов (размечено таблицами). Страница правильно отображается только в Chrom-е. tmpDIV.html - это страница с div разметкой которая должна выглядеть так же как tmpTable.html в Chrom-е. С разметкой div-ами такая проблема: когда я ставлю высоту блока 100% - то имею ввиду 100% оставшейся высоты родителя. Т.е. пытаюсь просто заполнить всю оставшуюся высоту родительского блока. Браузеры же считают что это 100% видимой области. В результате центральный блок тянется ниже подвала и появляется прокрутка страницы. Вёрстку хочу сделать резиновой поэтому размеры центральной области не должны быть заданы в пикселях . Вопросы: 1. Как заставить div брать за 100% оставшиеся размеры родителя ,а не размеры видимой области браузера? 2. Можно ли сделать требуемую разметку без использования скрипта ? Можно попробовать найти размеры клиентской области пользователя и вычислить размеры в пикселях, но это как последний вариант. Решение должно работать в ie,ff,chrome,opera. Можно только последних версий.Старые версии браузеров не интересуют пока. Если можно сделать так что бы табличная разметка заработала во всех 4 браузерах так же как в Chrom-е - то такое решение то же подходит. Привожу сокращённый вариант файлов: Разметка таблицами <!DOCTYPE HTML> <!--<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">--> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Index</title> <style type="text/css"> * { margin: 0; padding: 0; outline: none; } html, body { margin: 0; padding: 0; height: 100%; width: 100%; } table { border-width: 1px; border-style: outset; border-color: gray; margin: 0 auto; width: 100%; height: 100%; } td { border-width: 1px; border-style: inset; border-color: gray; margin: 0; padding: 0; } div { display: inline-block; } .maxWidth { width: 100%; } .maxHeight { height: 100%; } .logo { width: 15%; height: 15%; } .paramsCell { width: 20%; background: blue; } .paramsContent { overflow: auto; position: relative; background: green; float: left; } .treeCell { width: 15%; vertical-align: top; background: blue; } .treeContent { overflow: auto; position: relative; background: red; float: left; } .contentCell { vertical-align: top; background: blue; } .content { overflow: auto; position: relative; background: yellow; float: left; } </style> </head> <body> <table> <tr> <td class="logo">logo</td> <td colspan="2">top contact</td> </tr> <tr> <td rowspan="3" class="treeCell maxHeight"> <div class="treeContent maxHeight maxWidth"> tree </br> tree </br> ........ Длинное дерево ...... </div> </td> <td>serch</td> <td rowspan="3" class="paramsCell"> <div class="paramsContent maxHeight maxWidth"> params </br> params </br> ...... Много параметров....... </div> </td> </tr> <tr> <td>site map</td> </tr> <tr> <td class="contentCell maxHeight"> <div class="content maxHeight maxWidth"> <h2>Index</h2> text text text ...... Много много текста.... </div> </td> </tr> <tr> <td colspan="3">footer</td> </tr> </table> </body> </html> Разметка div-ами <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Index</title> <style type="text/css"> * { margin: 0; outline: none; } html, body { height: 100%; width: 100%; } header, nav, section, article, aside, footer, div { display: block; position: relative; } #main { width: 100%; min-height: 100%; height: 100%; background: lightgrey; } /*1232*/ .header { background: yellow; height: 120px; overflow: hidden; } .logo { background: blue; width: 15%; height: 120px; float: left; overflow: hidden; } .contacts { background: green; width: 85%; height: 120px; float: right; overflow: hidden; } .tree { background: orange; width: 15%; height: 100%; float: left; overflow: auto; } .content { background: white; width: 100%; height: 100%; float: left; bottom: 0px; overflow: auto; /*margin-top: 36px;*/ } .params { background: blue; width: 20%; height: 100%; float: right; overflow: auto; } .footer { background: yellow; bottom: 0; width: 100%; overflow: hidden; } .dataWrap { background: lime; height: 100%; width: 100%; overflow: hidden; } .serch { background: azure; width: 100%; overflow: hidden; } .map { background: darkgrey; width: 100%; overflow: hidden; } .contentWrap { width: 65%; height: 100%; float: left; overflow: hidden; padding-bottom: 54px; } </style> </head> <body> <div id="main" class="cf"> <header class="header"> <section class="logo">logo</section> <section class="contacts">contacts</section> </header> <section class="dataWrap"> <section class="tree"> tree </br> tree </br> ........ Длинное дерево ...... </section> <section class="contentWrap"> <section class="serch">serch</section> <nav class="map">map</nav> <section class="content"> <h1>Index</h1> text text text ...... </section> </section> <section class="params"> params </br> params </br> ...... Много параметров....... </section> </section> <footer class="footer">foot </footer> </div> </body> </html> Заранее спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2013, 15:26 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
S_A_V_e , нет такого понятия как "100% оставшейся высоты"... Есть только размеры родителя, по ним все и определяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2013, 15:30 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
S_A_V_eРазметка таблицами ... Даже это у тебя фуфлыжное... Не помещается на экране, появляется скрол... Если нужно сделать: - объявляй цену - описывай точно что нужно Глядишь и желающие найдутся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2013, 15:35 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
S_A_V_e , как вариант - воспользуйся этим конструктором ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2013, 15:37 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
S_A_V_e , тут есть описание некоторых приемов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2013, 15:40 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
krvsaкак вариант - воспользуйся этим конструктором... Конструктор этот я пробовал. Он не делает то что мне нужно. krvsaнет такого понятия как "100% оставшейся высоты"... Я знаю что нет такого понятия. Но раньше таблицы прекрасно понимали (при вложении например) что 100% - это оставшееся место в ячейке если в ней ещё что то лежит. krvsa тут есть описание некоторых приемов... За ссылочку спасибо. Действительно полезная информация. Накопал height: calc(...). С его помощью сделал шаблон как мне нужно в ie,ff,chrome. Но вот opera пока не поддерживает... Придётся придумывать что то ещё. css ..... .dataWrap { background: lime; height: calc(100% - 140px); width: 100%; overflow: hidden; } ..... .contentWrap { width: 65%; height: calc(100% - 36px); float: left; overflow: hidden; padding-bottom: 54px; } .... krvsaДаже это у тебя фуфлыжное... Я не силён в разметке. Ничего сложного на html делать не приходилось. До ума её довести не получилось. Поэтому и оговорил специально , что смотреть нужно только в хроме. Это только макет того что мне нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2013, 23:15 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
S_A_V_eНо раньше таблицы прекрасно понимали (при вложении например) что 100% - это оставшееся место в ячейке если в ней ещё что то лежит. Поверь, с тех пор они хуже не стали... S_A_V_eНакопал height: calc(...). ППЦ! S_A_V_eЯ не силён в разметке. Значит самое время начать качаться. Или готовить деньги... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 08:40 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
krvsaS_A_V_eНакопал height: calc(...). ППЦ! Вы хотите сказать это основы основ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 13:47 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
Вот теперь без всяких calc(...) и лишних обёрток. Работает во всех браузерах. Для тех кто столкнётся с теми же проблемами... Коротко решение такое: ставить блокам position:absolute/fixed и использовать не height width в размерах блоков, а управлять размерами с помощью top,left,right,bottom. сокращённый пример <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Index</title> <style type="text/css"> * { margin: 0; outline: none; } html, body { height: 100%; width: 100%; } header, nav, section, article, aside, footer, div { display: block; position: relative; } #main { width: 100%; min-height: 100%; height: 100%; background: lightgrey; } /*1232*/ .header { background: yellow; height: 120px; overflow: hidden; } .logo { background: blue; position: absolute; left: 0px; right: 85%; height: 120px; float: left; overflow: hidden; } .contacts { background: green; position: absolute; left: 15%; right: 0px; height: 120px; float: right; overflow: hidden; } .tree { background: orange; position: absolute; top: 120px; left: 0px; right: 85%; bottom: 18px; float: left; overflow: auto; } .content { background: white; position: absolute; top: 156px; left: 15%; right: 20%; bottom: 18px; float: left; overflow: auto; } .params { background: blue; position: absolute; top: 120px; left: 80%; right: 0px; bottom: 18px; float: right; overflow: auto; } .footer { background: yellow; position: fixed; left: 0px; right: 0px; bottom: 0; overflow: hidden; } .serch { background: azure; position: absolute; left: 15%; right: 20%; float: left; overflow: hidden; } .map { background: darkgrey; position: absolute; top: 138px; left: 15%; right: 20%; float: left; overflow: hidden; } </style> </head> <body> <div id="main"> <header class="header"> <section class="logo">logo</section> <section class="contacts">contacts</section> </header> <section class="tree"> tree </br> tree </br> tree </br> tree </br> ........ tree </br> end </section> <section class="serch">serch</section> <nav class="map">map</nav> <section class="content"> <h1>Index</h1> text text text .... end </section> <section class="params"> params <br /> params <br /> params </br> params </br> params </br> params </br> .......... params </br> end </section> <footer class="footer">foot </footer> </div> </body> </html> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 13:52 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
S_A_V_eуправлять размерами с помощью top,left,right,bottom. Ну зачем использовать свойства не по назначению? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 14:54 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
GustlyВы хотите сказать это основы основ? Я хочу сказать, что ты не туда роешь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 16:17 |
|
||
|
div 100% высоты родителя
|
|||
|---|---|---|---|
|
#18+
GustlyНу зачем использовать свойства не по назначению? У меня не получилось разметить страницу используя height width (без использования calc()). Как то нелогично (с моей конечно точки зрения) ведут себя элементы при задании высоты/ширины. left,right,... гораздо надёжнее работают во всех браузерах. Я не утверждаю что надо только так, просто такой вариант разметки оказался наиболее предсказуемым и работоспособным. Предложите другой вариант. Может я что то и не докопал в этой теме... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 16:20 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=38373471&tid=1447978]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 543ms |

| 0 / 0 |
