Есть ли что-то вроде атрибутов data- * для css?

#javascript #css

#javascript #css

Вопрос:

Я хочу передать значение, заданное в таблице стилей, чтобы его можно было прочитать с помощью javascript / jQuery? Я думал о создании невидимого элемента и присвоении ему значения, но тогда мне пришлось бы включать этот элемент во все страницы, что довольно сложно. Просто хочу знать, есть ли альтернатива этому.

У меня есть скрипт изменения размера js для изображений, который изменяет размер на основе области, а не высоты или ширины, поэтому я не могу указать ему maxwidth или maxheight как таковые. если вы даете ему 100, это делает область изображения = 100 ^ 2. Я полагаю, я мог бы установить максимальную ширину элемента в два раза больше, чем я хочу, но мне просто интересно, есть ли более классный способ сделать это.

Комментарии:

1. Это возможно, но не могли бы вы подробно объяснить, почему? Запрос кажется странным.

2. Я объяснил, для чего мне это нужно, но я могу немного расширить это

Ответ №1:

Насколько я знаю, браузеры отбрасывают атрибуты, которые они не понимают, поэтому, к сожалению, вы не можете просто ввести свои собственные data- * . Я думаю, вам, возможно, придется сделать это через скрытый элемент, что-то вроде приведенного ниже, который использует атрибут content:

 # styles.css
.data {
  display: none;
  content: "my data variable"
}

# index.html
<span class="data"></span>


# javascript
myData = $(".data").css('content')
  

Обновить

Играя в Chrome, похоже, что вы можете установить «содержимое» изображения, и оно не будет отображаться. Итак, вы могли бы сделать

 # styles.css
img {
  content: "100"
}
  

Не уверен, насколько хорошо это работает в разных браузерах, хотя, также просматривая спецификацию w3c, в ней говорится, что «содержимое» должно использоваться с :before или:after , поэтому не уверен, что вы столкнетесь с проблемами проверки там.

Комментарии:

1. Первый пример работает, если вы используете css вместо attr . jsfiddle.net/VjF3d/1

2. аккуратно! Я не нахожу его в спецификации w3c. Является ли это спецификацией .data:after {content: «<p>элемент</p>»} ? чтобы на содержимое можно было ссылаться с помощью javascript?

3. Я пробую то, что вы закодировали выше, используя jsfiddle, и содержимое самого элемента, похоже, даже не работает в Chrome:( jsfiddle.net/cutcopypaste/c7nqd

4. Вот документ, w3.org/TR/CSS2/generate.html#propdef-content . Я думаю, вам нужно будет сделать .data:after, не уверен, что нужно помещать теги html внутрь.

5. Используя jsfiddle от @Dennis (выше), вы можете увидеть это в действии, jsfiddle.net/VjF3d/1 . Хотя похоже, что селектор jQuery становится странным, если вы используете его с :after … Но я думаю, что это вопрос для гуру jquery.

Ответ №2:

Почему бы просто не использовать javascript для запроса фактического элемента и чтения его свойств таким образом? Тогда вы вообще не полагаетесь на CSS.

$('someDiv').getWidth()