Я не знаю на английском, поэтому название может показаться немного странным. Я хочу использовать функцию CSS Attr(), как это:
Я имею в виду есть контейнер <div>
и внутреннюю <div>
, что я хочу иметь ширину в зависимости от атрибута данных ширины. Например, это было бы здорово, но это не работает:Могу ли я использовать атрибуты элемента для создания правил стиля?
<div class="container">
<div data-width="70%">
</div
</div>
.container {
width: 600px;
height: 200px;
}
.container div {
width: attr(data-width);
height: 100%;
}
Есть ли noJS способ использовать такие атрибуты, как это?
UPDATE: Ребята убедили меня в том, что JS это единственный способ сделать это :)
Это не большая проблема (но это плохо CSS, почему Youre так нелогично ли разница между content:attr(data-width)
и width: attr(data-width)
столь большой.? ?).
У одного из ребят была идея пройти через все элементы с помощью jQuery. Это нормально, но это очень ... местный? Не знаю, как это сказать по-английски. Во всяком случае, я Переработано свой код немного и вот оно:
allowed = ['width','color','float'];
$(document).ready(function() {
$('div').each(function (i, el) {
var data = $(el).data(),style = '';
if (!$.isEmptyObject(data)) {
$.each(data, function (attr, value) {
if (allowed.indexOf(attr) != - 1) {
style += attr + ': ' + value + '; ';
}
})
if (style.length != 0) {
$(el).attr('style', style);
}
}
})
})
Идея проста:
1. Мы предполагаем, что стиль мы хотим добавить к элементу является только один. Я имею в виду нет сценариев, которые будут пытаться добавить некоторые другие стили,
2. Мы создаем массив допустимых имен атрибутов, нам нужно, чтобы избежать использования неправильных имен в атрибуте стиля, например style="answerid: 30671428;"
,
3. Мы проходим через каждый элемент, сохраняем его атрибуты данных в объекте, проверяем, пуст ли объект, а если нет - проверяйте каждый атрибут, если он разрешен, создайте строку, содержащую все стили, которые нам нужны, и, наконец, добавим наш стиль string для элемента в качестве атрибута стиля.
Это все, спасибо всем
Plain CSS не может использовать HTML атрибуты как значения , – j08691
@ j08691 не 100% верно, работает для контента. – epascarello
за то, что вы описали, что мешает вам изменить вашу ширину css: attr (ширина данных); по ширине: 70%; – keikoku92