Как задать активную область ссылки на изображении в html/css?

Задать вопрос

Вопрос задан

Изменён 6 лет 8 месяцев назад

Просмотрен 2k раз

На веб-странице есть три иконки платёжных систем:

с таким кодом:

html:

<div>
<a href="#" title="mastercard"><img src="master.png"></a>
<a href="#" title="Visa"><img src="visa.png"></a>
<a href="#" title="PayPal"><img src="pal.jpg"></a>
</div>

css:

.paicons {
padding: 1em;
float: right;
margin-top: -10em;
margin-right: 28em;
}

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

Я пытался задать ширину и высоту элементу «a» в css внутри «div» но это не дало результата. Как сделать так чтоб каждая ссылка была точно подогнана под картинку? Спасибо!

  • html
  • css
div {
  height: 6em;
  background: antiquewhite;
  text-align: center;
}

div::before {
  content: "";
  display: inline-block;
  vertical-align: middle;
  height: 100%;
}

a {
  display: inline-block;
  vertical-align: middle;
}

img {
  display: inline-block;
  vertical-align: top;
}
<div><!-- здесь нет пробела между тегами
  --><a href="#" title="mastercard"><img src="https://placeholdit.imgix.net/~text?txtsize=16&txt=MasterCard&w=100&h=50"></a>
  <a href="#" title="Visa"><img src="https://placeholdit.imgix.net/~text?txtsize=16&txt=Visa&w=100&h=50"></a>
  <a href="#" title="PayPal"><img src="https://placeholdit.imgix.net/~text?txtsize=16&txt=PayPal&w=100&h=50"></a>
</div>

0

. paicons a{
display:inline-block}

попробуйте

0

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

как правильно настроить размер области клика

У вас бывало такое, что элемент на странице не реагировал на клик, пока вы не нажмёте на определённую его область?

Это происходило потому, что не весь элемент был кликабельным. Чтобы стало понятнее, посмотрите на картинку ниже — на ней видно, какой должна и не должна быть область клика:

В этой статье, мы рассмотрим несколько распространённых проблем с UX, а в конце покажем наглядный пример с нашего сайта.

UX-решения

Рекомендации WCAG

Согласно WCAG 2.1 (руководство по обеспечению доступности web-контента), минимальный размер для тач-элемента должен быть 44×44 CSS пикселя. Размер не фиксирован, но его можно взять за основу.

Закон Фиттса

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

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

Далее рассмотрим реальные примеры, в которых также учитываются рекомендации WCAG 2.5.5 и закон Фиттса.

Кнопки

При необходимости можно использовать элемент <button>. Рассмотрим этот случай на существующей системе интернет-банкинга:

<div>Next</div>

Вот так выглядит эта кнопка:

При наведении курсора на кнопку он всё ещё выглядит, как указатель, и это нормально. Но если выделить текст, то появляется текстовый курсор. Такого не случится, если использовать правильные элементы.

Благодаря HTML-элементу <button>, пользователь сможет:

  • выбирать кнопку с помощью клавиатуры;
  • нажимать на кнопку с помощью мыши, клавиатуры или касания.

Кроме того, его можно реализовать без JavaScript.

Кнопкам нужны внутренние отступы, и вот почему:

  • тексту не должно быть «тесно»;
  • большую кнопку проще заметить (Закон Фиттса).

Ссылки

Эта ошибка встречается в интернете довольно часто. Если перед вами меню навигации, padding должен быть у элемента <a>, а не <li>.

<nav>
  <ul>
    <li><a href="#">Home</a></li>
    <li><nav href="#">Products</nav></li>
    <li><a href="#">Store</a></li>
    <li><a href="#">Team</a></li>
  </ul>
</nav>
.nav-item {
  padding: 12px 16px;
}

С таким кодом кликнуть можно будет только на текст:

Чтобы этого избежать, необходимо добавить padding к самой ссылке. Обратите внимание, что нижний и верхний отступ не будут работать по умолчанию, так как это встроенные элементы. Для этого можно использовать

block, inline-element или flex.

.nav-item a {
  display: block;
  padding: 12px 16px;
}

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

Гамбургер-меню

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

Предположим, что так выглядит область нажатия:

Попасть пальцем в такой маленький объект сложно. Но если увеличить эту область, то всё станет гораздо проще:

Можете попробовать самостоятельно в этом демо.

Чекбоксы и радио-кнопки

При наличии чекбокса или радио-кнопки пользователь ожидает, что он сможет нажать на него или связанный с ним текст.

На скриншоте ниже область клика привязана только к переключателю поэтому нажатие на текст ни к чему не приведёт:

Эту ситуацию можно решить, если в HTML связать label и input, используя атрибут for:

<input type="checkbox">
<label for="option1">Option 1</label>

Или поместить input внутрь label:

<label for="option1">
    Option 1
    <input type="checkbox">
</label>

После нужно добавить padding для <label>, чтобы область клика стала больше:

Сайдбар

Часто на страницах с категориями кликабельная область ссылок не распространяется на всю ширину элемента списка. Это происходит потому, что область клика находится только на текстовом элементе:

Чтобы исправить эту ситуацию, нужно:

  1. Удалить отступ из элемента <li> и переместить его в элемент <a>, как в пункте «Ссылки».
  2. Добавить display: block.
