Lex-DRL
Newbie-
Posts
17 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Store
Everything posted by Lex-DRL
-
Сделал. Но пока с экспрешнами ИЕ не разобрался - так что без них. Кто знает - может сам сделать по аналогии с кодом, предложенным psywalker. Фон составлен из 9 блоков таблицей 3x3. Углы - фиксированные, стороны-заполнители - тянущиеся. Центральный (5-ый) слой сделан рассчётом на то, что для окружающих его блоков периметра в качестве бэка используются PNG с переходом через прозрачность к основному фону. Поэтому 5-ый блок немного больше - чтобы охватить зону перехода. Габариты фиксированной рамки: слева и справа - по 30, сверху - 45, снизу - 60. min-width: 800px у боди выставлена с рассчётом на общие габариты сайта. <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html dir="ltr" xml:lang="ru" xmlns="http://www.w3.org/1999/xhtml" lang="ru"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Simple Test | Простой тест</title> <link type="text/css" rel="stylesheet" media="all" href="simpletest.css"> </head> <body> <div id="page"> <div id="page-back"> <div class="back-5"></div> <div class="back-1"></div><div class="back-2"></div><div class="back-3"></div> <div class="back-4"></div><div class="back-6"></div> <div class="back-7"></div><div class="back-8"></div><div class="back-9"></div> </div> <div id="page-front">Содержимое блока "page-front".</div> </div> </body> </html> CSS: * { margin: 0; padding: 0; } HTML, BODY { height: 100%; min-width: 800px; } /* Стиль контейнера */ #page { min-height: 105px; min-width: 60px; position: relative; margin: 0 auto; color: white; } /* Общие стили фоновых блоков */ #page-back, .back-1, .back-2, .back-3, .back-4, .back-5, .back-6, .back-7, .back-8, .back-9 { position: absolute; z-index: -1; } /* Стили для блоков, общие по рядам */ .back-1, .back-2, .back-3 { height: 45px; top: 0; } .back-4, .back-6 { top: 45px; bottom: 60px; } .back-7, .back-8, .back-9 { height: 60px; bottom: 0; } /* Стили для блоков, общие по столбцам */ .back-1, .back-4, .back-7 { width: 30px; left: 0; } .back-2, .back-8 { left: 30px; right: 30px; } .back-3, .back-6, .back-9 { width: 30px; right: 0; } /* Индивидуальные стили фоновых блоков */ #page-back { top: 0; bottom: 0; left: 0; right: 0; } /* Центральный (5-ый) блок чуть больше, чтобы можно было сделать плавный переход от блоков периметра к нему через прозрачность. Для этого он должен полностью охватывать область перехода. */ .back-5 { left: 10px; right: 10px; top: 30px; bottom: 40px; background: maroon; } /* У блоков периметра индивидуально настраивается только фон */ .back-1 { background: darkblue;} .back-2 { background: green;} .back-3 { background: darkblue;} .back-4 { background: green;} .back-6 { background: green;} .back-7 { background: darkblue;} .back-8 { background: green;} .back-9 { background: darkblue;} /* Стиль переднего блока с контентом */ #page-front { float: none; padding: 30px 20px; width: auto; overflow: hidden; }
-
ОК, тогда всё прекрасно. Как сделаю окончательный вариант решения поставленной задачи (тянущийся во все стороны бэк) - скину сюда код. Ещё раз спасибо.
-
Да не, я не о соответствии схеме. Принцип понял - мелочи и сам подправить могу. Я о том, что: Это отсюда. Соотв-но, я опасаюсь за отображение в ФФ 2. Насколько я помню, ФФ3 вышел относительно недавно. Сам проверить не могу - тупо не нашёл ФФ2. Или на нём ты тоже провераял?
-
Сорри, что опять возвращаюсь к вопросу и отдельное сорри за длинный пост - но я разобрался с кодом, и теперь не уверен по поводу его кроссбраузерности. Как я понял: Ты просто делаешь каждый слой с фоном абсолютно-позиционированным, ставишь куда надо и растягиваешь на всю высоту родительского блока (кстати за растягивание через top и bottom - отдельное спасибо, сам как-то протупил). Чтоб абсолюты были относительно его - ставишь ему relative, а чтоб абсолюты не перекрывали контент - ставишь им z-index: -1. Вот тут-то и загвоздка. z-index с отрицательными значениями обрабатывается не всеми браузерами, а с положительными - фишка не пашет: абсолюты всё равно рисуются поверх, что я ни пробовал (ставил абсолютам 0 или 1, а .head, .right-float и .foot - поболее). Я и сам когда в начале перебирал варианты - пробовал сделать через абсолюты (правда растянуть пытался через min-height, до твоего способа в спешке не догадался). Но отказался я от этого варианта как раз потому, что пользуясь только положительными значениями z-index расположить абсолюты за контентом не удалось. Если я тебя ещё не совсем достал - тогда вопрос: можно ли эту проблему как-нить обойти? Потому что способ самый дельный, и после того, как ты мне его предложил - я к нему склоняюсь ещё больше. Если так приставать с моей стороны уже нагло - тогда прошу прощения, пойду искать где-нить ещё. Честно скажу, с кодом в условных комментариях я ещё не разбирался, т.к. пока не знаком с ишаковскими экспрешнами.
-
Благодарю. Ушёл разбираться с этим кодом.
-
Если под нижними имелись в виду 7, 8, 9 - то их нижняя граница должна совпадать с нижней границей контента, т.к. это на схеме они маленькие, а на деле там градиент по 100-200 пикселей, что кое-где составляет половину контента. Тут вся соль в том, что фон должен быть именно за контентом, а не вокруг.
-
Родительский div не хочет растягиваться на всю высоту дочерних.
Lex-DRL replied to Lex-DRL's question in HTML Coding
Поскольку тема ушла немного "в сторону", создал новый топик. -
В продолжение этого топика. Имеется 2 блока. В одном - фон, составленный из обрезков. В другом - собственно контент. Задача: расположить второй блок (div с контентом) поверх первого так, чтобы фон покрывал весь контент. Фон (в 1 блоке) сделан в виде таблицы 3x3, в которой боковые стороны тянутся, а углы - фиксированного размера. Это для того, чтоб фон был резиновым не только по горизонтали, но и по вертикали. Поэтому просто вложить слой с контентом внутрь слоя с фоном не получится. Если абсолютно позиционировать фон - то он отрисовывается поверх контента, так что это тоже не подходит. <div id="page"> <div id="page-back"> <div class="back-2"><div class="back-1"></div><div class="back-3"></div></div> <div class="back-5"><div class="back-4"></div><div class="back-6"></div></div> <div class="back-8"><div class="back-7"></div><div class="back-9"></div></div> </div> <div id="page-front">Контент.</div> </div> Расположение блоков фона: 1 2 3 4 5 6 7 8 9 Где красные иксы - там тянется. В итоге нужно получить это: На данный момент имеется: BODY, *, * html { border: none; background: none; margin: 0; padding: 0; } #page { background: black; color: white; padding: 10px; overflow: hidden; } #page-back, #page-front { float: left; } #page-back { background: green; position: relative; width: 100%; min-height: 100%; } #page-front { background: blue; margin: 0 -100%; width: 100% } С CSS только знакомлюсь - но уже поражён тем, насколько трудно реализуется такая элементарная вещь, как резиновый фон.
-
Родительский div не хочет растягиваться на всю высоту дочерних.
Lex-DRL replied to Lex-DRL's question in HTML Coding
Сделал, как там: <body> <div id="page"> <div id="page-back">Текст в блоке "page-back"</div> <div id="page-front">Текст в блоке "page-front"</div> </div> </body> BODY, *, * html { border: none; background: none; margin: 0; padding: 0; } #page { background: black; color: white; padding: 10px; overflow: hidden; } #page-back, #page-front { float: left; width: 50%; display: inline; } #page-back { background: green; } #page-front { background: blue; height: 40px; margin-left: -25%; } Ничего не изменилось. Там, как я понял, всё держится на том, что растягиваемый блок в коде находится первым, а визуально за счёт margin-left перемещается вправо. Второй, напротив, смещается влево. И, по-видимому, за счёт того, что они оба inline, и между ними образуется небольшой зазор, браузер отрисовывает первый блок (который расположен вторым) на всю высоту. У меня же они не меняются местами средствами CSS, а располагаются один поверх другого. Полагаю, поэтому фишка не катит. -
Родительский div не хочет растягиваться на всю высоту дочерних.
Lex-DRL replied to Lex-DRL's question in HTML Coding
Отделить фон от контента нужно потому, что фон родительского блока должен быть резиновым как по горизонтали, так и по вертикали, т.е. задний блок сделан из картинок таблицей в 9 ячеек (через дивы): <div id="page-back"> <div class="back-2"><div class="back-1"></div><div class="back-3"></div></div> <div class="back-5"><div class="back-4"></div><div class="back-6"></div></div> <div class="back-8"><div class="back-7"></div><div class="back-9"></div></div> </div> <!-- /page-back --> Расположение блоков фона: 1 2 3 4 5 6 7 8 9 Где красные иксы - там тянется. В итоге должно быть так: При этом блок контента (содержимое page-front) будет покрывать весь блок page-back, а не только его 5-ую (центральную) часть. Иначе бы я, само собой, сделал просто через вложенные дивы. Основную часть инфы о том, как этого добиться, я уже почерпнул отсюда, но - как видишь - кое-на-чём застрял. -
Родительский div не хочет растягиваться на всю высоту дочерних.
Lex-DRL replied to Lex-DRL's question in HTML Coding
На выходе, по идее, я хочу сделать так, чтобы в page-back был фон, а в page-front - контент. И при увеличении блока с контентом (который будет заведомо больше фонового) фоновый растягивался на всю высоту. Т.е., действия следующие: 1. Выстраиваем блоки один за другим (сделано - float) 2. Делаем так, чтобы page-back растягивался на всю высоту. 3. Делаем обоим блокам width: 100% и перемещаем передний влево на эту же виличину (margin-left, margin right по -100%). Скрин показать не могу, только набросок в ФШ. 1 - то, что надо, 2 - то, что получается сейчас: Сорри, что так долго - рисовал как умею. -
Родительский div не хочет растягиваться на всю высоту дочерних.
Lex-DRL replied to Lex-DRL's question in HTML Coding
Хм... теперь почему-то меньший из дочерних блоков (page-back) не хочет растягиваться на всю высоту (следую этой инструкции): #page-back { background: green; min-height: 100%; } * html #page-back { /* Это, как я понял, хак для ишака */ height: 100%; } #page-front { background: blue; height: 40px; } -
Родительский div не хочет растягиваться на всю высоту дочерних.
Lex-DRL replied to Lex-DRL's question in HTML Coding
Действительно, помогло. Только я что-то не понял... overflow же отвечает за "обрезку" содержимого, если оно выходит за пределы родительского блока? P.S.: спасибо за мгновенный ответ. Не успел отредактировать пост, а уже... -
Родительский div не хочет растягиваться на всю высоту дочерних.
Lex-DRL posted a question in HTML Coding
3-ий день мучаюсь - не удаётся решить банальнейшую задачу. Родительский блок содержит 2 дочерних, которые располагаются друг за другом. Родительский блок должен "окружать" дочерние - а вместо этого он рисуется, словно ничего внутри него нет: HTML: <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html dir="ltr" xml:lang="ru" xmlns="http://www.w3.org/1999/xhtml" lang="ru"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Simple Test | Простой тест</title> <link type="text/css" rel="stylesheet" media="all" href="simpletest.css"> </head> <body> <div id="page"> <div id="page-back">Текст в блоке "page-back"</div> <div id="page-front">Текст в блоке "page-front"</div> </div> </body> </html> CSS: BODY, *, * html { border: none; background: none; margin: 0; padding: 0; } #page { background: black; color: white; padding: 10px; } #page-back, #page-front { float: left; width: 50%; } #page-back { background: green; } #page-front { background: blue; } Пробовал по всякому играться с параметрами height и min-height - проблема остаётся. Если у дочерних блоков убрать float - родительский рисуется как подобает. Но мне-то надо расположить их "side-by-side". Что я задал неправильно? Читал тут и тут - не помогает. -
Благодарю. Ушёл дальше тискать CSS. Тему можно закрывать. P.S.: инфу о подобных комбинациях селекторов имеет смысл добавить в шаг за шагом по CSS.
-
Veseloff, psywalker, спасибо большое. теперь всё встало на свои места. Просто не люблю "недопонимать". Последние уточнения. Есть ли какой-нибудь способ назначить определённое оформление только конкретной комбинации классов? Например: <div class="class1" /> <div class="class2" /> <div class="class1 class2" /> Возможно ли будет сделать, к примеру, чтоб первый блок был синим, второй - жёлтым, третий - красным? И как будет выглядеть в CSS такая конструкция? В одинаковом ли порядке для всех браузеров будет происходить перекрывание одинаковых свойств? Напр.: .class1 {...} /* Синий */ .class2 {...} /* Жёлтый */ ... <div class="class2 class1" /> В данном случае перекрывание происходит в таком порядке, как в CSS-файле (будет жёлтым); или в том, как они вызываются в теге div (будет синим)?
-
Только осваиваю CSS (кстати спасибо авторам сайта за такой информативный ресурс). Возникло следующее недопонимание: В генерируемых друпалом страницах блоки DIV имеют в названии класса пробелы. Например, <div class="field field-type-filefield field-field-cover"></div> Понятное дело, что к ним не получится обратиться селектором вида: .field field-type-filefield field-field-cover {...} Как я столкнулся с этой проблемой - поискал на сайте друпала и наткнулся на этот топик. Там даётся частичное решение, но всё равно кое-что остаётся неясным. Думаю, уместнее эти вопросы задать здесь. Если мы пишем конструкцию с пробелами в атрибуте class - это мы как бы присваеваем объекту сразу несколько классов? Т.е., на вышеозначенном примере блок одновременно присваевается классам "field", "field-type-filefield" и "field-field-cover", и может быть вызван любым из этих селекторов. Или же это у него такой единый "кривой" класс - "field field-type-filefield field-field-cover"? Насколько корректно обрабатывается разными браузерами способ, описанный digital_sword? Да и вообще, насколько он валиден?