Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   div-header, div-content, dic-footer в ячейке таблицы (https://javascript.ru/forum/xhtml-html-css/41413-div-header-div-content-dic-footer-v-yachejjke-tablicy.html)

valyan 12.09.2013 15:55

div-header, div-content, dic-footer в ячейке таблицы
 
Здравствуйте. Никак не пойму как мне сделать - есть ячейка, в этой ячейке сделать div-header, div-content("резиновый"), div-footer. div-header и div-footer постоянной, заданной величины, div-content чтобы растягивался между ними.
Сейчас сделано так

Код:

#content_mess
{
        height: 465px;
        overflow: auto;
}
#tr_comments
{
        /*height: 45px;*/
        vertical-align:top
}
#comments
{
        resize: none;
        margin-left: 10px;
        margin-right: 10px;
       
}

<table width='100%' height='100%' id='mes_dialog' style='border-collapse: collapse;'>
<tr>
  <td style='padding-left: 20px;'><font style='color: #2878af; font-size: 21px; font-family: Segoe_light;'>family</font><br/>последнее сообщение: 23.09 в 11-23</td>
  <td align='right' valign='top' style='padding-right: 20px;'><font style='color: #2878af; font-family: Segoe_light;'>в сети</font></td>
</tr>
<tr>
  <td colspan='2'><div id='content_mess'><div class='line-1'></div></div></td>"
</tr>
<tr id='tr_comments' align='center' valign='middle' bgcolor='#E8E8E8'>"
  <td style='padding: 15px 5px 15px 10px' ><textarea id='comments' rows='1' cols='70'>Мухаха</textarea></td>" +
  <td style='padding: 15px 10px 15px 5px' ><button id='send_mess'><font style='font-family: Segoe_light;'>Отправить</font></button></td>
</tr>
</table>


Заранее спасибо!

ksa 12.09.2013 16:15

Цитата:

Сообщение от valyan
есть ячейка

Какая из этих? У тебя в пример несколько строк в таблице... :)

valyan 12.09.2013 16:51

Вложений: 1
Вот там, где выделено разными цветами. Сейчас я это делаю с помощью таблицы(см. сообщение №1), т.е. таблица в таблице.

valyan 12.09.2013 19:50

Что посоветуете?

bes 12.09.2013 22:34

Цитата:

Сообщение от valyan
Что посоветуете?

создать нормальный тестовый пример, добавить возможность запуска [html run]

valyan 12.09.2013 23:13

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title></title>
</head>

<body>
<table width="100%" height="100%" border="1">
  <tr>
    <td height="53" colspan="2">&nbsp;</td>
  </tr>
  <tr>
    <td width="23%">&nbsp;</td>
    <td width="77%"><div id="header">
      <div id="content" style=" border: 1px solid black;">Здесь располагается содержимое div c  id "header"</div>
    </div>
    <div id="content" style=" border: 1px solid green;">Здесь располагается содержимое  div c  id "content"</div>
    <div id="footer" style=" border: 1px solid red;">Здесь располагается содержимое  div c  id "footer"</div></td>
  </tr>
</table>

</body>
</html>


Только div c id "header" должен быть вверху ячейки, div c id "footer" внизу ячейки, div c id "content" - растягиваться между ними.

bes 12.09.2013 23:24

Цитата:

Сообщение от valyan
<div id="content" style=" border: 1px solid black;">Здесь располагается содержимое div c  id "header"</div>
    </div>
    <div id="content" style=" border: 1px solid green;">Здесь располагается содержимое  div c  id "content"</div>

Цитата:

Сообщение от valyan
Только div c id "header" должен быть вверху ячейки, div c id "footer" внизу ячейки, div c id "content" - растягиваться между ними.

а чё сам не добавил? к чему два id="content"?

как растягиваться, он и так у тебя растянут между ними

valyan 13.09.2013 08:27

Цитата:

Сообщение от bes (Сообщение 272072)
к чему два id="content"?

Просто описка

Цитата:

Сообщение от bes (Сообщение 272072)
как растягиваться, он и так у тебя растянут между ними

Ну вот если на всю страницу сделать, то эти дивы будут все в центре, а мне надо - фиксировано один в "шапке", другой всегда фиксировано снизу, а третий между ними.

ksa 13.09.2013 10:00

Цитата:

Сообщение от valyan
Что посоветуете?

Вообще избавиться от таблицы.
Поскольку ты попадаешь на проблему "как сделать див на всю область резиновой ячейки"...

valyan 13.09.2013 16:14

Цитата:

Сообщение от ksa (Сообщение 272096)
Вообще избавиться от таблицы.
Поскольку ты попадаешь на проблему "как сделать див на всю область резиновой ячейки"...

Ну допустим не в таблице, как это сделать с помощью дивов
<div id="main" style="border: 1px solid black; width: 100%; height: 100%">
 <div id="header" style="border: 1px solid red; height: 10%"></div>
 <div id="content" style="border: 1px solid green; height: 80%"></div>
 <div id="footer" style="border: 1px solid blue; height: 10%"></div>
</div>

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

bes 13.09.2013 19:34

твои тестовые примеры работают в точности так, как ты описываешь, поэтому всё у тебя работает ;)

для начала можешь открыть для себя тег style, position: absolute|relative, bottom: 0px, гугл

valyan 15.09.2013 22:02

Делаю вот так
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style type="text/css">
        html {
            height: 100%;
        }

        body {
            margin: 0;
            padding: 0;
            height: 100%;
        }

        #main {
            position: relative;
            height: 100%;
            border: solid 1px blue;
            min-height: 100%;
        }

        #sidebar {
            position: absolute;
            top: 50px;
            left: 0px;
            width: 30%;
            height: 100%;
            border: solid 1px red;
        }

        #content {
            position: absolute;
            top: 50px;
            right: 0px;
            width: 70%;
            height: 100%;
            border: solid 1px green;
        }

        #message {
            position: absolute;
            bottom: 0px;
            right: 0px;
            width: 100%;
            height: 10%;
            border: solid 1px black;
        }

        #header {
            position: absolute;
            top: 0px;
            left: 0px;
            width: 100%;
            border: solid 1px yellow;
            height: 50px;
        }
    </style>
