29.06.2013, 23:17
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
relative position - не работает процентное смещение + вопрос про высоту html и body
Здравствуйте, Уважаемые.
Лично я использую FF для просмотра этих вопросов как один из браузеров, которому можно больше всего доверять в плане соответствия стандартам.
При абсолютном и релативном позиционировании указание любого из смещения, top например, может быть либо в пикселях, либо в процентах. При указании в пикселях происходит смещение на данное растояние от родительского окна.
Вопрос 1. Это происходит от окна браузера, html или body?
При указании в процентах происходит то же смещение, что и в случае с px, но на расстояние выраженное в процентах от размера смещаемого блока, например для top:20% это будет 0.2 * высоту блока. Во всяком случае так сообщает справка(читаем абзац начинающийся с жирного "Возможны отрицательные координаты").
Вопрос 2.1. Какое смещение имеется ввиду при записи top:0, пиксельное или процентное?
Вопрос 2.2. В моем примере процентное смещение вообще не работает, почему?
(привожу код здесь и готовый пример в архиве)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>тест</title>
<meta name="description" content="" />
<meta name="keywords" content="" />
<!--————————————————————————css————————————————————————-->
<style>
/*————————————————————————reset————————————————————————*/
* {margin:0; padding:0;}
img, fieldset, input{border:0;}
ul,ol{list-style:none;}
a{outline:none;}
/*————————————————————————wraps————————————————————————*/
/* только при height:100% у обоих корневых боксов они будут занимать высоту страницы */
html{border: 5px solid #fc00ff; height: 100%;} /* pink */
body{background:#838383; border: 5px solid #2c2c2c; float:left; width:100%; height: 100%;} /* black */
#wrapper{border: 5px solid #00d8ff; overflow: hidden; min-height: 100%; position: relative;} /* blue */
#footer{height: 100px; border: 2px solid #c29929; top: 30%; position: relative;} /* yellow */
</style>
<!--————————————————————————js—————————————————————————-->
<script type="text/javascript" src="js/jquery-2.0.2.min.js"></script>
<script type="text/javascript" src="js/base.js"></script>
<body>
<div id="wrapper">
<div id="footer"></div>
</div>
</body>
</html>
Вопрос 3. (на примере того же кода, что и в вопросе 2). Разное поведение высоты элементов внутри body с min-height:100% и height:100%. Если мы запишем так: html{height:100%} body{min-height:100%} wrapper{min-height:100%}, то body займет всю высоту окна, а wrapper проигнорирует cвой min-height:100%. Если же body зададим явную высоту height:100%, то высоту окна займет и wrapper. Почему если у body min-height:100%, а не height:100%, то wrapper c height:100% или min-height:100% не занимает всю высоту body(до конца окна)
Последний раз редактировалось lancer, 01.07.2013 в 01:57.
|
|
30.06.2013, 02:37
|
|
Люмус, Емаксос Developer!
|
|
Регистрация: 06.05.2010
Сообщений: 677
|
|
Сообщение от Deff
|
Сообщение от lancer
Вопрос 1. Это происходит от окна браузера, html или body?
Для top и left при элементах с position:relative отступы от body, если в родителя нет элементов с позицией абсолюте или relative или fixed,
В противном случае - позиционируется от первого, ближайшего родственника с такой позицией
|
Это ошибочное утверждение, так как при position: relative Положение элемента устанавливается относительно его исходного места. Добавление свойств left, top, right и bottom изменяет позицию элемента и сдвигает его в ту или иную сторону от первоначального расположения.
Deff - ты унылое гавно!
Последний раз редактировалось Magneto, 01.07.2013 в 10:41.
|
|
30.06.2013, 06:34
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
при position:fixed идет расчет относительно viewport, при :relative относительно первоначального положения (уже объяснили), при :absolute - относительно ближайшего предка, имеющего position не равный :static. Если таковых нет, то наверно от html
2.1 Нулевое значение рекомендуется указывать без единиц значения. Оно и понятно - зачем, когда при любой единице результирующее значение один фиг нулевое?
3. А где вопрос?
|
|
01.07.2013, 02:02
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
Magneto, вы процитировали мой первый вопрос с примесью своего предыдущего ответа(он попал в цитату, да еще и с орф-ошибками, не дотерли видно).
Кстати в первом вопросе почему не работает процентное смещение, так и никто не ответил, непорядок.
Один товарищ говорит, что это потому что у родителя min-height:100% - это не жёсткое задание высоты, а всего лишь ограничение на минимум. И браузер при этом не хочет ничего там расчитывать в процентах.
danik.js
Цитата:
|
при position:fixed идет расчет относительно viewport, при :relative относительно первоначального положения (уже объяснили), при :absolute - относительно ближайшего предка, имеющего position не равный :static. Если таковых нет, то наверно от html
|
В одном источнике прочел, что относительно DocumentElement. Не body точно, либо html, либо само окно браузера.
Цитата:
|
2.1 Нулевое значение рекомендуется указывать без единиц значения. Оно и понятно - зачем, когда при любой единице результирующее значение один фиг нулевое?
|
Действительно, там разницы не будет.
Отредактировал, теперь вопрос есть. По тому же утверждению товарища height в процентах у элемента в родителе с min-height не сработает. Все процентное в таком родительском блоке не работает.
Последний раз редактировалось lancer, 01.07.2013 в 02:26.
|
|
01.07.2013, 04:36
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от lancer
|
Почему если у body min-height:100%, а не height:100%, то wrapper c height:100% или min-height:100% не занимает всю высоту body(до конца окна)
|
Потому-что если у родителя не указано свойство height (то есть равно auto), то высота дочерних блоков, заданная в процентах (и другие процентные свойства, рассчитываемые относительно высоты контейнера) игнорируется. http://www.w3.org/TR/CSS2/visudet.ht...eight-property
Сообщение от lancer
|
Вопрос 2.2. В моем примере процентное смещение вообще не работает, почему?
|
Потому что процентные значения top/left/right/bottom должны рассчитываться относительно высоты родителя. А у тебя она не задана.
http://www.w3.org/TR/CSS2/visuren.html#propdef-top
|
|
01.07.2013, 06:11
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
danik.js +1
|
|
04.08.2013, 16:09
|
Новичок на форуме
|
|
Регистрация: 22.11.2012
Сообщений: 9
|
|
выходит min-height 100% не значит, что height 100%? надо обязательно жестко задавать?
и можно совмещать тогда min-height и height тогда? чтобы он как бы читал что height (для min-height), но на самом деле было min-height?
и еще вот такой пример
<html>
<head>
<style type="text/css">
* {margin:0; padding:0;}
html {height:100%; }
body {height:100%; background:yellow;}
#wrap {min-height:100%; background:red;}
#car {height:60%; background:purple;}
#text {height:40%; background:gray;}
</style>
</head>
<body>
<div id="wrap">
<div id="car">
s
</div>
<div id="text">
s<br>s<br>
s<br>s<br>s<br>
s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>
s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>
s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>
s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>s<br>
</div>
</body>
</html>
почему wrapper не тянется на min-height 100%, ведь у body и html 100%, он тянется на 100%
Последний раз редактировалось myaut, 04.08.2013 в 16:19.
Причина: недописал
|
|
04.08.2013, 16:56
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
wrapper тянется (учись пользоваться отладчиком браузера). А вот car и text не тянутся, потому что у wrapper'а не задана высота (да, min-height задан, но это совсем другое). Читай внимательней посты выше.
|
|
04.08.2013, 17:21
|
Новичок на форуме
|
|
Регистрация: 22.11.2012
Сообщений: 9
|
|
Сообщение от danik.js
|
wrapper тянется (учись пользоваться отладчиком браузера). А вот car и text не тянутся, потому что у wrapper'а не задана высота (да, min-height задан, но это совсем другое). Читай внимательней посты выше.
|
Так как растянуть car и text при этом сохранив min-height у wrapper? без js никак? и если это можно сделать с помощью js если не трудно подскажите как, если лень, то хотя бы скажите можно ли
p.s отладчик показывает что wrapper вытянут на 100%, а не на min-height 100%. google chrome 28.01.1500
|
|
04.08.2013, 17:50
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от myaut
|
отладчик показывает что wrapper вытянут на 100%, а не на min-height 100%
|
Ну все верно. 100% - это и есть минимум (min-height).
Сообщение от myaut
|
ак как растянуть car и text при этом сохранив min-height у wrapper?
|
Пропиши wrapper'у height:100% , или тебе это не подходит?
|
|
|
|