Перепишите этот код: интерактивные div

Я бы хотел это изменить:

<a href='foo'> 
    <div> Moo </div>
</a>

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

Кроме того, является ли a { display:block; } законным способом обойти проверку?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
426
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Почему бы не использовать <span> вместо <div> и не установить дисплей: блок на обоих элементах?

Кроме того, чтобы ответить на ваш последний вопрос: я не верю, что добавление дисплей: блок; к вашей привязке заставит его пройти проверку. Валидатор проверяет, соблюдаете ли вы (X) правила HTML, а не то, как представить страницу пользователю.

Вы правы, сэр, поскольку проверка html и css - это два разных животных.

Rob Stevenson-Leggett 10.11.2008 20:32

Мне пришлось сделать что-то подобное для кнопок формы. Эта стратегия менее эффективна с элементами формы, но она все равно сработала, и мы получили нашу обоюдоострую границу. Обидно, что свойство border-style: double так плохо реализовано в браузерах ...

Zack The Human 10.11.2008 21:58

Обычно я считаю тег <a > особым случаем для этой цели. Вы должны иметь возможность применять это практически ко всему - это вроде как вся суть гипертекста (хороший пример приходит на ум <tr >). Но если вам нужно передать где-нибудь валидатор, я понимаю.

Не могли бы вы использовать обработчик javascript onclick для div и полностью исключить привязку?

Вы можете рассмотреть возможность размещения div вне a, если он предназначен только для целей отображения, если только не важно, чтобы внешняя граница была интерактивной. Либо это:

<div class = "dbl_border_links"><a href = "blah">Blah text</a></div>

или это:

<a class = "dbl_border_links" href = "blah"><span>Blah text</span></a>

будет работать, и вы можете использовать что-то вроде этого:

<style>
  .dbl_border_links, .dbl_border_links>* {
    display: block;
    border: 1px solid;
    padding: 1px;
  }
  .dbl_border_links {
    border-color: red;
  }
  .dbl_border_links > * {
    border-color: blue;
  }
</style>

чтобы указать стили. Лично я бы выбрал div, содержащий a, но работает любой подход.

да, фон div должен быть интерактивным.

Jimmy 10.11.2008 20:29

Во-первых, нет ничего плохого в том, чтобы дать привязку display: block; Я бы сказал, что это одна из наиболее распространенных вещей, которые люди делают с CSS, и она полностью соответствует стандартам. Во-вторых, есть несколько способов создать двойную границу на элементе HTML. Во-первых, обратите внимание на свойство "outline":

http://webdesign.about.com/od/advancedcss/a/outline_style.htm

По общему признанию, это будет работать только в более современных браузерах, но должно постепенно ухудшаться, поскольку структура не занимает места на странице. Если содержимое ссылки должно быть изображением, вы можете просто дать <a> небольшой отступ и цвет фона, а также обычную границу (другого цвета), чтобы создать впечатление двойной границы. Или добавьте к изображению собственную рамку. Конечно, вы также можете сделать что-то в соответствии с вашей первоначальной идеей, но вложив свой HTML-код в обратную сторону и просто назначив разные границы каждому элементу. Или вы можете использовать встроенный элемент внутри ссылки (например, <span> или <em> или что-то в этом роде), который вы также настроили для отображения: block; (да, это тоже верно!). Удачного кодирования!

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

Jimmy 11.11.2008 18:46

Если я правильно понимаю ваши намерения, вы должны разместить, как уже упоминалось, div за пределами привязки и, чтобы получить такое же представление, сделать привязку width:100%;height:100%. Кроссбраузерность может отличаться. Кроме того, вы можете полностью сбросить div и дать привязку display:block;

Что именно вы пытаетесь сделать?

Другие вопросы по теме