Подтвердить что ты не робот

CSS3 attr() не работает в основных браузерах

У меня это в моем документе HTML:

<a class="wbutton tint" data-tint="rgba(255,0,0,.5)" href="#">This should be red, with an opacity of 0.5</a>

и это в файле CSS:

.window > .content .wbutton.tint {
    border: solid thin attr(data-tint, color);
    box-shadow: inset 0 0 50px attr(data-tint, color);
}

Firefox возвращает ошибку CSS в Firebug. Я что-то делаю неправильно?

В соответствии с спецификациями W3C для функции attr() она должна работать.

(Кроме того, там страница о attr() в MDN Wiki, поэтому я предполагаю, что она должна хотя бы работать в Firefox)

4b9b3361

Ответ 1

Глядя на грамматику, указанную в спецификации:

attr( <attr-name> <type-or-unit>? [ , <fallback> ]? )

Похоже, что запятая между именем атрибута и используемым модулем должна быть удалена:

.window > .content .wbutton.tint {
    border: solid thin attr(data-tint color);
    box-shadow: inset 0 0 50px attr(data-tint color);
}

Однако, даже если у вас есть правильный синтаксис, он тоже не будет работать. Оказывается, нет известной реализации версии 3-го уровня attr(), но с 2012 2013 2014 " > 2015 2016 2017. Что еще хуже, он все еще находится под угрозой с самого последнего редактор проекта спецификации.

Но не все потеряно: если вы хотите увидеть эту функцию, реализованную в будущих браузерах, еще есть время предложить ее в соответствующих каналах обратной связи! Вот предложения, которые были доведены до сих пор:

Для записи базовая content для псевдо-элементов :before и :after для сгенерированного содержимого. Таблица совместимости браузера Mozilla Developer Network (MDN) применима только к этой версии, а не к версии CSS3.

Ответ 2

На сегодняшний день attr() в CSS3 поддерживает только получение значений из атрибута HTML5 data для установки content элемента. Существует хороший fiddle, который показывает его.

Я тестировал его в Google Chrome 35, Mozilla Firefox 30 и Internet Explorer 11.

Если вы хотите использовать атрибуты данных HTML5 для разных вещей в CSS3, например, для установки элементов width и height, вам понадобится дополнительная библиотека JavaScript.

Фабрис Вайнберг написал CSS3 attr() Polyfill, который обрабатывает data-width и data-height. Здесь вы можете найти репозиторий Fabrice GitHub: cssattr.js.

Ответ 3

Я нашел хак. Это не атрибут, а манипулирование непосредственно стилями. В Chrome Canary вы можете использовать пользовательские свойства css и JS для управления свойствами.

В CSS:

.some { background-position: var(--x) 0; } 

В JS:

element.style.setProperty("--x", "100px", "");
//With same success you can set attribute. 

Тестовый пример: https://jsfiddle.net/y0oer8dk/

Firefox: https://jsfiddle.net/0ysxxmj9/2/