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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простой макет в 2 колонки на дивах, или "дивы как всегда глючат"! 
:(
    Опции темы
nns2009
Дата 15.10.2011, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



Недавно начал верстать сайт, решил верстать на блоках, так как в интернете их все расхваливают, но сейчас я стал сомневаться в этих похвалах...
И тому есть причины:
1) Свойство vertical-align не работает ни в одном браузере (и вообще не понятно как делать выравнивание по вертикали)
2) Если есть 2 колонки, совершенно непонятно, как сделать их высоту одинаковой
3) Отступ padding не включается в указанную ширину
4) Непонятно, как при фиксированной ширине левой колонки, сделать так, чтобы правая колонка заполняла всё оставшееся пространство справа и при этом не сползала налево, когда заканчивается левая колонка
5) Неинтуитивность в использовании многих свойств.

Сейчас мне нужно написать стандартный макет(заголовок, левая колонка, правая колонка(содержимое), подвал) в 2 колонки фиксированной ширины с некоторыми особенностями:
1) Содержимое "Заголовка" верикально выровнено по середине и выглядит примерно так:
Код

НазваниеСайта.Ру                                                  -Уже другим стилем-   Кнопка 1 | Кнопка 2 | Кнопка 3 | Кнопка 4

2) Левая колонка не подстраивается под ширину правой (но как сделать подстраиваемость тоже хотелось бы узнать) и имеет фиксированную ширину
3) Правая колонка занимает остаток места
4) Есть отступы padding
5) Желательно, чтобы для изменения какой-либо характеристики(ширина макета, ширина левой колонки, ширина отступов и т.п.) достаточно было бы изменить как можно меньше чисел(в идеале - одно)

Скажите, являются ли мои причины объективными, или я что-то не так делаю?
И помогите пожалуйста сверстать данный макет  smile  (в интернете не нашёл ничего, удовлетворяющего условиям).

Это сообщение отредактировал(а) nns2009 - 15.10.2011, 19:16
PM MAIL   Вверх
$дмитрий
Дата 15.10.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 10
Всего: 45



Цитата

1) Свойство vertical-align не работает ни в одном браузере (и вообще не понятно как делать выравнивание по вертикали)
2) Если есть 2 колонки, совершенно непонятно, как сделать их высоту одинаковой
3) Отступ padding не включается в указанную ширину
4) Непонятно, как при фиксированной ширине левой колонки, сделать так, чтобы правая колонка заполняла всё оставшееся пространство справа и при этом не сползала налево, когда заканчивается левая колонка
5) Неинтуитивность в использовании многих свойств.

1. А так?
Код

display:table-cell;
vertical-align:middle;

2.
Код

height:100%;
min-height:100%;

3. В разных браузерах по разному
5. Есть такое дело, не хватает к примеру vertical-align:center;

Цитата

так как в интернете их все расхваливают

Если время не терпит для проблемных мест сам использую таблицы
PM MAIL   Вверх
SelenIT
Дата 16.10.2011, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 97
Всего: 401



5-я причина объективная, логику создателей CSS порой понять очень трудно. Блочная модель, считающаяся "изнутри наружу" (ширина задает ширину контента, а паддинги и бордеры плюсуются к ней сверх) — лишь одно из таких мест (хотя, пожалуй, самое заметное). Есть еще одна объективная причина — в современном CSS нет механизма специально для компоновки блоков, в основном он "заточен" под оформление текста, и для типовых задач верстки приходится использовать инструменты не по назначению (напр. делать колонки "как бы врезками"). Ну и вечная проблема старых браузеров, само собой (впрочем, с таблицами в них тоже хватает своих "приколов").

Выравнивание высоты колонок — проблема известная, теме "equal height columns" (кое-где именуемой ни много ни мало "Граалем вёрстки") посвящены гигабайты статей. В простых случаях однородного фона часто довольствуются имитацией равной высоты с помощью фоновой картинки для контейнера (метод "ложных колонок" — "faux columns") или с помощью бордеров, например, так. Для более сложных случаев — см. здесь.

Vertical-align работает, но по-разному в разных ситуациях. В ячейках таблиц оно выравнивает содержимое относительно ячейки (как атрибут valign), а для строковых элементов — выравнивает их в строке (по умолчанию картинки, элементы форм и инлайн-блоки выравниваются по базовой линии текста, а с помощью vertical-align можно выровнять их по центру, верху или низу строки, а также поднять/опустить относительно базовой линии на заданную величину).

Цитата(nns2009 @  15.10.2011,  19:16 Найти цитируемый пост)
1) Содержимое "Заголовка" верикально выровнено по середине и выглядит примерно так:

