Страницы

Поиск по вопросам

Показаны сообщения с ярлыком меню. Показать все сообщения
Показаны сообщения с ярлыком меню. Показать все сообщения

суббота, 11 апреля 2020 г.

Как в горизонтальном меню вместо маркеров списка вставить изображение?

#меню #html

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

Код страницы:



.menu{
    background-image: url(images/fon_menu.jpg);
    height: 50px;
}

li {
    float: left;
    list-style-image: url(images/kn_cl.png);
    font-family: sans-serif;
    font-size: 20px;
    margin: 10px 40px;
}





Если в li пишу display: inline или inline-block, то маркеры и изображения вообще
не отображаются, исчезают.

С тем кодом, который есть сейчас, всё работает, но изображение смещает текст ссылки.
Таким образом вместо маркера получается поставить только изображение такой высоты,
какую высоту имеет текст ссылки (20 px). Если высота больше, сдвигается текст.
    


Ответы

Ответ 1



Вместо list-style-image лучше используйте обычный background. С его помощью можно гибко настроить позицию изображения, чего не получится в случае с list-style-image http://jsfiddle.net/8fV3X/

понедельник, 9 марта 2020 г.

Скрыть выпадающее меню при клике куда угодно JQuery

#javascript #jquery #меню


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

$(document).ready(function() {
    $(hidden).slideUp();

    $('.switch').click(function() {
        $(hidden).slideDown(300);
        $('#drop-but').removeClass('switch');
        return false;
    });

    $(document).click(function() {
        $(hidden).slideUp(300);
        $('#drop-but').addClass('switch');
    });
});

    


Ответы

Ответ 1



