Почему css. Почему CSS Grid лучше Bootstrap для создания макетов

Что такое этот CSS

CSS можно назвать формальным языком описания визуального вида документа. Полностю CSS звучит как Cascading Style Sheets , что русскому человеку понятнее Каскадные таблицы стилей, то есть КТС. КТС ясное дело никто не использует, а принято использовать CSS. Язык CSS появился в 17 декабря 1996 года.

Зачем нужны стили CSS в отдельном файле

Чтобы прописать стили в html, нужно внутри .. прописать ваши правила в теге

внутри которого пишутся правила. Он сам прописывается тоже в

— Если вы решили указать стиль прямо внутри содержимого , то следует использовать параметр style=»…»

Правильные правила для CSS и как комментировать в CSS

Тут конечно можно написать огромное количество теории, но у нас тут не справочник . Я покажу все на просто примере, главное помнить, что есть селекторы, свойства и значения. Селектор, это к чему будут применяться правила, свойство — это вид правил которое будем использовать, а значение, оно и есть значение. (свойство + значение = правило)

Написание выглядит так селектор { свойство: значение; }, если нужно применить несколько селекторов, пишем их через запятую , если несколько правил через точку с запятой . В конце всегда точка с запятой.

Чтобы закоменнтировать какой-либо текст в CSS нужно взять текст в такие вот кавычки /* текст */ и все 🙂

Как обещал, наглядные примеры CSS :

p {
font-family: Verdana;
background: white;
color: red;
}

Селектор здесь p, то есть для любого абзаца с тегами будут применяться данные правила. Чтобы вы не писали сверху, абзац будет белый с красным текстом шрифта Verdana. Даже если общий фон желтый, а шрифт другой.

У меня есть этот html:

Parting is such sweet sorrow! - Bill Rattleandrollspeer

И этот css (добавлен в конец сайта Site.css):

Fancify { font-size: 1.5em; font-weight: 800; font-family: Consolas, "Segoe UI", Calibri, sans-serif; font-style: italic; }

Итак, я бы ожидал, что цитата ("Parting - такая сладкая скорбь!") будет выделена курсивом и другого шрифта, чем имя цитаты (Bill Rattleandrollspeer), поскольку его тег span имеет класс "fancify", прилагается к нему. Класс следует обязательно увидеть, поскольку файл, в котором он появляется, ссылается на файл макета, который использует файл Site.css.

Какую ошибку новобранец я делаю сейчас?

UPDATE

Я подумал, может быть, проблема в том, что я добавил новый класс в Site.css после этого раздела в этом файле:

