Только CSS: сворачивающееся выскакивающее окно
Трюк с использованием скрытой радио кнопки или чекбокса, селектора псевдо класса :checked и комбинатора смежных элементов (~) открывает доступ к реализации различных эффектов на чистом CSS. В качестве примера можно посмотреть на закладки, для реализации которых не использовалось ни строчки JavaScript.
Попробуем сделать сворачивающееся выскакивающее окно. Его можно использовать для кнопок/ссылок, чтобы вывести HTML содержание подсказки по нажатию.
Структура HTML
Нам нужен чекбокс для реализации функционала включения/выключения (он будет скрыт). Затем метка с атрибутом for
соответствующим атрибуту id
элементу ввода. Таким образом, мы сможем нажимать ее для переключения чекбокса.
Метка содержит в себе набор элементов span
. Элемент span
.box
является контейнером для HTML содержания выскакивающего окна. В него можно размещать любые строчные элементы. Попытки поместить элементы div
и заголовки приводили к тому, что некоторые браузеры выводили их содержание вне выскакивающего окна. Размещение элемента .box
вне метки также возможно, так как с помощью селектора ~
будет доступен метод его скрытия/вывода. Но, размещая элемент .box
внутри метки, можно сделать его позиционирование относительным к метке, как и следует для выскакивающего окна.
<input type="checkbox" id="popup" class="popUpControl"> <label for="popup"> Нажми меня! <span class="box"> Содержание выскакивающего окна </span> </label>
Основная часть CSS
Нашей целью является абсолютное позиционирование элемента .box
по отношению к метке, так что он будет выскакивать, привязанный к ней. По умолчанию элемент будет скрыт за счет полной прозрачности. Также мы добавим изменение масштаба до нуля, наклон и трансформации. А когда он выводится при нажатии на чекбокс, мы будем изменять масштаб обратно и делать его видимым.
.box { position: absolute; left: 0; top: 100%; z-index: 100; /* Предотвращаем мерцание в Safari 5.1 */ -webkit-backface-visibility: hidden; -moz-border-radius: 20px; -webkit-border-radius: 20px; border-radius: 20px; width: 260px; padding: 20px; opacity: 0; -webkit-transform: scale(0) skew(50deg); -moz-transform: scale(0) skew(50deg); -ms-transform: scale(0) skew(50deg); -o-transform: scale(0) skew(50deg); -webkit-transform-origin: 0px -30px; -moz-transform-origin: 0px -30px; -ms-transform-origin: 0px -30px; -o-transform-origin: 0px -30px; -webkit-transition: -webkit-transform ease-out .35s, opacity ease-out .4s; -moz-transition: -moz-transform ease-out .35s, opacity ease-out .4s; -ms-transition: -ms-transform ease-out .35s, opacity ease-out .4s; -o-transition: -o-transform ease-out .35s, opacity ease-out .4s; } .popUpControl { display: none; } .popUpControl:checked ~ label > .box { opacity: 1; -webkit-transform: scale(1) skew(0deg); -moz-transform: scale(1) skew(0deg); -ms-transform: scale(1) skew(0deg); -o-transform: scale(1) skew(0deg); }
Здесь содержится самая важная часть кода CSS, реальный пример будет содержать еще несколько правил для задания стилей. Смотрите исходники, прилагающиеся к уроку.
Изменяем текст кнопки
Идея не является жизненно необходимой, но добавляет шарм. Текст кнопки будет изменяться, когда открыто выскакивающее окно. Скрываем текст внутри кнопки, когда она имеет состояние :checked и вставляем новый текст:
<input type="checkbox"> <label> <span>Текст кнопки</span> </label>
[type=checkbox]:checked ~ label span { display: none; } [type=checkbox]:checked ~ label:before { content: "Текст в отмеченном состоянии"; }
Все прекрасно, но... JavaScript лучше
Не смотря на то, что решение задачи возможно реализовать на чистом CSS, лучше всего использовать JavaScript для таких случаев. Что нужно будет сделать в коде JavaScript:
- Переключить классы "open" и "closed" для элемента .box (это лучше, чем использовать чекбокс).
- Изменить текст без использования генерированного содержания CSS.
Но для всех остальных аспектов решения следует оставить использование CSS. Стили, переходы и трансформации принадлежат области стилей, а не функционала.
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/pqXFWfGsbU8/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-11-26 » Капитан грузового судна, или Как начать использовать Docker в своих проектах
- 2024-11-26 » Обеспечение безопасности ваших веб-приложений с помощью PHP OOP и PDO
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-15 » Перенос сайта на WordPress с одного домена на другой
- 2024-11-08 » OSPanel 6: быстрый старт
- 2024-11-08 » Как установить PhpMyAdmin в Open Server Panel
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
Чтобы вырастить плодоносящий сайт - его полезно регулярно поливать и удобрять с помощью рекламы и оптимизации Компания "RedLine" |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.