Как сделать блоки в css

Как сделать блоки со слайдер эффектом на чистом CSS3.

Как сделать блоки со слайдер эффектом на чистом CSS3.

Всем привет! В этой статье я покажу, как сделать блоки со слайдер эффектом на чистом CSS3.

Для начала создадим структуру:

<!doctype html>
<html>
<head>
<meta charset=&#039;UTF-8'>
<title>Блоки со слайдер эффектом</title>
<link rel=&#039;stylesheet&#039; href=&#039;css/style.css'>
</head>
<body>
<div >
<h1>Блоки со слайдер эффектом</h1>
<p>Используются css3 переходы и трансформации</p>
<section >
<a href="#">
<h5>Где я работаю?</h5>
<div>Я работаю в замечательной компании, которая делает очень интересные проекты.</div>
</a>
<a href="#">
<h5>Книги, в которых я был соавтором</h5>
<div>К сожалению, я пока не был ни автором, ни соавтором никаких книжек, но все впереди! :)</div>
</a>
<a href="#">
<h5>Нравится ли мне быть программистом?</h5>
<div>Конечно же, да! Быть программистом — очень увлекательно, и я очень люблю эту работу!</div>
</a>
</section>
</div>
</body>
</html>

Теперь откроем файл style.css, который мы подключаем в шапке страницы, и пропишем следующее:

Теперь в теге head сразу после подключения файла стилей пропишем тег style и поместим следующий код там:

.slide-up-boxes a <
display: block;
height: 130px;
margin: 0 0 20px 0;
background: rgba(215, 215, 215, 0.5);
border: 1px solid #ccc;
height: 65px;
overflow: hidden;
>

.slide-up-boxes h5 <
color: #333;
text-align: center;
height: 65px;
font: italic 18px/65px Georgia, Serif;
opacity: 1;
-webkit-transition: all 0.2s linear;
-moz-transition: all 0.2s linear;
-o-transition: all 0.2s linear;
>

.slide-up-boxes a:hover h5 <
margin-top: -65px;
opacity: 0;
>

.slide-up-boxes div <
position: relative;
color: white;
font: 12px/15px Georgia, Serif;
height: 45px;
padding: 10px;
opacity: 0;
-webkit-transform: rotate(6deg);
-webkit-transition: all 0.4s linear;
-moz-transform: rotate(6deg);
-moz-transition: all 0.4s linear;
-o-transform: rotate(6deg);
-o-transition: all 0.4s linear;
>
.slide-up-boxes a:hover div <
opacity: 1;
-webkit-transform: rotate(0);
-moz-transform: rotate(0);
-o-transform: rotate(0);
>
.slide-up-boxes a:nth-child(1) div < background: #c73b1b url() 17px 17px no
-repeat; padding-left: 120px; >
.slide-up-boxes a:nth-child(2) div < background: #367db2 url() 21px 10px no-
repeat; padding-left: 90px; >
.slide-up-boxes a:nth-child(3) div < background: #393838 url() 14px 16px no-
repeat; padding-left: 133px; >

В url выше вы можете вставить картинки на фон для ваших блоков, если захотите.

Все! Наши блоки готовы! Спасибо за внимание и удачи!

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 1 ):

А почему при переносе стилей в style.css всё рушится?

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

CSS Панель навигации

Имея легкий в использовании навигации имеет важное значение для любого веб-сайта.

С помощью CSS вы можете превратить скучные меню HTML в симпатичных панели навигации.

Панель навигации = Список ссылок

Панель навигации необходим стандартный HTML в качестве базы.

В наших примерах мы будем строить навигационную панель из стандартного списка HTML.

Панель навигации в основном список ссылок, так что с помощью <ul> и <li> элементы имеет смысл:

пример

Теперь давайте уберем пули и поля и отступы из списка:

пример

  • list-style-type: none; — Удаляет пули. Панель навигации не нужен список маркеров
  • Установить margin: 0; и padding: 0; для удаления настроек браузера по умолчанию

Код в приведенном выше примере стандартный код используется в обоих вертикальных и горизонтальных панелей навигации.

Вертикальная панель навигации

Чтобы построить вертикальную панель навигации, вы можете стиль <a> элементов внутри списка, в дополнение к указанному выше коду:

