Проблема с position:absolute на длинной по высоте Landing Page
Добрый день! Есть сайт http://valeodent.spb.ru/, представляющий длиннющую landing page, сделанную на темизированном Drupal 7. При щелчке по кнопке "Записаться" выходит форма, после заполнения которой посетитель должен увидеть сообщение типа "Заказ отправлен. В ближайшее время с вами свяжутся для уточнения деталей." - или сообщение об ошибке, если не все поля формы были заполнены. Сообщения реализуются через стандартные системные сообщения Drupal, но темизированы в файле .css шаблона сайта.
В шаблоне страницы page.tpl.php это сообщение выводится в блоке <div class="message">, который вложен в <div class="content-block">. Соответственно, поскольку content-block находится глубоко внизу, через долгую прокрутку браузера, сообщение исходно невидимо пользователем. И надо этот <div message> поднять в верхнюю часть окна браузера, чтобы посетители могли его увидеть! Просто переставить этот div в заголовок header не получается - Drupal откажется печатать сообщения вообще. fixed-позиционирование непригодно для моего клиента т.к. блок неприятно стоит на месте при прокрутке содержимого, а должен уезжать вверх. Остается использовать absolute позиционирование. У content-block указано position:static, т.е. вложенный в него message должен позиционироваться относительно окна браузера и всплыть наверх - однако, что-то не ладится и он позиционируется относительно своего родителя, так и оставаясь глубоко внизу((( В чем дело? Почему не работает абсолютное позиционирование несмотря на static у родителя? Может быть из-за того, что Родитель находится глубоко "под днищем" окна браузера и требует долгой прокрутки к нему? |
Надеюсь вам помогут пару цитат на эту тему:
"position: static Статическое позиционирование производится по умолчанию, в том случае, если свойство position не указано." "absolute Указывает, что элемент абсолютно позиционирован, при этом другие элементы отображаются на веб-странице словно абсолютно позиционированного элемента и нет. Положение элемента задается свойствами left, top, right и bottom, также на положение влияет значение свойства position родительского элемента. Так, если у родителя значение position установлено как static или родителя нет, то отсчет координат ведется от края окна браузера." И кстати написанное выше работает:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="Keywords" content="">
<meta name="description" content="">
<title>ГГ</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<style>
*{
margin:0;
padding:0;
outline: 0;
}
.static-position {
position: static;
width: 80px;
height: 80px;
margin: 50px;
border: 1px solid red;
}
.absolute-position {
position: absolute;
width: 80px;
height: 80px;
border: 1px solid green;
font-size: 10px;
left: 10px;
top: 10px;
}
</style>
</head>
<body>
<div class="static-position">
<div class="absolute-position">Абсолютно спозиционированный блок внутри статически спозиционированного</div>
</div>
</body>
</html>
|
В том-то вся и загвоздка, что по всем канонам всё должно работать, я сам уже подобный Вашему тестовый пример на компе набросал - и тоже всё правильно позиционируется... а на живом Drupal-сайте ни в какую за пределы Родительского блока не выезжает наверх(((
Куда надо копать? |
Проблема решена - если left указывать в процентах (left: 25%; скажем), а не в пикселях, то всё отлично работает! Но остается вопрос, в чем же загвоздка что left нельзя указать в пикселях...
|
Тьфу ты, я лоханулся по-полной((( я писал "px" и их величину раздельно, через пробел, а надо слитно - и тогда всё работает и с пикселями! Вот что значит когда PHP-программист полез во фронтенд потому что больше некому было(
|
| Часовой пояс GMT +3, время: 00:16. |