Модераторы: Illuminaty
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блок по центру экрана, Но не по всему. 
V
    Опции темы
Guedda
Дата 26.11.2012, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 3
Всего: 78



Добрый день, уважаемые.

Столкнулся со следующей проблемой.
Есть экран. В нем хедер (с фиксированной высотой) - привязан к верху. И футер (с фиксированной высотой) - привязан к низу.
По центру экрана свободное место. Так вот в это свободное место мне необходимо вставить блок (с фиксированной высотой и шириной), чтобы он был всегда по центру этой части экрана (исключая хедер и футер). Но если сжимать по высоте, то в определенный момент этот блок заходит за хедер и футер (так как они position: absolute). А мне необходимо, чтобы когда мой блок достигал хедер и футер, то у свободной области появлялся скролл.
Если проще, чтобы при любом разрешении мой блок находился в центре экрана и не пересекался с хедером и футером.
В общем, помогите, кто чем может. А то я уже мозг себе сломал.
user posted image


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Aliance
Дата 26.11.2012, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 2
Всего: 137



По идеи так:
делаешь три горизонтальных блока: хедер, контент, футер. контент = боди-хедер-футер соотвественно. в контенте ставить position relative и overflow auto, внутри него с помощью margin auto центрируешь блок.

Эм, как-то так?
PM MAIL WWW ICQ Skype   Вверх
Guedda
Дата 26.11.2012, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 3
Всего: 78



Цитата(Aliance @  26.11.2012,  15:32 Найти цитируемый пост)
margin auto центрируешь блок.

Не подходит. 
Футер должен быть "привязан" к низу экрана. Поэтому position: absolute у него. margin: auto - центрирует только по горизонтали. А надо и по-вертикали.
Это делается так:
Код

position: absolute;
width: 300px;
height: 200px;
top: 50%;
left: 50%;
margin-left: -150px;
margin-top: -100px;

Но тогда получается, что два абсолютно позиционированных элемента наезжают друг на друга при изменении размеров. Это раз.
Еще ты не учел, что если ты просто так все напишешь, то все три блока будут друг за другом, и не обязательно на весь экран. Там еще надо кучу хаков с height: 100% вставить.
В общем, этот вариант не подойдет.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Arantir
Дата 26.11.2012, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Вам нужно только 3 элемента на странице?  Попробуйте превратить все это в таблицу свойствами CSS. 
Попробую примерчик написать...


Это сообщение отредактировал(а) Arantir - 26.11.2012, 19:36


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Arantir
Дата 26.11.2012, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Уххх...
Сочинил...
header - вверху, фиксированная высота. footer - внизу, фиксированная высота. блок - по центру вертикально/горизонтально, фиксированные ширина/высота.
Код

<!DOCTYPE html>
<html>
    <head>
        <title>Блок по центру, не перекрывающий header и footer © Арантир</title>
        <style>        
            *
            {
                margin: 0px;
                padding: 0px;
            }
            html
            {
                min-height: 100%;
                position: relative;
            }
            body
            {
                min-height: 400px;
            }
            #top
            {
                background: rgba(0, 0, 255, 0.2);
                width: 100%; 
                height: 100px;
                position: absolute;
                top: 0px;
            }
            #center
            {
                background: rgba(255, 0, 0, 0);
                width: 300px; 
                height: 400px;
                margin: 0px auto;
                position: absolute;
                top: 50%;
                left: 50%;
                margin-top: -200px;
                margin-left: -150px;
            }
            
            #block
            {
                background: rgba(255, 0, 0, 0.2);
                width: 300px; 
                height: 200px;
                margin: 0px auto;
                margin-top: 100px;
            }
            
            #bottom
            {
                background: rgba(0, 255, 0, 0.2);
                width: 100%; 
                height: 100px;
                position: absolute;
                bottom: 0px;
            }
        </style>
    </head>
    
    <body>
        <div id="top"></div>
        <div id="center">
            <div id="block"></div>
        </div>
        <div id="bottom"></div>
    </body>

</html>


Ей-богу, без фиксированных размеров это было бы почти нереально XD

Коротко об идее:
Берем 3 абсолютно позиционированных блока: хидер, футер и распорку. Хидер - вверху, футер - внизу. Распорка бсолютно спозиционирована по 50% и минус половина размеров сделана margin'ами.
Распорка имеет высоту: высота хидера + высота футера + высота центрального блока.
Цетральный блок помещаем внутрь распорки и сдвигаем его margin'ом вниз на высоту хидера.
Ставим для body минимальную допустимою высоту равную высоте распорки, которую мы вычислили ранее.

При сжатии страницы наш блок не зайдет на хидер из-за того, что распорка уже упрется в верх страницы. А на футер не зайдет, потому что будет достигнута минимальная высота страницы и отступ от низа до блока (равный высоте футера) уже не уменьшится.

Это сообщение отредактировал(а) Arantir - 26.11.2012, 19:36


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Guedda
Дата 26.11.2012, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 3
Всего: 78



Да, хорошая идея. Но я поступил проще.
Таблица (ширина и высота 100%) и три строки в ней. первая - хидер (с vertical-align: top), вторая - мой блок (c margin: auto и сама td vertical-align: middle), ну и соответственно footer (vertical-align: bottom).
Так я думаю проще. Но и твой вариант хорош. Держи плюс.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Arantir
Дата 26.11.2012, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Guedda, хех, а я про таблицы как раз перед этим написал =))) Но в процессе как-то само пошло к моему ответу.
Но зависит от обстоятельств. Характер поведения ячеек таблиц не всегда позволяет их использовать. В данном случае вполне может быть, что так проще и без последствий. В моем варианте много "ручных" вычислений над размерами. При изменении высота блока надо будет менять в четырех местах размер.

Это сообщение отредактировал(а) Arantir - 26.11.2012, 20:20


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




[ Время генерации скрипта: 0.0675 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.