Поплавки

Назначение CSS Flexbox

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

CSS Flexbox позволяет создать адаптивный дизайн намного проще, чем с использованием Float и позиционирования.

Flexbox можно использовать как для CSS разметки целой страницы, так и её отдельных блоков.

Поддержка CSS Flexbox браузерами

CSS Flexbox поддерживается всеми используемые на сегодняшний момент современными браузерами (с использованием префиксов: IE10+, Edge12+, Firefox 2+, Chrome 4+, Safari 3.1+, Opera 12.1+, iOS Safari 3.2, Opera mini, Android 2.1+, Blackberry 7+).

Hidden

Это значение противоположность . Оно скрывает любой контент, выходящий за рамки контейнера. Повторим первый пример, но с примененным к контейнеру свойством:

See the Pen
overflow hidden by Андрей (@adlibi)
on CodePen.

Текст, который выходит за пределы , перестал быть видимым.

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

Переполнение по горизонтали и вертикали

Свойства и
может изменить переполнение содержимого по горизонтали или по вертикали (одновременно):

Свойство указывает, что делать с левый/правый краями содержания.
Свойство указывает, что делать с верхним/нижним краями содержания.

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

Пример

div {
   overflow-x: hidden; /* Скрыть горизонтальную полосу прокрутки */
   overflow-y: scroll; /* Добавить вертикальную полосу прокрутки */}

Свойство Описание
overflow Указывает, что произойдет, если содержимое переполняет элемента блока
overflow-x Указывает, что делать с левым и правым краями контента, если переполнена область содержимого элемента
overflow-y Указывает, что делать с верхним/нижним краями контента, если переполнена область содержимого элемента

Что переопределяем

Переопределять можно стандартные теги html:

p {
    text-align: center;
    color: red;
}

class

p.center {
    text-align: center;
    color: red;
}
p.large {
    font-size: 300%;
}

This paragraph will be red and center-aligned.

This paragraph will be red, center-aligned, and in a large font-size.

.center {
    text-align: center;
    color: red;
}

Уникальные (единожды встречаемые на странице id-шники) описываются так:

#para1 {
    text-align: center;
    color: red;
}

Hi! I will be in center and red.

Несколько одинаковых стилей для различных тегово можно задавать через запятую

h1, h2, p {
    text-align: center;  /* Комментарий */
    color: red;
}

Flex — это …

Flex переводится с английского как «гибкий». 

Как Вы заметили в нашей блочной верстке все блоки div встали в одну колонку друг под другом. Очень часто нужно блоки выстроить слева направо. Для этой цели есть несколько способов. Я продемонстрирую самый современный и несущий много возможностей. Этот способ называется flex (flex-верстка).

Обратите внимание на полностью бесплатный курс HTML, на котором Вы быстро сможете стать экспертом верстки. В файле style.css добавьте для body новое свойство display: flex;

Сохраните (Ctrl+S) и обновите страницу в браузере (Ctrl+F5). Вы увидите, что блоки пропали. На самом деле блоки есть, просто теперь они выстроились в ряд слева направо, но их не видно, потому что у них ширина равна 0. После того, как мы задали для body новое свойство flex, дочерние элементы body выстроились в ряд. Сейчас каждому div задайте одинаковую ширину width: 33%; .Сохраните и обновите. В результате будет следующая картина:

В файле style.css добавьте для body новое свойство display: flex; . Сохраните (Ctrl+S) и обновите страницу в браузере (Ctrl+F5). Вы увидите, что блоки пропали. На самом деле блоки есть, просто теперь они выстроились в ряд слева направо, но их не видно, потому что у них ширина равна 0. После того, как мы задали для body новое свойство flex, дочерние элементы body выстроились в ряд. Сейчас каждому div задайте одинаковую ширину width: 33%; .Сохраните и обновите. В результате будет следующая картина:

А файл style.css сейчас выглядит так:

body{
    background-color: gray;
    display: flex;
}
#header{
    background-color: #fff;
}
.h1{	
    font-size: 30px;
    color: #000;
    text-align: center;
    margin: 0;
    padding-top: 20px;
    padding-bottom: 20px;
}
#header{
    background-color: #126b6a;
    height: 20vh;
    width: 33%;
}
#main{
    background-color: #51ede4;
    height: 60vh;
    width: 33%;
}
#footer{
    background-color: #126b6a;
    height: 20vh;
    width: 33%;
}

