Показать элемент при клике css

Как сделать чтоб при клике на кнопку появлялся div,при клике вне его чтоб закрывался?

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

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

Средний 1 комментарий

Kozack

Обычно, если вы хотите добавить какую-то вещь, вам нужно полностью понимать её логику работы, чтобы это описать в коде. То есть, если вы можете описать весь функционал с помощью алгоритма, есть смысл самостоятельно это писать. В противном случае, лучше воспользоваться готовым решением, вроде Dropdowns или Modals из Bootstrap, потому что это поможет сэкономить время и обеспечит определённую надёжность работы за счёт использования дополнительных ресурсов (нужно подгружать CSS- и JS-файлы бутстрапа).

Самостоятельное понимание обычно приходит с опытом. То есть, например, если я хочу написать модал, я сначала должен понять, что такое этот мой модал и как он себя должен вести в различных ситуациях. По сути, это какой-то элемент, который выводится на переднем плане и блокирует всё остальное. То есть, мне нужно создать один полноэкранный элемент (1), который будет блокировать всё остальное, а потом поместить в него другой элемент (2), который будет отображать нужный мне контент. При клике по элементу 1 мне нужно скрывать оба элемента, освобождая всё, что находится на заднем плане. При этом, если я кликаю внутри элемента 2, ничего не должно происходить. Дальше, мне нужно показывать элементы 1 и 2 после определённого события, например, если я кликаю по кнопке (3).

Читайте также:  Php событие при изменении файла

Вот простейший код который работает как АК-47 (так же доступно на JsFiddle для тестирования):

Open modal 
Modal content
body < width: 100vw; height: 100vh; background-color: green; margin: 0; padding: 0; >#element-3 < border: 1px solid black; background-color: white; >#element-1 < display: none; position: fixed; background-color: blue; width: 100vw; height: 100vh; top: 0; left: 0; >#element-1.show < display: block; >#element-2
var element1 = document.getElementById('element-1'); var element2 = document.getElementById('element-2'); var element3 = document.getElementById('element-3'); element3.onclick = function() < element1.classList.add('show'); >; element1.onclick = function(event) < if (event.target !== event.currentTarget) < return; >element1.classList.remove('show'); >;

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

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

Источник

Обработка события click на CSS

Обработка события click на CSS

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

Допустим, у нас есть некая вкладка, кликнув мышкой по которой, должно открыться содержимое этой вкладки. Абсолютное большинство всё это будет делать на JavaScript, но на самом деле, в данном случае, событие click легко обработается через CSS.

Для начала самый обычный HTML-код:

Ничего необычного, разве что название вкладки расположено ниже контента, позже, Вы поймёте почему. А теперь CSS-код:

.tabs float: left; /* Все вкладки располагаем в одну строку */
margin: 10px; /* Отступы вкладок друг от друга */
>
.content display: none; /* Скрываем содержимое */
padding-top: 20px; /* Чтобы название вкладки было ниже содержимого */
position: absolute; /* Чтобы содержимое не двигало элементы на странице */
>
.tabs:active .content display: block; /* Когда кликаем по вкладке, открываем содержимое content */
>
.content:hover display: block; /* Пока курсор наведён на контент, не закрываем его */
>

Алгоритм следующий, при клике по названию вкладки, автоматически срабатывает псевдоэлемент active, но поскольку он будет работать только при нажатой клавиши, то стоить нам отпустить, как контент закроется. Чтобы этого не было, мы добавляем условие, что если курсор наведён на контент (псевдоэлемент hover), то он не будет закрываться. А для того, чтобы кликнув по вкладке, наш курсор автоматически оказался бы и на контенте, мы и расположили кнопку ниже контента, а также сделали ещё и поле сверху. Таким образом, кликнув по названию вкладки, мы кликаем и по контенту тоже, поэтому после клика мы можем смело отпустить кнопку мыши, и у нас продолжит «держать» контент наведение курсора.

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