пример

  • display: block; — Отображение ссылок в виде блока элементов делает всю площадь ссылка кликабельным ( а не только текст), и это позволяет нам указать width (и padding, margin, height и т.д. , если вы хотите)
  • width: 60px; — блочные элементы занимают всю доступную ширину по умолчанию. Мы хотим, чтобы задать ширину 60 пикселей

Вы также можете установить ширину <ul> и снимите ширину <a> , так как они будут занимать всю доступную ширину , когда отображаются в виде блочных элементов. Это приведет к тому же результату, как и в предыдущем примере:

пример

ul <
list-style-type: none;
margin: 0;
padding: 0;
width: 60px;
>

li a <
display: block;
>

Вертикальная панель навигации Примеры

Создание базовой вертикальной панели навигации с серым цветом фона и изменить цвет фона ссылки, когда пользователь перемещает курсор мыши над ними:

  • Главная
  • Новости
  • контакт
  • Около

пример

ul <
list-style-type: none;
margin: 0;
padding: 0;
width: 200px;
background-color: #f1f1f1;
>

li a <
display: block;
color: #000;
padding: 8px 0 8px 16px;
text-decoration: none;
>

/* Change the link color on hover */
li a:hover <
background-color: #555;
color: white;
>

Активный / Текущая навигация Ссылка

Добавить "активный" класс к текущей ссылке, чтобы пользователь мог знать, на какой странице он / она находится на:

  • Главная
  • Новости
  • контакт
  • Около

пример

Центр Ссылки & Добавить границы

Добавить text-align:center для <li> или <a> к центру ссылки.

Добавьте border свойство <ul> добавить рамку вокруг навигационной панели. Если вы также хотите границы внутри навигационной панели, добавить border-bottom для всех <li> элементов, за исключением последнего:

  • Главная
  • Новости
  • контакт
  • Около

пример

li <
text-align: center;
border-bottom: 1px solid #555;
>

li:last-child <
border-bottom: none;
>

Полноразмерные Фиксировать вертикально Navbar

Создание полной высоты, "sticky" боковой навигации:

пример

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

Горизонтальная панель навигации

Есть два способа создания горизонтальной панели навигации. Использованиевстроенных или плавающихэлементов списка.

Встроенные элементы списка

Один из способов создания горизонтальной панели навигации, чтобы указать <li> элементы как встроенные, в дополнение к "standard" коду выше:

пример

  • display: inline; — По умолчанию <li> элементы являются блочные элементы. Здесь мы удалить разрывы строк до и после каждого элемента списка, чтобы отобразить их на одной линии

Плавающий элементов списка

Другой способ создания горизонтальной панели навигации, чтобы плавать на <li> элементов, а также указать макет для навигационных ссылок:

пример

a <
display: block;
padding: 8px;
background-color: #dddddd;
>

  • float: left; — использование с плавающей точкой , чтобы получить блок элементов , чтобы скользить рядом друг с другом
  • display: block; — Отображение ссылок в виде блока элементов делает всю площадь ссылка кликабельным ( а не только текст), и это позволяет нам указать отступы (и height, width, margins и т.д. , если вы хотите)
  • padding: 8px; — Так как блочные элементы занимают всю доступную ширину, они не могут плавать рядом друг с другом. Поэтому, указать некоторое дополнение, чтобы сделать их хорошо выглядеть
  • background-color: #dddddd; — добавить серый цвет фона для каждого элемента

Совет: добавьте цвет фона для <ul> вместо каждого <a> элемента , если вы хотите полноширинные цвет фона:

пример

Горизонтальная панель навигации Примеры

Создание базовой горизонтальной панели навигации с темным цветом фона и изменить цвет фона ссылки, когда пользователь перемещает курсор мыши над ними:

  • Главная
  • Новости
  • контакт
  • Около

пример

ul <
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
>

li a <
display: block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
>

/* Change the link color to #111 (black) on hover */
li a:hover <
background-color: #111;
>

Активный / Текущая навигация Ссылка

Добавить "active" класс к текущей ссылке , чтобы пользователь мог знать , на какой странице он / она находится на:

  • Главная
  • Новости
  • контакт
  • Около

пример

