2013-08-23 2 views
21

Я пытаюсь установить ширину элемента с помощью attr() в CSS, но он не работает. Chrome говорит «недопустимое значение свойства», но я не уверен, что случилось.Настройка ширины с CSS attr()

Я пытаюсь использовать атрибут «prog» как ширину в процентах для div .progress.

Here's my example on codepen.

<div class="progresscontainer"> 
    <div class="progress" prog="10"> 
    </div> 
</div> 

.progresscontainer { 
    position:absolute; 
    background-color:black; 
    width:500px; 
    height:100px; 
    border-radius:5px; 
    border:1px solid black; 
    overflow:hidden; 
} 
.progress { 
    background-color: green; 
    background: -webkit-linear-gradient(top, transparent -100%, rgba(255, 255, 255, 0.5) 50%, transparent 200%), -webkit-linear-gradient(top, lime 0%, lightgreen 50%, green 50%, darkgreen 100%); 
    background: -moz-linear-gradient(top, transparent -100%, rgba(255, 255, 255, 0.5) 50%, transparent 200%), -moz-linear-gradient(top, lime 0%, lightgreen 50%, green 50%, darkgreen 100%); 
    background: -ms-linear-gradient(top, transparent -100%, rgba(255, 255, 255, 0.5) 50%, transparent 200%), -ms-linear-gradient(top, lime 0%, lightgreen 50%, green 50%, darkgreen 100%); 
    background: linear-gradient(top, transparent -100%, rgba(255, 255, 255, 0.5) 50%, transparent 200%), linear-gradient(top, lime 0%, lightgreen 50%, green 50%, darkgreen 100%); 
    position:absolute; 
    height:100%; 
    width: attr(prog %); 
} 

ответ

33

Это экспериментальная или, по крайней мере, проект, особенность CSS, и в настоящее время, в соответствии с документацией Mozilla Developer Network, является совместимым только с помощью свойства CSS content (в котором он может вернуться строка, которая должна быть помещена внутри псевдоэлемента), но не может (пока) использоваться для генерации значений для других свойств.

Ссылки:

+0

Я полагаю, что я слишком амбициозен. Есть ли у вас какие-либо идеи о том, какие временные рамки могут стать доступными в будущем? – sheodox

+1

К сожалению, нет; это зависит от того, когда, или даже *, если *, поставщики браузеров хотят его поддерживать. –

+0

Согласно MDN: «Выражение attr() может использоваться с любым свойством CSS.», Но я не могу заставить его работать, поэтому, возможно, какое-то время ... – Rudie

6

На самом деле, есть способ обойти attr() решения:

Я не рекомендую это, но вы могли бы объяснить для каждого сценария data-width атрибута, например:

(стилуса код)

$limit = 300 

.myClass 
    for num in (1...$limit) 
     &[data-width="${limit}"] 
      width $limit 

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

+1

Мне пришлось вымыть глаза с мылом, увидев это. Вы только что создали 15 КБ CSS, что повредит производительность браузера, и вы можете упустить значения диапазона или десятичные числа. Я бы скорее сказал клиенту «нет, не могу сделать ваш проект», чем это. –

+0

http://thecodinglove.com/post/168284383940/when-a-senior-dev-takes-a-look-at-my-code –