Создано 17.10.2012 07:38:03

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

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

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

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

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

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

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

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

    Михаил, спасибо за урок. Очень полезная для меня статья !

    А у меня почему-то не работает ничего, если поставить :hover то всё работает а если :active или :focus то ничего не работает

    Михаил. хорошо бы исправить текст комментария в CSS-коде для строки padding-top. Мы ведь размещаем название вкладки выше содержимого, а не ниже.

    padding-top: 20px; /* Чтобы название вкладки было ниже содержимого */ — не верно, содержимое ниже названия!

    Спасибо за статью, все проверил, отлично работает! Еще классная штука для создания клика без прямого использования JavaScript. OrnaJS. Пример: http://ornaorg.github.io

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

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Показать элемент при клике css

    *

    Частная коллекция качественных материалов для тех, кто делает сайты

    • Creativo.one2000+ уроков по фотошопу
    • Фото-монстр300+ уроков для фотографов
    • Видео-смайл200+ уроков по видеообработке
    • Жизнь в стиле «Кайдзен» Техники и приемы для гармоничной и сбалансированной жизни

    Изучив рубрику «CSS», вы узнаете, как с помощью каскадных таблиц стилей (CSS) можно легко управлять дизайном сайта и упростить создание самого сайта. Данная рубрика заменит Вам полноценный «учебник по CSS».

    Бесплатные уроки CSS для начинающих

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

    Забавные эффекты для букв

    Реализация забавных подсказок

    Небольшой концепт забавных подсказок, которые реализованы на SVG и anime.js. Помимо особого стиля в примере реализована анимация и трансформация графических объектов.

    Анимированные буквы

    Солнцезащитные очки от первого лица

    Прикольный эксперимент веб страницы отображение которой осуществляется “от первого лица” через солнцезащитные очки.

    Источник

    Выпадающий блок при нажатии на HTML + CSS

    Выпадающий блок при нажатии на HTML + CSS

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

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

    Так выглядит при проверке, где изменена палитра, также добавлены некоторые элементы для редактирование.

    Чистый CSS-аккордеон с помощью CSS3

    Приступаем к установке:

    .gaonutosal <
    float: left;
    width: 37%;
    padding: 0 1em;
    >

    .pesontedan <
    position: relative;
    margin-bottom: 1px;
    width: 100%;
    color: #f3f1f1;
    overflow: hidden;
    >

    .pesontedan input <
    position: absolute;
    opacity: 0;
    z-index: -1;
    >

    .pesontedan label <
    position: relative;
    display: block;
    padding: 0 0 0 1em;
    background: #1c3e5d;
    line-height: 3;
    cursor: pointer;
    text-shadow: 0 1px 0 #333131;
    font-size: 17px;
    >

    .pesontedan-content <
    max-height: 0;
    overflow: hidden;
    background: #0d7b8e;
    transition: max-height .40s;
    font-size: 14px;
    color: #fffdfd;
    text-shadow: 0 1px 0 #292727;
    >

    .pesontedan-content <
    background: #0f6f80;
    >
    .pesontedan-content p <
    margin: 1em;
    >
    /* :checked */
    .pesontedan input:checked ~ .pesontedan-content <
    max-height: 100vh;
    >

    /* Icon */
    .pesontedan label::after <
    position: absolute;
    right: 0;
    top: 0;
    display: block;
    width: 3em;
    height: 3em;
    line-height: 3;
    text-align: center;
    -webkit-transition: all .40s;
    -o-transition: all .40s;
    transition: all .40s;
    >
    .pesontedan input[type=checkbox] + label::after <
    content: «+»;
    >
    .pesontedan input[type=radio] + label::after <
    content: «\25BC»;
    >
    .pesontedan input[type=checkbox]:checked + label::after <
    transform: rotate(315deg);
    >
    .pesontedan input[type=radio]:checked + label::after <
    transform: rotateX(180deg);
    >

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

    Источник

    Оцените статью