.nav-item a {
    /*Other styles*/
    padding: 12px 16px;
    display: block;
}

После того, как будут выполнены эти действия, получим:

Примеры

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

Заголовок раздела

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

Как правило, интервал вокруг стрелки может быть сделан в CSS, с помощью свойства padding или width и height.

Использование псевдоэлементов для увеличения области клика

Не всегда возможно сделать кликабельную зону больше просто за счёт изменения ширины и высоты элемента или отступа. В этом случае на помощь приходят псевдоэлементы.

Как это работает?

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

Ниже псевдоэлемент :after добавлен к кнопке меню:

.menu-2:after { content: ""; position: absolute; left: 55px; top: 0; width: 50px; height: 50px; background: #e83474; /*Other styles*/ }

Квадрат 55px специально расположен справа от элемента для наглядности.

Смотрите гифку ниже или попробуйте демо на Codepen.

Пример с нашего сайта

Недавно мы обнаружили на нашем сайте проблему: при попытке нажать на лайк с телефона на главной странице происходит переход на статью. Разобравшись в вопросе, оказалось, что рекомендуемый размер элемента для клика на touchscreen 48×48 dp. Иначе по нему сложно попасть на мобильных.

Чтобы решить эту проблему, нужно увеличить площадь клика за счёт паддингов, но при этом сохранить визуальное расположение элементов. Т.е. добавить положительный паддинг и отрицательный маргин, например. Или уменьшить внешние отступы.

Сейчас вот так:

Нужно вот так:

Как видно, кнопка осталась на своём месте, но область клика/тапа стала больше. При этом важно следить, чтобы области не пересекались.

Один из вариантов для лайков (не самый красивый, но рабочий)

.post-votes {
 margin: 0 5px;
}
 
.svelte-15n67pa {
 padding: 9px;
 margin: -9px;
} /* кнопки вверх/вниз */

Ещё круче вот так:

Код для правой кнопки (для левой зеркально):

padding: 14px 14px 14px 7px; 
margin: -14px -14px -14px -7px;

Адаптированный перевод статьи «Enhancing The Clickable Area Size»

html — Как я могу иметь кликабельное изображение и ссылку (якорь) в элементе списка

спросил

Изменено 3 года, 3 месяца назад

Просмотрено 1к раз

Как уже упоминалось в заголовке, я хочу получить иконку и тег внутри li.

Мне нужен небольшой значок слева от текста на панели навигации, но при этом вся панель может быть нажата.

Я пытался погуглить, но безрезультатно.

Моя текущая ситуация выглядит так:

HTML

 
 

CSS

 ул {
    тип стиля списка: нет;
    высота: 40 пикселей;
    ширина: авто;
    заполнение: 0;
    маржа: 0;
}
ли а {
    поле справа: 50px;
    фон: #B0AA9A;
    плыть налево;
    высота: 30 пикселей;
    ширина: 150 пикселей;
    размер шрифта: 25px;
    цвет: #454138;
    семейство шрифтов: Helvetica, без засечек;
    текстовое оформление: нет;
}
картинка {
    высота: 20 пикселей;
    ширина: 20 пикселей;
    плыть налево
}
 
  • HTML
  • css
  • стили

3

Сделайте что-то вроде этого, Поместите Img внутри тега A, и тогда оба будут доступны для кликов по любому href, который вы дадите.

 <ул>
    
  • Авторизоваться
  • Тест1
  • Тест2
  • Тест3
  • Тест4
  • 0

    Зарегистрируйтесь или войдите в систему

    Зарегистрируйтесь с помощью Google

    Зарегистрироваться через Facebook

    Зарегистрируйтесь, используя электронную почту и пароль

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    css — Кликабельные области изображения — даже при изменении размера экрана html

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

    Поскольку элементы HTML являются абсолютными по своему масштабу и размеру, они не будут работать с содержимым с динамическим размером ( width:80% и т. д.).

    Есть несколько вариантов. Вы можете найти некоторые системы Javascript, которые динамически изменяют размер границ области при обнаружении (изменения) размера окна. Это, конечно, добавит некоторые накладные расходы, а также раздувание JS для загрузки страниц.

    ИЛИ Подожди, барабанная дробь приближается… слышишь?

    Yep — S calable V ector G raphics — это настоящее будущее в отношении кликов по сопоставлению изображений без накладных расходов Javascript, вы можете прочитать о них на их вики или на MDN.

    Таким образом, используя SVG, вы можете импортировать стандартный формат изображения (например, JPG и т. д.), а затем накладывать на него опорные точки и интерактивные элементы, которые можно стилизовать с помощью стилей, подобных CSS, что дает гораздо больше поддержки и возможностей, чем старый синтаксис , такой как затухание, наведение курсора, смешение и размытие — все это происходит на статических изображениях из-за взаимодействия с пользователем в любой заданной точке на экране любого размера.

    Настоятельно рекомендуется это руководство по созданию интерактивной карты области SVG на элементе изображения HTML.


    (ссылки выделены для наглядности)

     #backing {
    вертикальное выравнивание: посередине;
    маржа: 0;
    переполнение: скрыто;
    }
    # поддержка svg {
    отображение: встроенный блок;
    положение: абсолютное;
    сверху: 0; слева: 0;
    } 
     <рисунок> 
    Автор записи

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

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