Flex-верстка имеет очень много возможностей. Продолжайте изучать интересные и перспективные HTML-CSS и скоро Вы станете профессионалом веб-разработки!

Переходим к следующему уроку!

Выравнивание flex-элементов

Во Flexbox выравнивание элементов внутри контейнера осуществляется по двум направлениям (осям).

Выравнивание flex-элементов по направлению главной оси

Выравнивание элементов вдоль основной оси осуществляется с помощью CSS свойства :

justify-content: flex-start;
/* flex-start (flex-элементы выравниваются относительно начала оси) – по умолчанию
    flex-end (flex-элементы выравниваются относительно конца оси)
    center (по центру flex-контейнера)
    space-between (равномерно, т.е. с одинаковым расстоянием между flex-элементами)
    space-around (равномерно, но с добавлением половины пространства перед первым flex-элементом и после последнего) */

Выравнивание flex-элементов вдоль поперечной оси

Выравнивание flex-элементов во flex-контейнере по направлению поперечной оси осуществляется с помощью CSS-свойства :

align-items: stretch;
/* stretch (растягиваются по всей длине линии вдоль направления поперечной оси) – по умолчанию
    flex-start (располагаются относительно начала поперечной оси)
    flex-end (относительно конца поперечной оси)
    baseline (относительно базовой линии)
    center (по центру) */

Выравнивание линий flex-контейнера

CSS Flexbox позволяет выравнивать не только сами flex-элементы, но и линии на которых они расположены.

align-content: stretch
/* stretch (растягиваются по всей длине поперечной оси) – по умолчанию
    flex-start (относительно начала поперечной оси)
    flex-end (относительно конца поперечной оси)
    center (по центру)
    space-between (равномерно, т.е. с одинаковым расстоянием между линиями)
    space-around (равномерно, но с добавлением половины  пространства перед первой линией и после последней) */

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

CSS-свойство align-self

Свойство в отличие от предыдущих (, и ) предназначено для flex-элементов. Оно позволяет изменить выравнивание flex-элемента вдоль направления поперечной оси. Свойство может принимать такие же значения как .

align-items: stretch; /* auto (по умолчанию) || stretch || flex-start || flex-end || baseline || center */

Пример:

<div class="flex-container">
  <div class="flex-container_element-1">
    1
  </div>
  <div class="flex-container_element-2">
    2
  </div>
  <div class="flex-container_element-3">
    3
  </div>
  <div class="flex-container_element-4">
    4
  </div>
</div>

CSS:

.flex-container {
  display: flex;
  width: 300px;
  height: 150px;
  align-items: center;
  padding: 10px;
  background-color: #efefef;
}
.flex-container_element-1,
.flex-container_element-2,
.flex-container_element-3,
.flex-container_element-4 {
  flex-basis: 70px;
  text-align: center;
  padding: 15px;
  font-size: 30px;
}
.flex-container_element-1 {
  align-self: flex-start;
  background: #fe4;
}
.flex-container_element-2 {
  align-self: flex-end;
  background: pink;
}
.flex-container_element-3 {
  align-self: stretch;
  background: lime;
}
.flex-container_element-4 {
  align-self: auto;
  background: cyan;
}

Расстояние между инлайн-блочными элементами

С этой проблемой сталкивался каждый CSS-новичок.

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

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

В этом моменте начинаются истерики и появляются костыли с волшебными цифрами вроде .

Разберемся на примере: есть два элемента с одинаковой шириной и высотой, и требуется, чтобы они занимали 50/50 доступного пространства внутри своего родителя.

Добавляем стили:

и получаем вот это:

Есть 2 распространенных способа решения этой проблемы.

  1. использовать комментарии;
  2. удалить пространство между тегами в HTML-файле.

Теперь все нормально:

Примечание переводчика:Строчно-блочные элементы воспринимаются браузером как обычные слова в предложении, поэтому он разделяет их пробелом, ширина которого примерно равна 4px. Оба способа позволяют убрать этот пробел на физическом уровне.Также можно воспользоваться CSS и установить для контейнера нулевой размер шрифта. При этом пробел сохранится, но будет иметь нулевую длину. Этот способ часто используется, но подходит не для всех ситуаций.

Результат

На экране вы увидите небольшую рамку с текстом и с границей серого цвета.

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

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

Срок службы охлаждающих жидкостей типа «Тосол» и «Лена» ограничивается долговечностью присадок и обычно составляет 2 года; по пробегу для различных автомобилей в среднем составляет 50000 км.

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

Выбирайте точки останова правильно #

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