Щелкните правой кнопкой Align ссылки

Right выравнивать ссылки плавучим пункты списка вправо ( с float:right; ):

  • Главная
  • Новости
  • контакт
  • Около

пример

Пограничные делители

Добавьте border-right собственности <li> , чтобы создать ссылку разделители:

  • Главная
  • Новости
  • контакт
  • Около

пример

/* Add a gray right border to all list items, except the last item (last-child) */
li <
border-right: 1px solid #bbb;
>

li:last-child <
border-right: none;
>

Фиксированная панель навигации

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

Flexbox

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

Необходимые навыки: HTML основы (изучите Введение в HTML), знание того, как работает CSS (изучите Вступление в CSS).
Цель: Узнать, как использовать систему адаптируемых блоков Flexbox для создания веб-макетов.

Почему Flexbox?

Долгое время единственными надёжными инструментами CSS вёрстки были такие способы как Float (обтекание) и позиционирование.

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

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

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

Разберём простой пример

В этой статье вы проработаете серию упражнений, которые помогут понять, как работает flexbox. Чтобы начать, скачайте на компьютер стартовый файл — flexbox0.html с нашего Github репозитория — загрузите его в современном браузере (Firefox или Chrome), а также в любимом редакторе кода. Также вы можете посмотреть его вживую.

Вы увидите элемент <header> с заголовком верхнего уровня внутри, и элемент <section> содержащий три элемента <article> . Мы будем использовать их для создания стандартного трёхколоночного макета.

Определяем, какие элементы разместить в виде flex блоков

Для начала нам нужно выбрать, какие элементы следует выкладывать в виде flex блоков. Для этого мы устанавливаем специальное значение display в родительском элементе тех элементов, которые вы хотите оформить. В нашем случае мы хотим расположить элементы <article> , поэтому мы устанавливаем это значение на <section> (который становится flex контейнером):

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

Так, всего одно объявление делает всё, что нам нужно — здорово, правда? Мы получили 3-х колоночный макет с колонками равных размеров по ширине и высоте. Это связано с тем, что значения по умолчанию, заданные для flex элементов (дочерние элементы flex контейнера), настроены для решения основных задач. Подробнее об этом позже.

Примечание: вы также можете установить значение display inline-flex, если хотите расставить inline элементы как flex блоки.

Внутри flex модели

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

flex_terms.png

  • Главная ось (main axis) проходит в том направлении, вдоль которого расположены Flex элементы (например, в строку слева направо или вдоль колонок вниз.) Начало и конец этой оси называются main start и main end.
  • Поперечная ось (cross axis) проходит перпендикулярно Flex элементам. Начало и конец этой оси называются cross start and cross end.
  • Родительский элемент, на который назначено свойство display: flex ( <section> в нашем примере) называется flex container.
  • Элементы, размещённые в нём как Flex блоки называются flex items (в нашем примере это <article> ).

Запомните эти термины, они пригодятся вам в последующих разделах.

Столбцы или строки?

В Flexbox есть свойство под названием flex-direction , которое определяет направление главной оси (в каком направлении располагаются flexbox-дочерние элементы) — по умолчанию ему присваивается значение row , т.е. располагать дочерние элементы в ряд слева направо (для большинства языков) или справа налево (для арабских языков).

Попробуйте добавить следующую строчку в ваш файл:

Вы увидите, что элементы расположились в виде столбцов, также как было до того, как мы добавили CSS код. Прежде чем продолжать, удалите эту строчку из примера.

Примечание: вы можете также располагать flex элементы в обратном направлении, используя значения row-reverse и column-reverse . Попробуйте их тоже!

Перенос строк

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

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

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

Теперь у нас в макете несколько рядов— все дети-блоки, которые не помещаются, переносятся на следующую строку, чтобы не было переполнения. Свойство flex: 200px , установленное на статьях, означает, что каждый блок должен быть минимум 200 пикселей в ширину. Мы обсудим это свойство более подробно позже. Вы также можете заметить, что несколько дочерних блоков в последней строке стали более широкими, так что вся строка стала заполнена.

Но мы можем пойти дальше. Прежде всего, попробуйте изменить значение свойства flex-direction на row-reverse — теперь у вас также макет в несколько строк, но он начинается из противоположного угла окна браузера и теперь выстраивается в обратном порядке.