Как вариант: $(function() { $('.menu-wrap').on('click', function() { var $this = $(this); if ($this.hasClass('active')) { $this.removeClass('active'); $(document).off('click.menu'); } else { $this.addClass('active'); $(document).on('click.menu', function(e) { if ($(e.target).closest('.menu-wrap').length === 0) { $('.menu-wrap').removeClass('active'); $(document).off('click.menu'); } }); } }); }); .menu-wrap { position: relative; width: 100px; } .menu-title { width: 100%; border: 1px solid black; cursor: pointer; transition: all .5s; } .menu-wrap.active .menu { visibility: visible; opacity: 1; } .menu { border: 1px solid black; border-top: none; width: 100%; visibility: hidden; opacity: 0; transition: all .5s; } ul { list-style-type: none; margin: 0; padding: 0; } li:hover { cursor: pointer; background: #eee; }

Ответ 2



Дело в том, что этот обработчик: $('.switch').click(function() { $(hidden).slideDown(300); $('#drop-but').removeClass('switch'); return false; }); Отменяет все обработчики на .switch, что идут после него. Чтобы не отменять вместо return false; сделайте e.preventDefault(); Соответственно e надо указать как входящий параметр $('.switch').click(function(e) {

воскресенье, 26 января 2020 г.

Off-canvas меню

#меню #transition #javascript #transform #css


Добрый вечер!
На досуге занимаюсь разработкой собственного сайта и возникли трудности в создании
off-canvas меню. Структура страницы состоит из трёх блоков - "шапка", меню и содержимое.
Изначально меню видно. Ширина меню составляет 20% от ширины контейнера, ширина блока
с содержимым - 80%.
Упрощённо, задача заключается в том, что при нажатии на кнопку "Меню", меню плавно
смещается за край контейнера. В свою очередь блок содержимого плавно растягивается
до 100% от ширины контейнера.
При повторном нажатии на кнопку "Меню", слева плавно выходит меню, которое занимает
20% от ширины контейнера. В свою очередь ширина блока с содержимым плавно уменьшается
до 80%. Именно уменьшается, а не частично смещается за край контейнера. (именно это
заставило писать своё решение).
Схематически это выглядит так:



Появление/исчезновение меню я достиг за счёт css свойства "transform: translate3d(-100%,
0, 0)". Проблема в том, что при смещении меню за край контейнера, блок содержимого
хоть и растягивается до 100%, но "падает" вниз из за нехватки места. Понимаю, что за
меню остались те самые 20% от ширины контейнера.
Как быть? 
Буду очень Вам благодарен за помощь!
Код:
HTML:
Main
CSS: .container { max-width: 75em; margin-left: auto; margin-right: auto; position: relative; overflow: hidden; } #header { width: 100%; } #nav { float: left; width: 20%; } #main { float: right; width: 80%; transition: transform 500ms ease 0s; background: gray; } #nav { background: green; transform: translate3d(-100%, 0, 0); transition: transform 500ms ease 0s; } #nav.visible { transform: none; } #main.large { width: 100%; } JS: var nav = $("#nav"); $('#show-nav').click(function(e) { e.preventDefault(); if (nav.hasClass('visible')) { nav.removeClass('visible'); $("#main").addClass('large'); } else { nav.addClass('visible'); $("#main").removeClass('large'); } });


Ответы

Ответ 1



js: $('#show-nav').click(function(e) { e.preventDefault(); $(this).parents('.container').toggleClass('large'); }); css: #main { float: right; width: 80%; transition: all 0.2s ease-in-out; background: gray; } #nav { background: green; transition: all 0.2s ease-in-out; float: left; width: 20%; } .container.large #main { width: 100%; } .container.large #nav { width:0%; } Пример: http://jsfiddle.net/LcNJ4/1/ Аж приятно отвечать на такой понятно расписанный вопрос, спасибо!)

воскресенье, 22 декабря 2019 г.

Контекстное меню в Android

#java #android #listview #меню #popupmenu


Доброго всем времени суток!

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



Скажите, пожалуйста, что это за кнопка и как наилучшим образом приделать контекстное
меню к каждому элементу listview? Спасибо!
    


Ответы

Ответ 1



Кнопка называется "overflow". Скачать её можно в интернете, на habre был когда-то пост со ссылкой на пак с разноцветными иконками. Меню называется "PopUpMenu". Чтобы его вызвать нужно: 1) Добавить в лэйаут элемента списка саму иконку, найти её в адаптере и далее: @Override public View getView(final int position, View convertView, ViewGroup parent) { //popUp menu holderMain.settings.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { PopupMenu popup = new PopupMenu(context, v); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.mark_as_read: //действие return true; case R.id.share_link: //действие return true; case R.id.show_comments: //действие return true; default: return false; } } }); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.popup_menu, popup.getMenu()); popup.show(); } }); 2) Ну и ещё нужен popup_menu.xml в папке /res/menu

суббота, 13 июля 2019 г.

При наведении на меню не сразу пропадает часть страницы, которое оно перекрывает

пятница, 12 июля 2019 г.

Как в горизонтальном меню вместо маркеров списка вставить изображение?

Не пойму, как вставить изображение. У меня горизонтальное меню высотой 50 px, сделал изображение, которое хочу поставить вместо маркера списка, высота изображения тоже 50 px.
Код страницы:
.menu{ background-image: url(images/fon_menu.jpg); height: 50px; } li { float: left; list-style-image: url(images/kn_cl.png); font-family: sans-serif; font-size: 20px; margin: 10px 40px; }


Если в li пишу display: inline или inline-block, то маркеры и изображения вообще не отображаются, исчезают.
С тем кодом, который есть сейчас, всё работает, но изображение смещает текст ссылки. Таким образом вместо маркера получается поставить только изображение такой высоты, какую высоту имеет текст ссылки (20 px). Если высота больше, сдвигается текст.


Ответ

Вместо list-style-image лучше используйте обычный background. С его помощью можно гибко настроить позицию изображения, чего не получится в случае с list-style-image http://jsfiddle.net/8fV3X/

четверг, 20 июня 2019 г.

Скрыть выпадающее меню при клике куда угодно JQuery

Хочу сделать меню, которое открывается по нажатию на кнопку и закрывается при клике по любой части экрана. Проблема в том, что меню закрывается при клике куда угодно, кроме кнопки открывания. По моей задумке, после открытия меню класс у кнопки убирается и она должна становиться неактивна, а значит становится такой же как и любая часть документа, но этого почему-то не происходит. В чем моя ошибка?
$(document).ready(function() { $(hidden).slideUp();
$('.switch').click(function() { $(hidden).slideDown(300); $('#drop-but').removeClass('switch'); return false; });
$(document).click(function() { $(hidden).slideUp(300); $('#drop-but').addClass('switch'); }); });


Ответ

Как вариант:
$(function() { $('.menu-wrap').on('click', function() { var $this = $(this); if ($this.hasClass('active')) { $this.removeClass('active'); $(document).off('click.menu'); } else { $this.addClass('active'); $(document).on('click.menu', function(e) { if ($(e.target).closest('.menu-wrap').length === 0) { $('.menu-wrap').removeClass('active'); $(document).off('click.menu'); } }); } }); }); .menu-wrap { position: relative; width: 100px; } .menu-title { width: 100%; border: 1px solid black; cursor: pointer; transition: all .5s; } .menu-wrap.active .menu { visibility: visible; opacity: 1; } .menu { border: 1px solid black; border-top: none; width: 100%; visibility: hidden; opacity: 0; transition: all .5s; } ul { list-style-type: none; margin: 0; padding: 0; } li:hover { cursor: pointer; background: #eee; }


среда, 20 марта 2019 г.

Off-canvas меню

Добрый вечер! На досуге занимаюсь разработкой собственного сайта и возникли трудности в создании off-canvas меню. Структура страницы состоит из трёх блоков - "шапка", меню и содержимое. Изначально меню видно. Ширина меню составляет 20% от ширины контейнера, ширина блока с содержимым - 80%. Упрощённо, задача заключается в том, что при нажатии на кнопку "Меню", меню плавно смещается за край контейнера. В свою очередь блок содержимого плавно растягивается до 100% от ширины контейнера. При повторном нажатии на кнопку "Меню", слева плавно выходит меню, которое занимает 20% от ширины контейнера. В свою очередь ширина блока с содержимым плавно уменьшается до 80%. Именно уменьшается, а не частично смещается за край контейнера. (именно это заставило писать своё решение). Схематически это выглядит так: Появление/исчезновение меню я достиг за счёт css свойства "transform: translate3d(-100%, 0, 0)". Проблема в том, что при смещении меню за край контейнера, блок содержимого хоть и растягивается до 100%, но "падает" вниз из за нехватки места. Понимаю, что за меню остались те самые 20% от ширины контейнера. Как быть? Буду очень Вам благодарен за помощь! Код: HTML:

Main
CSS: .container { max-width: 75em; margin-left: auto; margin-right: auto; position: relative; overflow: hidden; }
#header { width: 100%; }
#nav { float: left; width: 20%; } #main { float: right; width: 80%; transition: transform 500ms ease 0s; background: gray; } #nav { background: green; transform: translate3d(-100%, 0, 0); transition: transform 500ms ease 0s; } #nav.visible { transform: none; }
#main.large { width: 100%; } JS: var nav = $("#nav");
$('#show-nav').click(function(e) { e.preventDefault();
if (nav.hasClass('visible')) { nav.removeClass('visible'); $("#main").addClass('large'); } else { nav.addClass('visible'); $("#main").removeClass('large'); } });


Ответ

js: $('#show-nav').click(function(e) { e.preventDefault(); $(this).parents('.container').toggleClass('large'); }); css: #main { float: right; width: 80%; transition: all 0.2s ease-in-out; background: gray; } #nav { background: green; transition: all 0.2s ease-in-out; float: left; width: 20%; }
.container.large #main { width: 100%; }
.container.large #nav { width:0%; } Пример: http://jsfiddle.net/LcNJ4/1/ Аж приятно отвечать на такой понятно расписанный вопрос, спасибо!)

вторник, 13 ноября 2018 г.

Контекстное меню в Android

Доброго всем времени суток!
У меня есть ListView, и я хочу к каждому его элементу прикрутить контекстное меню. Часто видел в приложениях, что контекстное меню для элементов листвью вызывается при клике на специальную кнопку с тремя квадратами. Не знаю, как называется эта кнопка, поэтому даже не могу нормально погуглить. Выглядит эта кнопка так:

Скажите, пожалуйста, что это за кнопка и как наилучшим образом приделать контекстное меню к каждому элементу listview? Спасибо!


Ответ

Кнопка называется "overflow". Скачать её можно в интернете, на habre был когда-то пост со ссылкой на пак с разноцветными иконками. Меню называется "PopUpMenu". Чтобы его вызвать нужно:
1) Добавить в лэйаут элемента списка саму иконку, найти её в адаптере и далее:
@Override public View getView(final int position, View convertView, ViewGroup parent) { //popUp menu holderMain.settings.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { PopupMenu popup = new PopupMenu(context, v); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.mark_as_read: //действие return true; case R.id.share_link: //действие return true; case R.id.show_comments: //действие return true; default: return false; } } }); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.popup_menu, popup.getMenu()); popup.show(); } });
2) Ну и ещё нужен popup_menu.xml в папке /res/menu