Выберите основные точки останова, начав с малых значений, и постепенно увеличивая

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

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

Второй шаг — изменять размер браузера до тех пор, пока между элементами не возникнет слишком много белого пространства, и прогноз просто перестанет хорошо смотреться. Решение несколько субъективное, но размер в — это определенно слишком широко.Макет приложения достиг той точки, когда нужно подправить дизайн.

Чтобы вставить точку останова при ширине , создайте два медиа-запроса в конце CSS-кода для компонента: один запрос при ширине до , а другой — более .

Третий шаг — выполните рефакторинг CSS-кода. В медиа-запрос для в добавьте CSS-код только для маленьких экранов. В медиа-запрос для в добавьте CSS-код для больших экранов.

При необходимости выберите второстепенные точки останова

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

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

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

Оптимизируйте текст для чтения

Согласно классической теории удобочитаемости, идеальный столбец должен содержать от 70 до 80 символов в строке (примерно от 8 до 10 слов на английском языке). Таким образом, каждый раз, когда ширина текстового блока превышает 10 слов, подумайте о добавлении точки останова.Текст, читаемый на мобильном устройстве.Текст, читаемый в браузере настольного компьютера, с добавленной точкой останова для ограничения длины строки.

Давайте подробнее рассмотрим приведенный выше пример сообщения в блоге. На маленьких экранах шрифт Roboto в отлично работает, давая 10 слов в строке, но на больших экранах требуется точка останова. В этом случае, если ширина браузера больше, чем , идеальной шириной контента будет .

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

Блоки CSS 3: ТЕНИ БЛОКОВ

box-shadow

Свойство box-shadow позволяет добавить тень вокруг блока. Оно работает так же, как свойство text-shadow. Данное свойство должно использовать, по крайней мере, первое из следующих двух значений, а также цвет.

ГОРИЗОНТАЛЬНОЕ СМЕЩЕНИЕ

Отрицательные значения позиционируют тень слева от блока.

ВЕРТИКАЛЬНОЕ СМЕЩЕНИЕ

Отрицательные значения позиционируют тень над блоком.

РАЗМЫТИЕ

Если данное значение отсутствует, то тень изображается в виде сплошной линии, как граница.

РАСПРОСТРАНЕНИЕ ТЕНИ

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

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

Браузеры Chrome, Firefox и Safari поддерживают данный эффект с помощью свойств -moz-box-shadow и -webkit-box-shadow. Они не входят в спецификацию CSS, но их использование обеспечивает работоспособность эффекта в перечисленных браузерах.

Размеры в пикселях — жёстко, но точно

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

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

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

С пикселями есть только одна проблема: так как размеры и плотность пикселей на разных экранах разные, то может получиться так:

  • на экране 5-дюймового телефона с разрешением 1920 на 1080 пикселей баннер шириной 200 пикселей получит размер в 5 сантиметров;
  • а на мониторе с диагональю 24 дюйма, но с тем же разрешением 1920 на 1080 те же 200 пикселей будут иметь длину 10 сантиметров. 

Чтобы было нагляднее, сделаем тестовую страницу с тремя блоками одинаковой высоты, но с шириной 100 пикселей.

Так наша страница будет выглядеть на большом мониторе

А так — на экране мобильника. Но те же 100 пикселей в ширину у каждого блока

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

Чистый CSS overflow, но без ползунков

Скроллинг, предлагаемый HTML/CSS, несомненно, практичен, а для этапа отладки просто необходим, но есть один существенный момент. Когда мышка находится над блоком, в котором есть скроллинг, перемещается контент этого блока, а не вся страница.

Этот момент не очень удобен на практике: приходится контролировать место на странице, в котором можно крутить колесико мышки. Некоторым посетителям это не нравится, некоторые просто не обращают внимания.

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

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

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

В общем смысле при создании блочных элементов следует уходить от идеи, что один элемент — это один «div», «span» или «td». Мыслить тегами HTML – не слишком благодарное занятие. Гораздо практичнее мыслить смысловыми элементами страницы, а сколько они потребуют для реализации тегов HTML – вопрос другой.

Размеры блока по умолчанию

Если в CSS размеры блока не заданы, то они формируются следующим образом: ширина определяется шириной окна страницы или шириной внешнего блока. Блок занимает всю ширину окна страницы или внешнего блока за исключением отступов. А высота блока устанавливается такой, чтобы в блок поместилось всё содержимое. Для примера создадим блок без указания размеров и посмотрим, как он выглядит. Чтобы видеть размеры блока, зададим рамку с помощью свойства border . Подробно рамки будут рассмотрены в следующей теме, а пока просто скопируйте это свойство.

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