Как вариант: text-align: right (для меню) + float: left либо position: absolute с подходящими координатами (для логотипа) + достаточно большой line-height (для вертикального центрирования).

Цитата(nns2009 @  15.10.2011,  19:16 Найти цитируемый пост)
2) Левая колонка не подстраивается под ширину правой (но как сделать подстраиваемость тоже хотелось бы узнать) и имеет фиксированную ширину
3) Правая колонка занимает остаток места

Как вариант — см. пример. Для "подстраиваемости" нужно задавать ширину в процентах, правда, тогда не получится имитировать колонку бордером, но это решаемая проблема.

Цитата(nns2009 @  15.10.2011,  19:16 Найти цитируемый пост)
Есть отступы padding

Универсальный вариант — вложить в каждую колонку еще один оберточный div и задать отступы ему. Современный, но, увы, еще не достаточно кроссбраузерный подход — использовать CSS3. Еще можно (и нужно;) использовать тот факт, что без явного указания ширины блок вписывается в предка (сумма ширины контента, паддингов, бордеров и маргинов равна внутренней ширине родительского элемента).

Цитата(nns2009 @  15.10.2011,  19:16 Найти цитируемый пост)
Желательно, чтобы для изменения какой-либо характеристики... достаточно было бы изменить как можно меньше чисел

А вот здесь почти всегда придется искать компромиссы. Часто "идеологически чистые" и предельно гибкие в теории решения оказываются недостаточно кроссбраузерными и т.п. Но всегда есть возможность приблизиться к совершенству еще хоть на пиксель! smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
nns2009
Дата 17.10.2011, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



Цитата($дмитрий @  15.10.2011,  20:41 Найти цитируемый пост)
1. А так?

В простых случаях - помогло! Но не во всех... Например, в случае, когда поначалу идёт текст, а потом див. (Моя текущая проблема)

Цитата(SelenIT @  16.10.2011,  00:47 Найти цитируемый пост)
или с помощью бордеров, например, так

border-left: 200px solid #cfc;
Оригинально!

Цитата(SelenIT @  16.10.2011,  00:47 Найти цитируемый пост)
Для более сложных случаев — см. здесь.

Вот это я запомню (если пойму)

Цитата(SelenIT @  16.10.2011,  00:47 Найти цитируемый пост)
Для "подстраиваемости" нужно задавать ширину в процентах, правда, тогда не получится имитировать колонку бордером, но это решаемая проблема.

Я опечатался. Имелось в виду, что высоты колонок не объзательно равны (в моём случае не надо).

Цитата(SelenIT @  16.10.2011,  00:47 Найти цитируемый пост)
Современный, но, увы, еще не достаточно кроссбраузерный подход — использовать CSS3

Попробовал - у меня заработало во всех браузерах. Это хорошо smile 

Сейчас у меня такая основная проблема:
Код

<div>
     <span> Название сайта.ру
     </span>
     <div>
          <div style="display: inline">Кнопка 1</div><div ...>Кнопка 2</div>...
     </div>
</div>


Вертикально выровнять всё содержимое внешнего дива. Название сайта - поместить слева, а все кнопочки поместить справа.
PM MAIL   Вверх
SelenIT
Дата 17.10.2011, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 97
Всего: 401



Маленький пример на тему
Цитата(SelenIT @  16.10.2011,  00:47 Найти цитируемый пост)
 text-align: right (для меню) + float: left ... (для логотипа) + достаточно большой line-height

smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
nns2009
Дата 18.10.2011, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



Цитата(SelenIT @  17.10.2011,  23:49 Найти цитируемый пост)
Маленький пример на тему

Не просто спасибо, а супер спаибо smile 

А как сделать всё так-же, но фон (и только фон) каждой кнопки полупрозрачен.
Пробовал: opacity: 0.5; Но это затрагивает не только фон, но и текст.
PM MAIL   Вверх
SelenIT
Дата 18.10.2011, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 97
Всего: 401



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


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
nns2009
Дата 20.10.2011, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



Цитата(SelenIT @  17.10.2011,  23:49 Найти цитируемый пост)
Маленький пример на тему

По мотивам вашего примера, переделал свой. Получил: Хедер
Через данный сервер страница отображается полностью правильно, но, сохранённая на мой компьютер, она же ужасно отображается через Оперу (и только) - а это ведь мой любимый(как у пользователя интернета) браузер.....
Вот код:
Код

<html>
<head><style>
#divHeader {
    border-radius: 15px;
    padding-left: 12px;
    padding-right: 12px;
    background-color: #A7CD45;
    text-align: right;
}