/******************** * Mobile Styles * ********************/ @media only screen and (max-width: 850px) {

Но я переместил его выше, и он все еще не работает, и не видел через F12 | Проверьте элемент для соответствующей метки.

ОБНОВЛЕНИЕ 2

Вот как сходит HTML:

И вот мое правило css в Site.css:

P span label .fancify { font-size: 1.5em; font-weight: 800; font-family: Consolas, "Segoe UI", Calibri, sans-serif; font-style: italic; display: inline; }

Но это не распознается. Я считаю это казнью css/html протокола и должен быть рассмотрен каким-то мировым телом. Опять же, я мог бы совершить какую-то глупую ошибку.

Здравствуйте, уважаемые читатели блога сайт. Сегодня я хотел бы поговорить о том, зачем вам может понадобиться при вашей работе с сайтом знание языка HTML (читайте про то, что это такое ), основы работы с таблицами каскадных стилей CSS (вступительную статью по теме вы найдете ), а так же понимание хотя бы основ и принципов , построения программ на языке PHP и логики работы с базами данных MySQL.

позволяет делать сайты, не владея все упомянутыми выше премудростями, но при этом у вас по ходу работы, наверняка, будут возникать вопросы и проблемы, которые вы не сможете решить средствами даже самой навороченной CMS (Joomla, WordPress, Друпал и т.д.).

Зачем может понадобиться при работе над сайтом знание языков (разметки, стилей, серверного программирования)

Либо вы не найдете такого пункта в админке CMS среди множества других настроек (логика авторов движков при размещении некоторых пунктов настройки остается непонятной и, возможно, здесь играет определенную роль сила привычки самого автора), либо разработчики вообще не включат такой пункт в админку системы управления контента. Невозможно реализовать настройки для всего через админку — туда, обычно, выводят только самые необходимые и часто используемые настройки.

Зачастую бывает проще решить проблему не штатными, предусмотренными в админке движка средствами, а напрямую, правя что-то в базе данных или же корректируя содержимое определенных файлов движка через доступ к ним по ФТП.

Да, для этого потребуется потратить время на изучение хотя бы основ языка разметки HTML, понять каким образом влияют каскадные таблицы стилей на внешний вид вебстраниц, а так же разобраться с устройством базы данных, научиться вносить в нее изменения. И, пожалуй, самое сложное — это понять базовые принципы написания кода на языке PHP для того, что бы понимать, что и где можно безболезненно поменять, а что трогать не стоит.

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

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

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

Плюс к этому список CSS правил, вынесенный в отдельный файл, позволяет унифицировать оформление ресурса. При необходимости всегда можно будет поменять что-то в дизайне не правя код всех вебстраниц, т.к. в этом случае достаточно будет поправить уже существующие или дописать новые стилевые свойства в общей для всех страниц таблице стилей.

C появлением таблиц стилей многие теги языка гипертекстовой разметки и их атрибуты стали считаться устаревшими и не рекомендованными для использования. Вместо них советуют использовать свойства CSS, выполняющие те же действия. Это отнюдь не означает, что HTML теперь уже изучать не надо, просто уменьшилось количество тегов и их атрибутов, которые надо знать и уметь использовать для создании и поддержания в должном состоянии сайта. Я постараюсь рассказать про те теги, которые я сам постоянно использую.

В каком редакторе лучше править или вносить изменения в код

Ничего сложного в этом нет, ведь по сути это даже не язык программирования, а гипертекстовая разметка, нечто похожее на синтаксис в русском языке. Что хотелось бы сразу посоветовать, опираясь на собственный опыт? Пробуйте писать теги самостоятельно в блокноте, типа Notepad++ (читайте мой ), а не в программах, типа Дримвьювер. Почему?

Да потому, что в этом случае вы набьете руку и запомните написание тегов и атрибутов. Да, в программах типа Дримвьювера удобнее верстать, т.к. вы тут же сможете его посмотреть в браузере, а варианты написания того или иного тега можно выбрать из выпадающего списка.

Но дело в том, что вам в основном придется править уже существующий код в файлах вашего движка и гораздо удобнее будет, если вы будете помнить написание всех тегов и их атрибутов наизусть (благо их не так много). Зачем для исправления одного тэга открывать файл в громоздком Дримвьевере, когда для этих целей вполне достаточно обычного блокнота, ну, или его продвинутого аналога под название Нотепад плюс плюс (ссылка приведена чуть выше).

Хотя, это мое личное мнение (ИМХО) и вам решать, что удобнее. Например, Евгений Попов , по курсам которого я изучал все это дело, судя по всему, приверженец Дримвьевера. Важно в принципе одно – чтобы вы правили код в том редакторе, который способен сохранять все внесенные изменения и который может, при желании, вернуть все как было (взад).

В этом случае, как бы вы не напортачили, все будет поправимо. И, конечно же, очень удобна подсветка синтаксиса языка, на котором вы пишете или редактируете код. Notepad++ — это безусловно мой выбор! О его возможностях я рассказал в приведенной чуть выше статье.

Наверное, рассказывать про разметку и ее оформление по очереди будет не совсем правильно, поэтому попробую говорить об их совместном использовании. Следует понимать, что CSS свойства записываются в один или несколько отдельных файлов, которые довольно легко вы сможете найти в теме оформления используемой для вашего движка.

В то время, как теги вебстраниц в современной CMS не записаны в каком-то одном или нескольких файлах, как было раньше, а генерируется (интерпретируется) из PHP. И именно уже сгенерированный таким образом Html код подсовывается браузеру для того, чтобы он в свою очередь интерпретировал его в удобоваримую для нас форму интернет-странички. Хитро, не правда ли?

Поэтому правка тегов в любой CMS не является такой уж тривиальной задачей, даже если вы полностью освоились с языком гипертекстовой разметки. Ведь тэги вам придется править в PHP файлах и, следовательно, нужно будет знать хотя бы его базовые понятия и синтаксис.

Но не волнуйтесь, для того чтобы править дизайн больших познаний в PHP от вас не потребуется. Тэги там лежат, как бы сказать, на поверхности и не составляет большого труда их идентифицировать и поправить при необходимость.

Какие инструменты вы сможете использовать

Проблема возникает, как правило, в другом. Как найти тот файл с расширением PHP, в котором формируется нужный фрагмент тэгов? Вот вопрос вопросов. Да, конечно, если у вас есть опыт в работе с данным движков, то вы, я думаю, соориентируетесь. Но если вы новичок и не знаете какой из сотен Пхп файликов за что отвечает?

Тут вам поможет великолепный плагин для не менее великолепного браузера , а так же упомянутый выше Notepad++, и не безызвестный многим . Эта связка программ поможет вам горы свернуть и позволит сэкономить массу времени.

В ближайших постах я собираюсь подробно рассказать, как использовать эти программы для эффективного решения возникающих проблем с сайтом. Да, чуть не забыл про незаменимую программу, позволяющую получить доступ по FTP – FileZilla ( уже имеется статья на эту тему). Ну и про мы, конечно же, тоже поговорим.

Ну вот, цели намечены, задачи поставлены, осталось только их выполнять. За сим разрешите откланяться.

Удачи вам! До скорых встреч на страницах блога сайт

Вам может быть интересно


Красивые русские шрифты для сайта и компьютера в онлайн сервисе Google Font - где скачать и как установить Адаптивный (отзывчивый) дизайн - оптимизация сайта для его просмотра на мобильных устройствах
Gif, Png или Jpg - форматы растровой графики для веба, их плюсы и минусы при использовании на сайте

По мере роста популярности веба в девяностых годах, также росло намерение применять к сайту определённый дизайн. Веб-разработчики полагались на конкретные теги HTML для улучшения веб-страниц:

  • определял шрифт всего HTML-документа;
  • определял гарнитуру, цвет и размер текста, который находится внутри;
  • выравнивал по центру всё своё содержимое;
  • увеличивал размер текста;
  • отображал текст перечёркнутым.

Также могли быть использованы несколько атрибутов HTML:

  • bgcolor определял цвет фона элемента;
  • text определял цвет текста;
  • атрибуты margin могли быть использованы для добавления пространства с любой стороны элемента.

Зачем избегать таблиц?

Но прежде всего, для создания колонок, визуального выравнивания элементов и, в целом, позиционирования элементов относительно друг друга, веб-разработчики использовали элемент

для дизайна своих веб-страниц, потому что он естественным образом обеспечивал визуальную сетку .

Логотип Слоган
Copyright 2015
Левое меню Основное содержимое Правый сайдбар

Такой подход был громоздким по нескольким причинам:

  • таблицы в HTML многословны : они требуют много шаблонного кода;
  • разметка была семантически неверной : таблицы должны использоваться для многомерных данных;
  • изменение макета требовало изменения разметки: если мы хотели переместить левую колонку вправо, то должны были модифицировать структуру HTML ;
  • таблицы были склонны к ошибкам синтаксиса : строки и ячейки для корректности должны идти и вкладываться определённым образом;
  • разметка была нечитаемой : таблицы вкладывались в другие таблицы, чтобы получить дополнительные колонки внутри колонок.

Именно поэтому от применения таблиц в качестве инструмента вёрстки медленно отказались и вместо них был использован CSS.

Что такое CSS

CSS (Cascading Style Sheets) означает каскадные таблицы стилей и представляет собой язык разметки стилей (как HTML или XML). Таким образом, CSS ничего не представляет сам по себе, если не связан с HTML-документом.

CSS привносит жизнь в HTML-документ, выбирая шрифты, применяя цвета, определяя отступы, позиционируя элементы, анимируя взаимодействия и многое другое.

Как работает CSS

CSS выбирает элемент HTML (например, абзац), задаёт свойство для изменения (такое как цвет) и применяет определённое значение (например, красный):

P { color: red;}

Слово «стиль» может быть обманчивым. Можно подумать, CSS используется только для изменения цвета текста, размера и типа шрифта. Но CSS может задать компоновку HTML-документа, определяя высоту, ширину, внутренние и внешние поля, положение, колонки и др.

Где я могу писать CSS?

CSS как атрибут

Вы можете писать CSS непосредственно в элементах HTML с помощью атрибута style:

Это важный текст.

CSS в

Вы можете использовать тег

Этот абзац будет красным.

CSS в отдельном файле

Вы можете писать свой CSS в отдельном файле с расширением.css, а затем связать его с HTML с помощью тега .

P { color: red; }

Привет, мир

Этот абзац будет красным.

Данный HTML-документ, который «вызывает» файл CSS, в нашем случае файл с именем style.css, расположен в той же папке, что и CSS-файл.

Этот третий метод , использующий отдельный CSS-файл, является предпочтительным .

Иногда поведение CSS может сбивать с толку. Узнайте о некоторых хитрых свойствах, которые могут вызывать наиболее распространенные проблемы, и как эти проблемы можно решить.

CSS - это беспорядок. CSS впервые был внедрен в 1995 году, и изначально предназначался не для стилизации веб-сайтов и веб приложений, а для оформления простых текстовых документов. С тех пор CSS прошел сложный путь. Возможно, слишком уж сложный.

В первую очередь CSS не был предназначен для верстки многоколоночных документов, адаптивных интерфейсов, и много другого. Вот почему он стал языком с множеством хаков и глюков, своего рода чудной паровой машиной с множеством расширений и примочек.

С другой стороны, это делает CSS довольно забавным. И в некоторой степени - ему мы обязаны тем, что у нас есть работа. Я полностью убежден, что разработка абсолютно кроссбраузерного CSS пока невозможна, и вряд ли будет возможна в обозримом будущем.

В любом случае я пишу не для того, чтобы высказывать свои убеждения и недовольства, а для того, чтобы поговорить о CSS. Сегодня мы поднимем вопросы о некоторых распространенных проблемах и постараемся найти варианты их решения.

Очистка потока (float clearing) - вопрос, старый, как мир

Думаю, это наиболее распространенный вопрос, который вызывает недоумение при попытках стилизовать элементы. Он стар, как мир, так что я на 100% уверен, что любой, кто когда-либо писал стили на CSS, попадал в подобную ловушку.

В основном, когда элемент содержит внутри себя плавающие (float) блоки, он “схлопывается” - принимает минимальную высоту. Это происходит оттого, что плавающие элементы выбиваются из общего потока элементов, так что блок, в который обернуты эти элементы, ведет себя так, как будто не содержит внутри себя никаких дочерних элементов.

Есть множество путей, позволяющих исправить подобное поведение. В прошлом приходилось добавлять пустой div со свойством clear: both после всех плавающих элементов, в конце контейнера. Также можно было этот div заменить тегом hr - тоже не самый лучший вариант.

Но Nicolas Gallagher предложил новый способ очистки потока в родительском элементе без загрязнения разметки дополнительными тегами. После бурных дискуссий и тестов был выявлен рабочий вариант с минимальным набором свойств, последняя версия которого приведена здесь:

Clearfix:after { content: ""; display: table; clear: both; }

Вообще-то я солгал говоря, что это версия - самая последняя, но это определенно самый оптимизированный вариант. Если вам нужна поддержка IE 6/7, то вам понадобиться это дополнительный код:

Что вам действительно потребуется - так это определить класс .clearfix в вашем проекте, который вы позже можете прописать элементам, в которых требуется произвести очистку потока. Это самый простой способ работы с плавающими элементами.

Как бороться с пространством между inline-block элементами?

Давайте попробуем спозиционировать элементы в одну строку, но без использования свойства float , а определив их как строчно-блочные (inline-block) элементы. Свойство display: inline-block долгое время оставалось недооцененным и мало-используемым, но мы наконец-то разобрались с тем, как оно работает, и оценили сильные стороны. В наши дни все больше и больше разработчиков интерфейсов избавляются от плавающих элементов в пользу строчно-блочных элементов, при условии что это возможно.

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

Вот тут вы скажете: “а какая тогда может быть проблема с ними?”. Проблема-то и заключается в том, что они - наполовину строки, и, как и строки, они отделяются друг от друга небольшим промежутком, равными ширине пустого символа. Для стандартного шрифта 16px размерность этого расстояние составляет 4px. В большинстве случаев, это расстояние составляет 25% от размера шрифта. В любом случае, это раздражает, когда ты пытаешься выстроить элементы. Давайте предположим, что у нас есть родительский элемент шириной в 600px с тремя дочерними строчно-блочными элементами шириной 200px. Если не избавиться от этих четырехпиксельных пробелов, получим, что результирующая ширина элементов будет больше ширины родительского элемента (200 * 3 + 4*2 = 608).

К счастью, существует несколько способов избавиться от этих нежелательных промежутков, каждый со своими достоинствами и недостатками. Чтобы быть абсолютно честным, скажу, что идеальных решений пока не существует. Давайте взглянем на эти способы, один за другим!

Используя разметку: убираем пробелы

Обратите внимание на эту разметку - её я и описывал за несколько строк до этого.

I"m a child!
I"m a child!
I"m a child!

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

I"m a child!
I"m a child!
I"m a child!

Этот способ работает, но очень ухудшает читабельность кода. Возможно, мы можем преобразовать наши теги вместо того, чтобы выстраивать их в одну строку, код станет более читабельным:

I"m a child!
I"m a child!
I"m a child!

Ещё один необычный вариант:

I"m a child!
I"m a child!
I"m a child!

Да, этот подход работает! Но вообще я бы не рекомендовал его к применению, так как он не является интуитивно понятным. Несмотря на то, что нам удалось избавиться от нежелательного пространства между элементами, взамен мы получили довольно неприятный код. Давайте попробуем что-нибудь другое.

Разметка: закомментируем промежутки

А что если закомментировать промежутки вместо того, чтобы избавляться от них?

I"m a child!
I"m a child!
I"m a child!

Ого! Это уже намного лучше! Код остался читабельным, и вообще все выглядит отлично. Даже если это выглядит странным на первый взгляд, возможно, подобный подход будет вам полезен. Лично я использую этот подход, когда мне нужно убрать пространство между строчно-блочными элементами.

Однако, кое-кто скажет, что это не идеальный способ, так как это решение требует контроля со стороны разметки, а проблемы с позиционированием - это дело CSS и только CSS. И они будут абсолютно правы. Это приводит нас к решениям на базе CSS.

CSS: манипуляция пространством между символами. Свойство letter-spacing

Свойство letter-spacing используется для того, чтобы задать ширину пространства между символами. Идея нашего способа состоит в том, чтобы сделать пространство между символами меньше ширины пробела, а для дочерних элементов привести его к изначальному виду:

Parent { letter-spacing: -0.3em; } .child { letter-spacing: normal; }

Эта техника используется в Griddle - сеточном движке, разработанном Nicolas Gallagher, так что можем считать этот вариант довольно надёжным. Однако, мне не очень нравится то, что мы опираемся на какое-то магическое число. Вдобавок, для некоторых шрифтов придется выставлять значение ниже -0.3em - например, -0.31em или -0.32em. Приходится подстраиваться под каждый конкретный случай.

CSS: отрицательный внешний отступ

Еще один способ, который похож на предыдущий - использование отрицательного отступа. Данный способ даёт сбои в IE 6/7, так как они не дружат с отрицательными отступами. К тому же, надо убирать отрицательный отступ у первого дочернего элемента, чтобы он не смещался влево, и чтобы дочерние элементы полностью влезали в контейнер:

Child { margin-left: -0.25em; } .child:first-of-type { margin-left: 0; }

Если вам не надо поддерживать IE 6/7, или если у вас есть отдельный файл стилей для этих браузеров - думаю, это довольно-таки неплохое и безопасное решение.

CSS: размер шрифта

И последний, но далеко не худший способ заключается в том, что можно попробовать выставить размер шрифта родительского элемента в 0, чтобы пустые символы также стали нулевой ширины, а потом восстановить размер шрифта для дочерних элементов.

Parent { font-size: 0; } .child { font-size: 16px; }

Этот способ работает замечательно, но у него тоже есть свои недостатки:

  • вы не можете восстановить размер шрифта, используя относительную величину em , так как размер шрифта родительского элемента составляет 0px
  • пробелы не убираются в стандартных браузерах систем Android до версии Jelly Bean
  • если менять в контексте @font-face , шрифт может не сглаживаться в Safari 5
  • в некоторых браузерах не разрешен шрифт нулевой высоты, например, китайский Chrome выставляет такой шрифт в стандартные 12px

Так что это определенно не самое лучшее решение. Как уже говорил ранее, я бы остановился на использовании способа с комментариями.

Разбираем абсолютное позиционирование

Позиционирование - довольно хитрая штука. Многие новички застревают на моментах, когда нужно спозиционировать элемент на странице. И они обычно слабо используют, или наоборот - злоупотребляют - свойством position . Это свойство определяет, как будет сдвинут элемент относительно какой-то стороны (top , right , bottom и left ). Оно принимает четыре значения:

  • static - значение по умолчанию, смещения не работают
  • relative - сдвигается визуальный слой, но не сам элемент
  • absolute - сдвигается элемент в окружающем контексте (первого не-статичного предка)
  • fixed - элементы позиционируются в области просмотра, неважно, какова его позиция в DOM

Обычно проблема возникает при использовании position: absolute . Возможно, вы уже сталкивались с подобным: задаете элементу абсолютную позицию, так как хотите, чтобы он смещался относительно верхнего правого угла родительского элемента (например, как маленькая кнопка закрытия модельного окна, или что-то похожее)

Element { position: absolute; top: 0; left: 0; }

… а он отображается в верхнем правом углу окна. А вы думаете: “какого фига?”. На самом деле, это предопределенное поведение браузера. Ключевое слово здесь - контекст .

Вышеприведенный код на самом деле означает: “я хочу, чтобы мой элемент размещался в правом верхнем углу относительно его контекста ”. Так что такое “контекст ”? Это первый не-статичный предок . Это может быть прямой родительский элемент. Или родитель родительского элемента. Или родитель родителя родителя... И так будет произведен поиск до первого элемента, чье позиционирование не задано как static .

Может быть несколько сложно для понимания, особенно для начинающих, но если вы однажды усвоили это - вы можете очень гибко управлять абсолютным позиционированием.

Вот простой пример, показывающий то, о чем мы только что говорили. Два родительских элемента, у каждого внутри дочерний элемент, который спозиционирован абсолютно значениями top: 0 и right: 0 . Слева родительский элемент спозиционирован относительно (ожидаемое поведение). Справа родительский элемент оставлен статичным (неверно).

Когда применять высоту/ширину в 100%?

Высота в 100%

Давайте сперва разберемся с менее сложным примером. Когда использовать height: 100% ? Вообще-то многие из нас как минимум единожды задавались вопросом “какого черта? Я рассчитывал на то, что моя страница будет как минимум занимать всю высоту экрана!” Я прав?

Для того, чтобы ответить на этот вопрос, необходимо понимать, что на самом деле означает свойство height: 100% : полную высоту родительского элемента. Это далеко не означает “всю высоту экрана”. Так что если вы хотите, чтобы ваш контейнер занимал всю высоту экрана, height: 100% недостаточно.

Почему? Потому, что родительский элемент вашего контейнера (body ) имеет высоту по умолчанию auto , что означает, что его размер определяется содержимым. Так что можете попробовать проставить height: 100% и для элемента body - это все равно не даст желаемого эффекта.

Почему? Потому, что родительский элемент тега body (html ) имеет высоту по умолчанию auto , что означает, что его размеры зависят от содержимого. А что если попробовать задать элементу html height: 100% ? Работает!

Почему? На самом деле потому, что корневой элемент (html ) - это не самый последний родительский блок на странице - есть еще окно просмотра (viewport). Проще говоря - это окно браузера. Так что если задать height: 100% элементу html , вы сделаете его высоту, равной высоте браузера. Вот так-то просто.

Результат нашей истории отражен в следующем коде:

Html, body, .container { height: 100%; }

А что если у родительского элемента задан min-height, но не задан height?

Roger Johansson недавно выявил проблему с height: 100% в случае когда у родительского элемента нет назначенной высоты, но для него задана минимальная высота. Я не буду углубляться в описание, но в итоге решение состоит в том, что родительскому элементу нужно задать высоту в 1px, так чтобы дочерний элемент мог растянуть его до min-height .

Parent { min-height: 300px; height: 1px; /* Необходим для того, чтобы дочерний элемент раскрылся на всю высоту min-height */ } .child { height: 100%; }

Ширина в 100%

Теперь давайте разберемся с параметром width: 100% . Сразу напомню, что, как и с высотой, настройка width: 100% - это указание, что элемент должен быть такой же ширины, как и родительский элемент. Никаких сюрпризов здесь нет.

А сейчас поделюсь небольшим секретом. Ширина - не совсем правильное название для этого свойства. Свойство width на самом деле не определяет всю ширину элемента, а только ширину его содержимого, что совершенно отличается от полной ширины элемента.

Если мы добавим внутреннее поле и границы к вашему элементу, которому выставлена ширина width: 100% , то этот элемент уже не будет вписываться в родительский - он будет выходить за его пределы. Все это из-за полей и границ. И именно поэтому свойство width должно было бы называться content-width (шириной контента). Пожалуйста, рассмотрите следующий пример, чтобы понять, что я имею в виду:

Ширина родительского элемента равна 25em . Ширина дочернего элемента равна 100% (от его родительского элемента), но также имеет поля размером 1em (1em слева, 1em справа. В сумме по горизонтали это будет 2em), а также границу в 0.5em (всего 1em по горизонтали), что приводит к тому, что результирующая ширина дочернего элемента состовит 25em(100%) + 2em + 1em = 28em. Хмм… Хьюстон, похоже, у нас проблема.

Есть четыре способа поправить положение дел. Первый, и определенно лучший - избегать установки width: 100% , особенно если в этом нет пользы, как в данном случае. Дочерний элемент является блочным элементом, что автоматически расширяет его до ширины родительского элемента (без той проблемы, что мы видим выше). К сожалению, если мы имеем дело со строчно-блочными элементами, то можно воспользоваться следующим фиксом.

Можно не использовать width: 100% , и выставить конкретную ширину элементу самостоятельно. В нашем случае, это 20 - (2 + 1) = 22em. Надо сказать, что это решение плоховато, так как нужно вручную вычислять необходимую ширину элемента. Поищим другой способ!

Третьим вариантом будет использование calc() , чтобы автоматизировать вычисления: width: calc(100% - 3em) . Все равно плохо. Во-первых, нам нужно вычислять сумму горизонтальных полей + вертикальных границ. Во-вторых, calc() поддерживается не самым лучшим образом в браузерах (его не поддерживают IE 8, Safari 5, Opera 12 и стандартный браузер Android).

Четвертый вариант - использовать свойство box-sizing: border-box . По существу, она меняет поведение модели контейнера так, что свойство width отражает суммарную ширину элемента, границы и поля включены. Хорошие новости заключаются в том, что поддержка браузерами этого свойства довольно хороша (все, кроме IE 7- и Opera 9).

Как не ошибиться с z-index?

Все элементы на странице позиционируются в трехмерном пространстве: в дополнение к вертикальному и горизонтальному позиционированию, элементы также располагаются вдоль оси Z. На первый взгляд, эта концепция кажется довольно простой: элементы с более высоким z-index отображаются поверх элементов с более низким z-index.

К сожалению, вещи могут быть более сложными, чем они кажутся на первый взгляд. Я вообще уверен, что это самое запутанное CSS-свойство. Уверен, что проблемы с z-index - самые распространенные и раздражающие, с которыми только можно встретиться во время работы с CSS. Но мы постараемся найти решение.

Начнем с начала: свойство z-index не работает со статичными элементами. Для того, чтобы сдвинуть элемент по оси Z, нужно определить позиционирование для элемента, как relative , absolute или fixed . Так что первая вещь, которую мы должны сделать - убедиться, что элемент правильно спозиционирован, прежде чем вообще задумываться о том, чтобы назначить ему z-index.

Теперь, следует запомнить, что элементы в DOM не располагаются на одном и том же слое. Это означает, что выставления z-index в очень большое значение может быть недостаточно для того, чтобы отобразить его поверх других элементов. Это называется контекстом наложения .

Меняя положение по оси Z, элементы можно заставить перекрывать друг друга в нужном порядке. Вот как, согласно CSS спецификации отображаются элементы в рамках одного группового контекста:

  1. фон и границы элемента, который формирует групповой контекст
  2. дочерние групповые контексты с отрицательными уровнями (первыми идут наименьшие)
  3. внутри-потоковые, не-строчные, неспозиционированные потомки
  4. не-спозиционированные плавающие элементы
  5. внутри-потоковые, строчные, неспозиционированные потомки, включая таблицы и большинство строчных блоков
  6. дочерние групповые контексты с уровнем 0 и спозиционированные потомки с уровнем 0
  7. дочерние групповые контексты с положительными уровнями (от меньшего к большему)

Когда результат ужасает

Хорошо, это была самая основная информация о свойстве z-index. Знания об этом могут сэкономить вам много времени, и уменьшить количество проблем, уж будьте уверены. К сожалению, этого недостаточно. Это были ещё цветочки!

Дело в том, что каждый групповой контекст имеет свой собственный масштаб по оси Z. В основном, элемент A в групповом контексте 1 и элемент B в групповом контексте 2 не могут взаимодействовать посредством z-индексов. Это значит, что элемент A является частью группового контекста, который находится в самом низу порядка группировки, и нет возможности вывести его перед элементом B, который находится в другом групповом контексте, который имеет более высокий групповой порядок, даже если вы зададите ему очень высокий z-index.

Но подождите - на самом деле, все еще хуже. Элемент html формирует корневой групповой контекст. В таком случае, каждый спозиционированный (не-статичный) блок со значением z-index больше, чем auto создает новый групповой контекст. Ничего нового в этом нет. А вот здесь все становится довольно печально: некоторые CSS-свойства, совершенно не связанные с позиционировнием, создают новые групповые контексты. К примеру, opacity .

Да, да - свойство opacity создает новый групповой контекст. Так же действуют свойства transform и perspevtive . Но ведь это не имеет смысла, не так ли? Значит, что если у вас есть элемент с прозрачностью, отличающейся от 1, или с трансформацией, отличной от none - у вас есть потенциальная проблема.

К сожалению, каждая проблема с z-index уникальна, так что нет возможности предложить какое-либо универсально решение для всех проблем с z-index. Под конец можно вывести несколько заключений:

  • всегда проверяйте, что вашим элементам задано позиционирование, прежде чем применять к ним z-index
  • не используйте z-index с большими значениями, это абсолютно бессмысленно. В большинстве случаем вполне достаточно z-index: 10
  • убедитесь, что элементы, которым вы хотите изменить порядок отображения, принадлежат одному групповому контексту
  • если у вас до сих пор не решилась проблема, убедитесь, что у вас на пути нет трансформированных или полупрозрачных элементов

Что такое объединение отступов?

Я думаю, что это один из “глюков” CSS, который отнял большую часть моего времени. Полагаю, что вы скажете, что это настолько же странно, как и поведение z-index. Короче говоря, объединение отступов это когда верхний и нижний отступ двух элементов сливаются в наибольший из двух этих отступов. Вообще говоря, вертикальный отступ между двумя блоками рассчитывается так:

Видимо, это именно та причина, по которой все работает именно так (как определено и описано в спецификации CSS). Как бы то ни было, иногда мы не хотим, чтобы вертикальные отступы объединялись. Для того, чтобы понять, как это исправить, сперва рассмотрим причину такой проблемы. Объединение отступов случается в трех различных случаях:

Смежные блоки

Когда два смежных блока имеют вертикальные отступы, они объединяются в наибольший отступ из нижнего отступа одного элемента и верхнего отступа второго. Это можно предотвратить несколькими путями:

  • clear: left; float: left; для смежных блоков (right тоже работает)
  • display: inline-block on siblings (также срабатывает inline-table)

Родительский элемент и первый/последний дочерний элемент

Обычно, родительский верхний отступ и верхний отступ первого дочернего элемента объединяются в наибольший отступ. Аналогично, родительский нижний отступ и нижний отступ последнего дочернего элемента объединяются в наибольший. Этот феномен также известен как “объединение предка”. Есть несколько решений для борьбы с таким поведением. Большинство из них состоят в добавлении одного из следующих свойств к родительскому элементу:

  • overflow: hidden (или другое, отличное от auto)
  • padding: 1px (или любое другое значение, больше 0); некоторые браузеры даже поддерживают субпиксельные значения)
  • border: 1px solid transparent (или любая граница)
  • display: inline-block (также работают строчные таблицы - inline-table)
  • float: left (right также подходит)