flex-flow сокращение

На этом этапе нужно заметить, что существует сокращение для свойств flex-direction и flex-wrap — flex-flow . Например, вы можете заменить

Гибкое изменение размеров flex элементов

Теперь давайте вернёмся к нашему первому примеру и посмотрим, как мы можем контролировать, в каких пропорциях flex элементы будут занимать место. Включите свою копию файла flexbox0.html, или скачайте flexbox1.html (просмотр).

Прежде всего, добавим следующее правило в конец вашего CSS кода:

Это безразмерное значение пропорции, которое указывает, сколько свободного пространства на главной оси (main axis) каждый flex элемент сможет занять. В этом случае, мы даём каждому элементу <article> значение 1, а это значит, что они будут занимать равное количество свободного места в макете, которое осталось после установки свойств padding и margin.

Теперь добавьте следующее правило в строку после предыдущего:

Обновив страницу, вы увидите, что третий элемент <article> занимает в два раза больше доступной ширины, чем два других — итого теперь доступно 4 единицы пропорции. Первые два flex элемента имеют по одной единице, поэтому берут 1/4 пространства каждый. А у третьего 2 единицы, так что он берёт 2/4 свободного места (или 1/2).

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

Это просто означает, что каждому flex элементу сначала будет дано 200px от свободного места. Потом оставшееся место будет поделено в соответствии с частями пропорций. Обновите страницу, и вы увидите разницу, как пространство поделено теперь.

Настоящая ценность flexbox можно увидеть в его гибкости/отзывчивости — если изменить размер окна или добавить ещё элемент <article> , макет будет и дальше выглядеть также хорошо.

flex: краткий код против развёрнутого

flex это сокращённое свойство, в которым можно задать до трёх разных свойств:

  • Значение пропорции, которое мы обсуждали выше. Оно может быть установлено отдельно с помощью свойства flex-grow .
  • Следующее значение пропорции — flex-shrink — вступает в роль, когда flex элементы переполняют контейнер. Оно указывает, сколько забирается от размера каждого flex элемента, чтобы он перестал переполнять контейнер. Это продвинутая функция flexbox, и в этом параграфе мы не будем её разбирать.
  • Значение минимального размера, как мы обсуждали ранее. Оно может быть установлено отдельно с помощью свойства flex-basis .

Мы не советуем использовать развёрнутые свойства flex, если вам в действительности это не нужно (например, переопределить ранее установленное). Они приводят к написанию большого количества дополнительного кода и могут запутать кого угодно.

Горизонтальное и вертикальное выравнивание

Flexbox также имеет функции для выравнивания flex элементов вдоль основной (main) или поперечной (cross) осей. Рассмотрим их на новом примере — flex-align0.html (просмотр) — который мы превратим в аккуратную, гибкую кнопочную панель инструментов. На данный момент вы видите горизонтальную панель меню, кнопки которой застряли в верхнем левом углу.

Сначала сделайте себе копию этого примера.

Теперь добавьте следующую строку в низ кода CSS:

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

align-items контролирует, где на поперечной оси находятся flex элементы.

  • По умолчанию стоит значение stretch , которое растягивает все flex элементы, чтобы заполнить родителя вдоль поперечной (cross axis) оси. Если у родителя нет фиксированной ширины вдоль поперечной оси, все flex элементы примут длину самого длинного flex элемента. Вот почему наш первый пример по умолчанию получил столбцы с одинаковой высотой.
  • Значение center , которое мы использовали в коде вверху, заставляет элементы сохранять свои собственные размеры, но центрирует их вдоль поперечной оси. Вот почему кнопки текущего примера центрированы по вертикали.
  • Также есть значения flex-start и flex-end , которые выравнивают все элементы по началу и концу поперечной оси соответственно. См. подробнее align-items .

Вы можете переопределить align-items поведение для отдельных flex элементов, применив свойство align-self к ним. Например, попробуйте добавить эти строки в код:

Посмотрите, что произошло и удалите эти строки.

