Контур отображается неправильно в Chrome, если для стиля контура установлено значение сплошной (а не автоматический)

Я вижу такое поведение для Chrome на Mac (еще не тестировал его в Windows). Кроме того, поскольку эта работа предназначена для расширения Chrome, я согласен получить решение, актуальное только для Chrome (пока не должно работать в разных браузерах).

Проблема: браузер по-разному рисует «контур» вокруг элементов в зависимости от того, является ли стиль контура «автоматическим» или нет.

При рисовании контура вокруг тега, который является родителем «img», для чего-то вроде этого:

 <a href="image.com">
   <img class="profile_photo_img" src="imageSrc.jpeg" width="50" alt="Steve Jobs" height="50">
 </a>
  • Если для стиля контура установлено значение «авто», контур рисуется правильно. то есть Chrome учитывает размеры внутреннего изображения, чтобы отобразить контур вокруг тега. (см. зеленый контур на скриншоте).

введите здесь описание изображения

  • Если стиль контура "твердый" или любой другой обычный стиль, контур рисуется только вокруг внешнего тега без учета размеров внутреннего дочернего элемента.

введите здесь описание изображения

CSS, который я применяю, выглядит так:

.class-name:focus {
   outline: 4px auto #068065 !important;
   outline-offset: 2px !important;
 }

1) Есть ли способ исправить это или обойти это, т. Е. Браузер правильно отрисовывает контур для «сплошного» стиля контура?

2) Где я должен искать, чтобы узнать больше об этом? Может быть, какая-то неофициальная документация или доступ к соответствующему коду?


person tanushree    schedule 17.06.2013    source источник
comment
Недавно столкнулся с соответствующей проблемой в Chrome в Windows: stackoverflow.com/questions/17141865/   -  person tanushree    schedule 17.06.2013
comment
Нарисуйте свой контур на img, я уже несколько раз видел такое поведение со ссылками, но еще ни разу в хроме, так как я долго этого избегаю :) (про себя: забавно, как вы получаете привычки и никогда не переосмысливаете это)   -  person G-Cyrillus    schedule 17.06.2013
comment
Я меняю стиль элемента, который фокусируется на табуляции. Элемент a получает фокус, а img — нет. Я надеюсь сохранить чистоту, применяя стиль только к элементу, который получает фокус (а не к его дочерним элементам и т. д.). Имеет смысл?   -  person tanushree    schedule 17.06.2013
comment
а: фокус изображения? не работает? почему это должно быть ерундой?, вы можете добавить tabindex=0 в img, если вы хотите, чтобы он фокусировался на клике;)   -  person G-Cyrillus    schedule 17.06.2013
comment
Иногда теги привязки содержат несколько элементов (а не только одно изображение). В этом случае нам нужно, чтобы контур применялся к контейнеру тега привязки, а не только к содержащемуся изображению. Поэтому я не хочу делать особый случай для сценариев, когда в теге привязки есть только одно изображение. Это мое понимание на данный момент. Может быть, я что-то упускаю.   -  person tanushree    schedule 17.06.2013
comment
Связывание аналогичного вопроса: stackoverflow.com/questions/3975587/?   -  person tanushree    schedule 17.06.2013
comment
оки, я понимаю про строгий а:фокус. :)   -  person G-Cyrillus    schedule 17.06.2013


Ответы (1)


... Установите display:inline-block на вашу ссылку, чтобы макет активировался :)

тест: http://codepen.io/gcyrillus/pen/GFzrs

Я не вижу автоматического контура в FF 21.0

person G-Cyrillus    schedule 17.06.2013
comment
Спасибо за это. Возможно, это сработало бы, если бы я писал это для веб-приложения. Но, как уже упоминалось, этот код предназначен для расширения Chrome, которое меняет стиль контура элемента, который фокусируется на табуляции. Поскольку это применяется к любому внешнему веб-сайту, нет смысла изменять свойство отображения в фокусе. - person tanushree; 17.06.2013
comment
Эм, я не понял вашего вопроса. В событии «фокус» я добавляю класс к активному элементу (который определяет применяемые стили). В случае размытия я удаляю класс. Событие фокуса возникает всякий раз, когда элемент получает фокус — либо пользователь нажимает клавишу табуляции, чтобы установить/переместить фокус, либо он устанавливается программно с помощью focus(). - person tanushree; 17.06.2013
comment
Это происходит в сценарии контента расширения Chrome, который запускается в контексте веб-страницы, в которую он вставлен. - person tanushree; 17.06.2013
comment
Рассмотрю возможность установки встроенного блока для ссылки, если больше ничего не помогает. - person tanushree; 17.06.2013
comment
Спасибо за подробности. Есть ли у вас способ проверить, есть ли у ‹a› правила отображения или плавания, чтобы перезаписать его только тогда, когда у него есть только встроенное правило по умолчанию? Я считаю, что если ‹a› содержит разные теги для целей стилизации, то его макет уже каким-то образом установлен - person G-Cyrillus; 17.06.2013
comment
Да. Это то, что я решил пойти с наконец. Я проверяю, является ли тег ‹a› display:inline и имеет ли он какой-либо невстроенный элемент в качестве дочернего. Если это так, я устанавливаю отображение активного ‹a› на встроенный блок, пока он сфокусирован (через класс). Когда элемент размыт, класс удаляется. Кажется, пока работает нормально. Спасибо за помощь :) - person tanushree; 20.06.2013