#spanHeaderTitle {
    float: left;
    font-size: x-large;
    line-height: 55px;
}
#spanHeaderTitle a {
    color: Black;
    font-family: "Arial";
}
#spanHeaderTitle a span {
    color: Red;
}

#spanHeaderButtons {
    display: inline-block;
    line-height: 55px;
}
#spanHeaderButtons a {
    display: inline-block;
    font-size: larger;
    border: solid 2px black;
    border-radius: 9px;
    padding: 7px;
    line-height: 1;
}
#spanHeaderButtons a:hover {
    background: rgba(255, 255, 255, 0.5);
}

#divFooter {
    background: #ff0000;
    border-radius: 15px;
    line-height: 30px;
    text-align: center;
    vertical-align: middle;
}
</style></head>
<body>
<div id="divHeader">
    <span id="spanHeaderTitle">
        <a href="#"><span>М</span>ой<span>С</span>айт</a>
        <span id="spanHeaderLabel">- лучший сайт</span>
    </span>
    
    <span id="spanHeaderButtons">
        <a href="#">Кнопка 1</a>
        <a href="#">Кнопка 2</a>
        <a href="#">Кнопка 3</a>
    </span>
</div>
<div id="divFooter">
    My footer
</div>
</body></html>


Что надо переделать?
PM MAIL   Вверх
SelenIT
Дата 20.10.2011, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 97
Всего: 401



Как минимум, доктайп <!DOCTYPE html> добавить, без него страница валится в Quirks mode. Подробнее про доктайпы и режимы браузеров здесь и здесь.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
nns2009
Дата 20.10.2011, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



Цитата(SelenIT @  20.10.2011,  22:12 Найти цитируемый пост)
Как минимум, доктайп <!DOCTYPE html> добавить

Помогло! Хотя, на основной странице моего шаблона стоял доктайп(я посылал сокращённую), он почему-то не работал, как и половина доктайпов с вашей ссылки.
В вашем шаблоне было указано: display: inline-block - чем это отличается от просто инлайн?
Продолжаю искать ошибки.....
PM MAIL   Вверх
SelenIT
Дата 20.10.2011, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 97
Всего: 401



Цитата(nns2009 @  20.10.2011,  22:32 Найти цитируемый пост)
он почему-то не работал, как и половина доктайпов с вашей ссылки

Там в табличке как раз помечено, грубо говоря, какие доктайпы в каких браузерах "работают" (включают стандартный режим), а какие — нет. Этот самый надежный, т.к. самый простой и короткий.

Цитата(nns2009 @  20.10.2011,  22:32 Найти цитируемый пост)
 display: inline-block - чем это отличается от просто инлайн?

"Снаружи" он инлайновый (вписывается в строку, как обычное слово или картинка), а "внутри" — блочный (может иметь полноценные паддинги и фон, не разрывается при переносе строки и т.п.). Правда, не работает в FF2 (уже года 3 как неактуально) и есть приколы в IE6-7 (только для изначально строчных элементов, но для изначально блочных тот же эффект дает display:inline + hasLayout).


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
nns2009
Дата 26.10.2011, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



Проблемы обнаружились  smile 
Теперь в IE. Проблема, полностью совпадающая с моей, видна тут: http://jsfiddle.net/nns2009/QYQqv/2/
Эта проблема видна при просмотре данной странице через IE - левое меню сезжает вправо.
Почему?
PM MAIL   Вверх
nns2009
Дата 26.10.2011, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



Ещё задача: нужно сделать приблизительно так - http://jsfiddle.net/nns2009/ewz2p/, но чтобы ширина заголовка подгонялась под ширину содержащегося текста и сам заголовок(вместе с фоном) наехал наполовину на колонки(съехал чуть чуть вниз).

Это сообщение отредактировал(а) nns2009 - 26.10.2011, 21:00
PM MAIL   Вверх
SelenIT
Дата 27.10.2011, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 97
Всего: 401



Цитата(nns2009 @  26.10.2011,  18:36 Найти цитируемый пост)
левое меню сезжает вправо.
Почему? 

Похоже, из-за какого-то глюка левая колонка умудряется "зацепиться" за логотип, clear:left (или both) для нее решает проблему.

Цитата(nns2009 @  26.10.2011,  20:57 Найти цитируемый пост)
чтобы ширина заголовка подгонялась под ширину содержащегося текста и сам заголовок(вместе с фоном) ... съехал чуть чуть вниз

Как вариант. Вместо display:table можно поставить inline-block, только центрировать придется иначе (через text-align предка). Под IE7 придется чуть "допилить", но это можно и "на закуску" оставить.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




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


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

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