Пример:
Информация в панеле
HTML:
1 2 3 4 5 6 7 8 9 10 11 12 |
<input type="checkbox" id="side-checkbox" /> <div class="side-panel"> <label class="side-button-2" for="side-checkbox">+</label> <div class="side-title">Выдвижная панель:</div> <p>Информация в панеле</p> </div> <div class="side-button-1-wr"> <label class="side-button-1" for="side-checkbox"> <div class="side-b side-open">Открыть</div> <div class="side-b side-close">Закрыть</div> </label> </div> |
В данном коде обязательным условием является, чтобы боковая панель <div class="side-panel">...</div>
следовала сразу за флажком checkbox
Т.к. панель имеет фиксированное позиционирование, ее можно разместить в любом месте страницы. Основываясь на этом, можно сделать кнопку, которая будет менять свой стиль и текст: side-button-1
(для нее, тоже важна последовательность html тегов.
Если изменять переключатель не нужно, как у кнопки side-button-2
, то ее можно ставить где угодно, как угодно и сколько угодно раз. Например:
1 2 3 |
<label class="my-button-1" for="side-checkbox">Моя кнопка 1</label> <label class="my-button-2" for="side-checkbox">Моя кнопка 2</label> <!-- И так далее --> |
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
/* Оформление панели */ #side-checkbox { display: none; } .side-panel { position: fixed; z-index: 999999; top: 0; left: -360px; background: #337AB7; transition: all 0.5s; width: 320px; height: 100vh; box-shadow: 10px 0 20px rgba(0,0,0,0.4); color: #FFF; padding: 40px 20px; } .side-title { font-size: 20px; padding-bottom: 10px; margin-bottom: 20px; border-bottom: 2px solid #BFE2FF; } /* Оформление кнопки на странице */ .side-button-1-wr { text-align: center; /* Контейнер для кнопки, чтобы было удобнее ее разместить */ } .side-button-1 { display: inline-block; } .side-button-1 .side-b { margin: 10px; text-decoration: none; position: relative; font-size: 20px; line-height: 20px; padding: 12px 30px; color: #FFF; font-weight: bold; text-transform: uppercase; font-family: 'Roboto', Тahoma, sans-serif; background: #337AB7; cursor: pointer; border: 2px solid #BFE2FF; } .side-button-1 .side-b:hover, .side-button-1 .side-b:active, .side-button-1 .side-b:focus { color: #FFF; } .side-button-1 .side-b:after, .side-button-1 .side-b:before { position: absolute; height: 4px; left: 50%; bottom: -6px; content: ""; transition: all 280ms ease-in-out; width: 0; } .side-button-1 .side-open:after, .side-button-1 .side-open:before { background: green; } .side-button-1 .side-close:after, .side-button-1 .side-close:before { background: red; } .side-button-1 .side-b:before { top: -6px; } .side-button-1 .side-b:hover:after, .side-button-1 .side-b:hover:before { width: 100%; left: 0; } /* Переключатели кнопки 1 */ .side-button-1 .side-close { display: none; } #side-checkbox:checked + .side-panel + .side-button-1-wr .side-button-1 .side-open { display: none; } #side-checkbox:checked + .side-panel + .side-button-1-wr .side-button-1 .side-close { display: block; } #side-checkbox:checked + .side-panel { left: 0; } /* Оформление кнопки на панеле */ .side-button-2 { font-size: 30px; border-radius: 20px; position: absolute; z-index: 1; top: 8px; right: 8px; cursor: pointer; transform: rotate(45deg); color: #BFE2FF; transition: all 280ms ease-in-out; } .side-button-2:hover { transform: rotate(45deg) scale(1.1); color: #FFF; } |
Ошибся я дело не в скрипте. position fixed снимаешь где то плавает этот списочек...и окошко которое открывается на вопросик. Задача для меня как ни странно усложнилась
Не совсем понял про что речь, но посмотрите z-index'ы
Спасибо, помогло отчасти, другие комментарии тоже пригодились)
Добрых вечеров. В данной панели почему то не срабатывают всплывающие окна. Запилил конструктор в нее со значком вопроса, при клике должна подсказка выходить и вне панели она работает. + всплывающие окна в которых например выбрать количество, тоже самое. Подскажите кто знает и разбирался в чем может быть проблема. Скрипты местами переставлял, все кроме панели удалял, мимо 🙁
Скажите пожалуйста! Можно ли в эту панель вставить форму обратной связи с вашего сайта?
И... можно ли сделать несколько панелей с разной инфой, открывающихся отдельно?
Доброго времени суток. А под валидатор как подогнать данное действо. Для lable вроде как div внутри не допустим с точки зрения хз чего) А так все работает круть как всегда. Тот момент когда в авторе не сомневаешься.
Поменяйте div на span 🙂
Да со span проходит благодарю. Пришлось маленько поправить оформление и норм.
А как вместо кнопки сделать флажок типа бокового меню?
position: fixed и вместо текста иконку
Просто шикарно! Очень вовремя мне попалась эта статья и в целом ваш сайт.
На редкость полезный и толковый сайт. Спасибо вам.
А как вместо крестика поставить треугольники? В закрытом состоянии углом внутрь (к центру), а в закрытом состоянии - углом наружу. Получится подсказка типа открыть-закрыть. В смысле - понятно, что это можно сделать с помощью псевдоэлементов или маленьких картинок, но как без JS отловить закрытое и открытое состояние панели?
Без JS это изходить из :checked, как основная кнопка сделана.
А если в панель не помещается содержимое, как добавит вертикальный скролл?
Обернуть в див со стилями:
Как сделать так, чтобы панель закрывалась не по крестику на панели, а по щелчку в любой точке экрана вне панели?
Для этого нужен лейбл фиксированный во весь экран, а чтобы он кликался, он должен перекрывать весь сайт.
Не подскажете как это сделать?
Ну это уже JS
Если на нем делать боковоую панель, то смысла нет городить все эти чекбоксы
На днях сделаю JS вариант
Спасибо, отличное решение.
А как сделать, чтобы несколько таких кнопок было на одной странице с разной информацией в боковом меню.. для каждой кнопки своя?
Дублировать: ID, классы и т.д.
Но тут удобнее на JS будет уже
[quote] я продублировала, но ничего не получилось, вылезает панель от исходных настроек
Дайте ссылку на результат, так сложно понять что не так и тем более обьяснить.
В другой раз, видимо, я на следующий день изменила решение задачи. Если возникнет необходимость снова сделать несколько всплывающих окон - кину ссылку. Спасибо!
если справа нужна панель, то что менять чтобы всё отлично работало?
И настроить на стили на свою кнопку?
Только эта кнопка должна быть label и с правильным for
т.е. отстилизовать под свой дизайн я не смогу?
Почему?
Или редактируйте эту кнопку, что в примере, или ставьте любую свою:
Только это должен лейбл быть, чтобы он открывал панель.
А стили ставьте хоть в виде ссылки, хоть в виде кнопки, хоть в виде фото.
Хорошее решение, только что открыл и не пойму, при переделке панели на правую сторону, я не меняю никаких id и названий лейблов, заменил то, что выше в коментарии писали (ориентация панели), но панель справа не открывается? Каким образом лейбл менять? спасибо
Разобрался Александр, все Ок! подписка
В чем была проблема? Не могу разобраться
Никаких проблем нет, просто внимательнее смотрите на CSS
Подскадите, пожалуйста, как сделать не кнопкой, а иконкой (картинкой)?
СУПЕР
Хорошее решение, спасибо!