Можно ли создавать встроенные псевдо стили?

Можно ли создавать встроенные псевдо стили?

Например, могу ли я сделать что-то вроде следующего?

<a href="#" style="background-color:green;{hover:background-color:red;}">Coding Horror</a>

Причина этого заключается в том, что я разрабатываю библиотеку .NET, которая создает элементы пользовательского интерфейса. Я хочу создать HTML-элементы, которые могут иметь состояние зависания без использования внешней таблицы стилей.

Ответы

Ответ 1

К сожалению нет, вы не можете реализовать эффекты зависания, используя встроенный CSS.

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

<style type="text/css">
    .custom-class { background-color:green; }
    .custom-class:hover { background-color:Red; }
</style>
<a href="#" class="custom-class">Coding Horror</a>

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

К сожалению, нет изящного решения этой проблемы.

Ответ 2

Это своего рода ситуация с Catch-22.

С одной стороны, вы можете добавить блок стиля прямо перед тем, где ваш элемент будет вставлен на страницу, но Крис Пеббл указывает на проблемы с этим. (Если вы решите это, убедитесь, что вы выбрали уникальные идентификаторы для своих элементов, чтобы ваши селекторы не случайно выбирали или не стирали что-либо еще).

С другой стороны, вы можете сделать что-то вроде этого:

<a href="#" onmouseover="this.style.color=red;" onmouseout="this.style.color='blue';">...</a>

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

Вы также можете ввести таблицу стилей на страницу, выписав тег ссылки или манипулируя документами .stylesheets, но это приведет к загрузке.

Я обычно видел первый метод (добавление блока стиля), сделанный на большом. "Модульные" сайты портала делают такие вещи, так что, может быть, это де-факто стандарт (по крайней мере, он более читабельный и, возможно, проще в обслуживании, чем там, где курсирует JavaScript?). Метод JavaScript, по-видимому, оказывает наименьшее влияние на DOM и общую страницу, поскольку вы сохраняете свою презентацию для себя.

Это один из тех мошенников с интерфейсом, где каждый ответ, который вы выбираете, в какой-то степени не прав, поэтому взвешивайте варианты и выбирайте, что вам проще всего создавать и поддерживать.

Ответ 3

Я бы динамически создавал файл CSS, когда я анализировал все элементы управления, и я бы добавил атрибут на стороне сервера к элементам управления, которые содержали зависание или другие стили псевдокласса.

<a style="color:blue" styleHover="color:blue" id="a1">Click!</a>

Ваш код может искать эти атрибуты и генерировать css файл на лету

#a1:hover {
  color:blue
}

Я не знаю, разрешает ли .NET разрешать вам этот тип разбора атрибутов, но я делаю что-то подобное в структуре, созданной для php.

Ответ 4

Или вы можете использовать jQuery hover и установите цвет фона.