</head>
<body>
    <div id="main">
        <div id="header"></div>
        <div id="sidebar">сидебар</div>
        <div id="content">
            контент
            <div id="message">мессаге</div>
        </div>
    </div>
</body>
</html>

но div-sidebar, div-content, div id-message выходят за границы div-main. Если убрать у div-sidebar, div-content top: 50px, то они накладываются на div-header. Как вариант уменьшить у этих div'ов height, но хотелось, чтобы заполняли всю область, чтобы у других пользователей нормально отображалось.

bes 15.09.2013 23:49

опиши для каждого из блоков (header, footer, content, sidebar): что должно произойти, когда высота их содержимого превысит их высоту

а также header, footer должны ли быть всё время на экране или просто являются крайними

valyan 16.09.2013 08:23

Цитата:

Сообщение от bes (Сообщение 272357)
опиши для каждого из блоков (header, footer, content, sidebar): что должно произойти, когда высота их содержимого превысит их высоту

header, footer - здесь тест в блоках фиксированный, т.е. высота их содержимого никогда не привысит их высоту.
content, sidebar - ну тут должен появиться скролл, overflow: auto
Цитата:

Сообщение от bes (Сообщение 272357)
а также header, footer должны ли быть всё время на экране или просто являются крайними

header - должен быть всегда, footer - по клику по ссылке, которая будет находиться в sidebar.

bes 16.09.2013 20:11

Цитата:

Сообщение от valyan
header - должен быть всегда, footer - по клику по ссылке

так пойдёт?
<!doctype html>
<style>
body {
	height: 100%;
	margin: 0px;
	padding: 0px;
}
#header {
	position: fixed;
	left: 0px;
	top: 0px;
	width: 100%;
	background: red;
	z-index: 100;
}
#content {
	position: relative;
	height: 100%;
	border: solid 1px green;
	padding-top: 1em;
	padding-bottom: 1em;
}
#footer {
	position: fixed;
	left: 0px;
	bottom: -2em;
	width: 100%;
	background: yellow;
}
</style>
<div id="header">header</div>
<div id="content">
	<a href="#" class="sh">show/hide footer</a>
</div>
<div id="footer">footer</div>
<script>
(function () {
	var content = document.getElementById("content");
	for (var i = 1; i <= 100; i++) {
		content.innerHTML += "<br/>" + i;
	}
	document.getElementsByClassName("sh")[0].onclick = function () {
		var fs = document.getElementById("footer").style; 
		if (fs.bottom == "0em") {
			fs.bottom = "-2em";
		} else {
			fs.bottom = "0em";
		}
		
	}
})();
</script>

css 16.09.2013 23:33

Я не ахти какой спец в css (если что, мой ник к каскадным таблицам стилей не имеет никакого отношения), но, если я верно помню, то display:block заставляет див занимать всю доступную область. И ещё надо бы обнулить стили.
И ещё я бы добавила:
*{box-sizing:border-box;}

Последнее я добавляю, чтоб не манаться с просчётом всяких мэржинов и пэддингов.

valyan 17.09.2013 08:19

Цитата:

Сообщение от bes (Сообщение 272494)
так пойдёт?

Не совсем то. Мне нужно получить что-то похожее на то, что я приводил в сообщении №12

ksa 18.09.2013 09:23

Цитата:

Сообщение от valyan
Ну допустим не в таблице, как это сделать с помощью дивов

1000р и я сделаю тебе макет...

valyan 18.09.2013 16:47

Цитата:

Сообщение от ksa (Сообщение 272661)
1000р и я сделаю тебе макет...

нее, я сам помучаюсь.:)

ksa 18.09.2013 19:35

Цитата:

Сообщение от valyan
я сам помучаюсь

Не нужно мучаться... Книжки начинай читать. ;)

valyan 18.09.2013 20:12

Цитата:

Сообщение от ksa (Сообщение 272730)
Не нужно мучаться... Книжки начинай читать. ;)

Читаю, вроде все по теории, а не получается. Что посоветуете почитать?

ksa 19.09.2013 08:58

Цитата:

Сообщение от valyan
Что посоветуете почитать?

Боюсь что в твоем случае нужно начать с этой книжки...



Там очень доходчиво и на примерах объясняют...

ruslan_mart 19.09.2013 14:32

<!DOCTYPE HTML>
<html>
  <head>
  	<style>
      div.main {
        border: 5px solid #111;
        display: table;
        height: 500px;
        width: 500px;
      }
      div.main > div {
        display: table-row;
      }
      div.header {
        background: blue;
        height: 100px;
      }
      div.content {
        background: red;
        /*height: 100%;*/
      }
      div.footer {
        background: green;
        height: 100px;
      }
    </style>
  </head>
  <body>
	<div class="main">
      <div class="header">Header</div>
      <div class="content">Content</div>
      <div class="footer">Footer</div>
    </div>
  </body>
</html>

valyan 19.09.2013 16:40

ksa, не бойтесь;)
Ruslan_xDD, спасибо!

ksa 19.09.2013 16:43

Цитата:

Сообщение от valyan
не бойтесь

Я храбр как никогда... :lol:

valyan 19.09.2013 16:46

Цитата:

Сообщение от ksa (Сообщение 272902)
Я храбр как никогда... :lol:

Я рад за Вас:)


Часовой пояс GMT +3, время: 16:46.