Блоки CSS 3: ЦЕНТРИРОВАНИЕ КОНТЕНТА

Если вы хотите поместить блок в центре страницы (или в центре элемента, в котором он находится), вы можете присвоить значение auto свойствам margin-left и margin-right.

Чтобы центрировать блок на странице, вам нужно указать его ширину (width), в противном случае он займет всю ширину страницы.

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

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

CSS Overflow Wrap

Свойство CSS overflow-wrap используется для указания обстоятельств, при которых браузер может разбить строку текста на несколько строк. Без этого свойства строка текста, которая слишком длинна для размещения в пределах строки, будет неразрывной и вызовет переполнение.

Чтобы использовать свойство overflow-wrap, свойство white-space должно разрешать перенос. Это означает, что для свойства white-space может быть установлено значение «normal», «pre-wrap», «break-space» или «pre-line». Чаще всего вы увидите, что он установлен на «нормально».

Есть три возможных значения для определения свойства overflow-wrap. Их краткое определение приводится ниже.

  • Нормальный: строки обрываются только в точках невынужденного разрыва, например, между двумя словами.
  • Где угодно: линии могут разорваться в точках принудительного останова, если нет невынужденных. Например, длинное слово или URL-адрес может быть разбит на другую строку. В точке останова дефис не вставляется. С этим значением возможности минимизировать количество содержимого, выходящего за пределы строки, путем переноса строки в точку останова учитываются при вычислении внутренних размеров минимального содержимого или наименьшего размера, который может занять блок, не вызывая переполнения.
  • Слово прерывания строки могут разрываться в точках принудительного прерывания, если нет невынужденных. В точке останова дефис не вставляется. Однако с этим значением возможности минимизировать объем содержимого, переполняющего строку, путем переноса строки в точку останова не учитываются при вычислении внутренних размеров минимального содержимого или наименьшего размера, который может принимать блок, не вызывая переполнения.

Давайте посмотрим на пример, показывающий каждое из этих значений ниже.

Вот CSS:

Вот HTML:

Вот результат:

float

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

По умолчанию ширина блока вычисляется автоматически и занимает все доступное пространство. Здесь следует оговорить, что под этим подразумевается. Например, если тег <div> в коде документа присутствует один, то он занимает всю свободную ширину окна браузера и ширина блока будет равна 100%. Стоит поместить один тег <div> внутрь другого, как ширина внутреннего тега начинает исчисляться относительно его родителя, т.е. внешнего контейнера.

При задании любому элементу свойства float left или right — элемент становится блочным(display: block) и его размер определяется его контентом.

Расположение слоев по горизонтали.

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

.clear {
    clear: both; /* Отменяем обтекание. float*/
}
<div style="clear:both;"></div>

Создание колонок при помощи float имеет ряд особенностей. Первая, как уже упоминалась, состоит в том, что после плавающих элементов требуется добавлять элемент со свойством clear, который выключает обтекание. Это необходимо в том случае, если предполагается использовать нижележащие слои. Вторая особенность связана с представлением плавающих слоев. Если окно браузера уменьшить до определенного предела, то слои перемещаются по вертикали.

Float — список возможных значений: left,right,none.

Clear — список возможных значений:

  • left – не допускает обтекание «floated» объекта слева
  • right – запрещает обтекание элемента справа
  • both – запрещает обтекание объекта с обеих сторон, т.е. и слева, и справа
  • none – разрешено обтекание

Если элемент перемещается влево (float:left), он выравнивается по левой стороне содержащего элемента, а весь последующий контент выравнивается по правой стороне (до тех пор пока не достигнет нижней границы элемента).

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

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

Пример блочной вёрстки

Но, сколько не теоретизируй, а понимать всё проще на примере.

Итак, у нас есть макет (рисунок ниже). Условный, конечно — просто разметка, ведь цель примера — как можно наглядней объяснить принцип создания блочной вёрстки. Зная базу, навести красоту и усложнить макет вы сможете и сами, а я лучше не буду перегружать пример.

Согласно макету, страница сайта будет содержать пять блоков: «шапку», навигационное меню, боковую панель, основной блок с контентом и «ноги».

Сначала создадим HTML-страницу: обозначим структуру, разметим её. HTML-код будет таким:

<!DOCTYPE html>
<html>
<head>
    <title>Блочная вёрстка</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="container">
	<div id="header">
	<h2>header (шапка сайта)</h2>
	</div>
		 
	<div id="navigation">
	<h2>Блок навигации</h2>
	</div>
		 
	<div id="sidebar">
	<h2>Левая панель</h2>
	</div>
		 
	<div id="content">
	<h2>Основной контент страницы</h2>
	</div>
		 
	<div id="clear">
		 
	</div>
							   
	<div id="footer">
	<h2>footer (низ сайта)</h2>
	</div>
</div>
</body>
</html>

Разберём некоторые моменты.

<div id=»container»> — это блок-родитель, внутри которого расположились все остальные блоки. Как ячейки таблицы внутри <table>. Назначение дочерних контейнеров должно быть понятно, за исключением разве что блока <div id=»clear»>. Это вспомогательный слой, его смысл будет понятен, когда вы увидите код CSS.

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

Теперь добавим файл CSS, код которого приведён ниже.

body {
     background: #FFF;
     color: #000;
     font-family: Arial, sans-serif;
     font-size: 14px;
}

#header {
     background: #F5DEB3;
     width: 100%;
     height: 55px;
}
 
#container {
     background: #FFD700;
     margin: auto auto;
     text-align: center;
     width: 80%;
     height: 400px;
}
 
#navigation {
     background: #FE9798;
     width: 100%;
     height: 25px;
}
 
#sidebar {
     background: #40E0D0;
     float: left;
     width: 20%;
     height: 280px;
}

#content {
     background: #DCDCDC;
     float: right;
     width: 80%;
     height: 280px;
}
 
#clear {
     clear: both;
}
 
#footer {
    background: #00BFFF;
	width: 100%;
	height: 40px;
}

С помощью стилей мы последовательно оформляем содержимое тега <body> и всех находящихся внутри контейнеров с помощью ранее изученных правил.

#clear { clear:both; } запрещает обтекание элемента слева и справа. Если убрать это правило, вёрстка «поедет» и низ сайта перестанет корректно отображаться.

CSS творит чудеса, и с ним наша HTML-страница примет уже совсем другой вид.

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

Дата размещения/обновления информации: 29.04.2021 г.
Сообщить об ошибке

Что такое переполнение в CSS?

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

Прежде чем мы более подробно рассмотрим свойство переполнения, давайте проясним, что мы имели в виду под «блоком элемента». Согласно модели блока CSS, прямоугольное поле создается для элементов HTML. Этот блок состоит из четырех слоев: самого содержимого, заполнения, границы и поля, как показано ниже.

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

Свойство «overflow»

  • visible — содержимое отображается за границами блока (по умолчанию);
  • hidden — переполняющее содержимое не отображается;
  • auto — при переполнении отображается полоса прокрутки;
  • scroll — полоса прокрутки отображается всегда;

Определим класс:

div.overflow {
   overflow: hidden;
   width: 200px;
   height: 80px;
   border: 1px solid black;
}

и вставим код:


  ЭтотТекстОбрезанСправаЭтотТекстОбрезанСправа
  Этот текст будет обрезан снизу Этот текст будет обрезан снизу

hidden ЭтотТекстОбрезанСправаЭтотТекстОбрезанСправа
Этот текст будет обрезан снизу Этот текст будет обрезан снизу
Этот текст будет обрезан снизу Этот текст будет обрезан снизу

Можно также указать поведение блока при переполнении по ширине в overflow-x и высоте – в overflow-y:

div.scroll {
    height: 100px;
    border: 1px solid black;
    overflow-x: hidden; /* Hide horizontal scrollbar */
    overflow-y: scroll; /* Add vertical scrollbar */
}

По вечерам над ресторанамиГорячий воздух дик и глух,И правит окриками пьянымиВесенний и тлетворный дух.
Вдали над пылью переулочной,Над скукой загородных дач,Чуть золотится крендель булочной,И раздается детский плач.
И каждый вечер, за шлагбаумами,Заламывая котелки,Среди канав гуляют с дамамиИспытанные остряки.
Над озером скрипят уключиныИ раздается женский визг,А в небе, ко всему приученныйБесмысленно кривится диск.
И каждый вечер друг единственныйВ моем стакане отраженИ влагой терпкой и таинственнойКак я, смирен и оглушен.

div {
    overflow: hidden; /* прячем оба скрола */
}

Пример верстки макета на CSS Flexbox

В этом разделе создадим простой адаптивный макет всей страницы на CSS Flexbox.