Следующий пример демонстрирует эти фиксы в действии:

Пустые блоки

Когда у пустого блока нет ни границы, ни полей, ни высоты - его верхняя и нижняя граница объединяются в одну. В таком случае это подходит под первый или второй случай, которые описаны выше - объединение границ с родителем/смежным элементом. Тем не менее, пустые элементы - тоже, в общем, плохая идея, так что я надеюсь, что вам не придется сталкиваться с ними часто.

Итоги

Ух ты, довольно много всего, не правда ли? Но, к сожалению, это лишь вершина айсберга багов, хаков и глюков. Я описал лишь наиболее часто встречаемые проблемы, с которыми вы можете столкнуться во время работы с CSS, но остается еще очень много подобных вещей, как несовместимость браузеров, беспорядок в префиксах производителей, специфичность селекторов, каскады и наследование, и многое другое.

В любом случае, надеюсь, что некоторые решения позволят вам сэкономить время.

 
Статьи по теме:
LG Optimus L9 - Технические характеристики
Старший аппарат L-серии смартфонов LG вышел на рынок самым последним, уже практически под елочку. Смартфон оснащен огромным, 4,7-дюймовым экраном, двухъядерным процессором и гигабайтом оперативной памяти. При этом он наследует все характерные черты серии:
Как заработать на группе в контакте (ВК): Полное руководство!
Многие администраторы пабликов интересуются, как заработать на группе ВКонтакте, как быстро набрать подписчиков. Современные сервисы раскрутки позволяют это сделать быстро и с минимальными усилиями. Как заработать на группе ВКонтакте: проверенные методики
Правильная установка виндовс 8
В этой статье мы разберем вопрос, как установить Windows 8 с диска. Здесь нет ничего сложного, однако иногда возникают определенные трудности. Чтобы не попасть в безвыходное положение, внимательно ознакомьтесь со статьей. Здесь мы рассмотрим все проблемы,
Онлайн фоторедактор на Яндекс диске
Хотите легко и качественно обработать фото онлайн?. Наш бесплатный фоторедактор быстро исправит недостатки и улучшит качество цифровых фотографий. Обрезка, поворот и изменение размера Самыми востребованными в фоторедактировании являются такие базовые оп