justify-content контролирует, где flex элементы располагаются на главной оси.

  • По умолчанию стоит значение flex-start , которое располагает все элементы в начале главной оси.
  • Также можно использовать flex-end, чтобы расположить их в конце.
  • center — также одно из значений justify-content , располагает все элементы по центру главной оси.
  • Значение, которое мы использовали выше, space-around , весьма полезно — оно распределяет все элементы равномерно по главной оси, с небольшим количеством свободного места на обоих концах.
  • И ещё одно значение, space-between , которое очень похоже на space-around, за исключением того, что оно не оставляет места на обоих концах.

Попробуйте немного поиграть с этими значениями прежде чем продолжить

Порядок элементов flex

В Flexbox также есть возможность менять порядок расположения flex элементов, не влияя на исходный порядок. Это ещё одна вещь, которую невозможно сделать традиционными методами CSS.

Код здесь простой: попробуйте добавить следующий CSS вниз вашего кода примера:

и теперь вы увидите, что кнопка «Smile» переместилась в конец главной оси. Давайте теперь поговорим подробнее о том, как это работает:

  • По умолчанию все элементы flex имеют значение order равное 0.
  • Элементы Flex с установленными на них бОльшими значениями будут отображаться позже в порядке отображения, чем элементы с меньшими значениями порядка.
  • Элементы Flex с одинаковым значением порядка будут отображаться в исходном порядке. Так, если у вас есть четыре элемента с порядковыми значениями 2, 1, 1 и 0, установленными на них соответственно, их порядок отображения будет 4-й, 2-й, 3-й, затем 1-й.
  • Третий элемент появляется после второго, потому что он имеет то же значение порядка и находится после него в порядке написания.

Вы можете установить отрицательные значения , чтобы элементы отображались раньше, чем элементы с установленным 0. Например, вы можете сделать, чтобы кнопка «Blush» появлялась в начале основной оси, используя следующее правило:

Вложенные flex блоки

Можно создать несколько довольно сложных макетов с помощью flexbox. Совершенно нормально сделать flex элемент flex контейнером, чтобы его потомки также были flex блоками. Посмотрите на complex-flexbox.html (см. вживую).

HTML для этого довольно простой. У нас есть элемент <section> , содержащий три <article> . Третий <article> содержит ещё три <div> .

Давайте посмотрим на код, который мы использовали для макета.

Прежде всего, мы устанавливаем дочерние элементы <section> в виде flex блоков.

Затем мы устанавливаем несколько значений на самих <article> . Обратите внимание на второе правило: мы устанавливаем третий <article> , чтобы его дети были в макете в виде flex блоков, но на этот раз мы располагаем их как столбец.

Затем мы берём первый <div> . Сначала мы пишем flex: 1 100px; чтобы дать ему минимальную высоту 100px, потом мы устанавливаем его дочерние элементы (элементы <button> ) также в виде flex блоков. Им мы назначаем перенос блоков и выравниваем их по центру доступного пространства, как это было в примере с кнопкой.

Наконец, мы устанавливаем размер кнопке, мы даём ему значение flex 1. Это даёт очень интересный эффект, который вы увидите, если попытаетесь изменить размер ширины окна браузера. Кнопки занимают столько места, сколько могут, и сидят на одной линии также, сколько могут. Если же они не могут комфортно расположиться на одной линии, они перепрыгнут на новые строки.

Совместимость с браузерами

Поддержка Flexbox доступна в большинстве новых браузеров: Firefox, Chrome, Opera, Microsoft Edge и IE 11, более поздних версиях Android / iOS и т. д.. Однако помните, что до сих пор используются более старые браузеры, которые не поддерживают Flexbox ( или поддерживают, но старую версию.)

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

Flexbox немного сложнее, чем некоторые функции CSS. Например, если в браузере отсутствует поддержка CSS тени, сайт по-прежнему будет можно использовать. А вот неподдерживаемые функции flexbox, возможно, полностью сломают макет, что сделает сайт непригодным.

Мы обсудим возможности преодоления проблем поддержки кросс-браузерности в следующем модуле.

Подытожим

Мы завершаем нашу статью по основам flexbox. Надеемся, что вам понравилось, и вы хорошо развлечётесь, путешествуя дальше и изучая его. Далее мы рассмотрим ещё один важный аспект макетов CSS — grid-системы.

Добавить комментарий

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