Структура макета будет состоять из 3 секций:

  • header (для вывода заголовка и основного меню);
  • main (для отображения основной части);
  • footer (для футера).

Основную часть (main) в свою очередь разделим ещё на 2 раздела (их позиционирование будем осуществлять с помощью CSS Flexbox). На больших экранах (>=992px) эти разделы выстроим горизонтально, а на остальных — вертикально (<992px).

<style>
  /* контейнер */
  .container {
    width: 100%;
    max-width: 1200px;
    padding-right: 15px;
    padding-left: 15px;
    margin-left: auto;
    margin-right: auto;
  }

  /* flex-контейнер */
  .row {
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
    margin-right: -15px;
    margin-left: -15px;
  }

  /* общие настройки для flex-элементов */
  .col {
    position: relative;
    width: 100%;
    padding-right: 15px;
    padding-left: 15px;
  }

  /* ширина блоков .col__article и .col__aside по умолчанию */
  .col__article,
  .col__aside {
    -ms-flex: 0 0 100%;
    flex: 0 0 100%;
    max-width: 100%;
  }

  /* ширина блоков .col__article и .col__aside для больших экранов */
  @media (min-width: 992px) {
    /* 2/3 от ширины контейнера */
    .col__article {
      -ms-flex: 0 0 66.666667%;
      flex: 0 0 66.666667%;
      max-width: 66.666667%;
    }

    /* 1/3 от ширины контейнера */
    .col__aside {
      -ms-flex: 0 0 33.333333%;
      flex: 0 0 33.333333%;
      max-width: 33.333333%;
    }
  }
</style>

<header class="container">
  <!-- Шапка страницы -->
</header>
<main class="container">
  <div class="row">
    <article class="col col__article">
      <!-- Основная часть -->
    </article>
    <aside class="col col__aside">
      <!-- Боковая область -->
    </aside>
  </div>
</main>
<footer class="container">
  <!-- Футер -->
</footer>

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

Для «превращения» блока во flex-контейнер используется класс . Установку ширины flex-элементам и внутри flex-контейнера выполнено с использованием CSS-свойства .

В качестве примера разметим посредством flexbox ещё футер и создадим в элементе блок состоящий из трёх элементов (минимальная ширина одного элемента — 300px). В футере разместим четыре блока (минимальная ширина одного блока — 200px).

<style>
  /* ... */
  .col__other-article {
    -ms-flex: 1 0 0;
    flex: 1 0 0;
    min-width: 300px;
  }

  .col__footer {
    -ms-flex: 1 0 0;
    flex: 1 0 0;
    min-width: 200px;
  }
</style>

<header class="container">
  <!-- Шапка страницы -->
</header>
<main class="container">
  <div class="row">
    <article class="col col__article">
      <!-- Основная часть -->
      <div class="row">
        <div class="col col__other-article">
          <!-- Ещё 1 -->
        </div>
        <div class="col col__other-article" style="padding-bottom: 15px;">
          <!-- Ещё 2 -->
        </div>
        <div class="col col__other-article" style="padding-bottom: 15px;">
          <!-- Ещё 3 -->
        </div>
      </div>
    </article>
    <aside class="col col__aside">
      <!-- Боковая область -->
    </aside>
  </div>
</main>
<footer class="container">
  <div class="row">
    <div class="col col__footer">
      <!-- Секция футера 1 -->
    </div>
  </div>
  <div class="row">
    <div class="col col__footer">
      <!-- Секция футера 2 -->
    </div>
  </div>
  <div class="row">
    <div class="col col__footer">
      <!-- Секция футера 3 -->
    </div>
  </div>
  <div class="row">
    <div class="col col__footer">
      <!-- Секция футера 4 -->
    </div>
  </div>
</footer>

CSS свойство overflow

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

У данного CSS свойства есть несколько значений:

-visible – отображает все содержимое, даже если оно выходит за пределы заданных размеров. Данное значение установлено по умолчанию;

-hidden – все, что выходит за пределы заданных размеров блока, будет скрыто;

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

-auto – полосы прокрутки будут добавлены, но только в случае необходимости;

-inherit – наследует значение родителя.

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

div#content {
     overflow: auto;
     width: 50%;
     height: 150px;
     border: 1px solid blue;
     margin:0 auto;
}

1
2
3
4
5
6
7

div#content {

    overflowauto;

    width50%;

    height150px;

    border1pxsolid blue;

    marginauto;

}

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

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
АллегроСтандарт
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: