2016-11-15 3 views
3

Я тестирую структуру CSS для указания чисел через микроклассы. Например, что-то вроде <div class="fifty percent wide"> может перевести на width: 50%. Реализация использует переменные CSS (пользовательские свойства).Получение результата CSS calc для установки пользовательских свойств

Рассмотрим следующий CSS:

.fifty { --number: 50; } 
.percent { --percent: calc(1% * var(--number)); } 
.wide { width: var(--percent); } 

Это все хорошо и прекрасно работает. Проблема в том, что я хочу написать набор тестов, который будет проверять, что fifty percent приводит к значению для настраиваемого свойства --percent из 50%. К сожалению, если я использую getComputedStyle для изучения значения --percent, я вижу целую (неразрешенную, несоизмеримую) строку «calc». Если я рассмотрю значение width, я получаю уже разрешенное значение, такое как «512px».

Есть ли способ получить и проверить программно разрешенные, рассчитанные значения пользовательских свойств CSS? Или API для принудительной оценки выражений «calc»?

+0

Связанный: http://stackoverflow.com/questions/28715872/what-is-result-of-calc-in-css, хотя это не имеет никакого отношения к тому, как вычисляются пользовательские свойства, он предлагает немного понимания относительно того, как underspecced calc() находится в этой области. – BoltClock

ответ

0

Один из способов сделать это - рассчитать процент самостоятельно, получив ширину от элемента и его родителя (в пикселях). Затем просто разделите parentWidth на elementWidth, чтобы рассчитать процент.

Кроме того, возможно, вы можете проверить CSS вручную. Если все работает так, как ожидалось, вам больше не нужны тестовые примеры. Не похоже, чтобы это перерывало ночь, верно?

2

У вас есть ошибка опечатка в .percent классе:

.percent { --percent: calc(1% * var(--number); } 
//          ^ you have to close Brackets of Calc() 
.percent { --percent: calc(1% * var(--number)); } 

Я предлагаю, чтобы сделать простой тест, получив ширину элемента и его родителя в рх, что-то вроде:

var elem = document.getElementById("test"); 
 
var parent = document.getElementById("parent"); 
 
var elem_width = window.getComputedStyle(elem, null).getPropertyValue("width"); 
 

 
alert("50% of 200px parent width = " + elem_width);
#parent{ 
 
    background-color:black; 
 
    width:200px; 
 
    height: 200px; 
 
} 
 

 
.fifty { --number: 50; } 
 
.percent { --percent: calc(1% * var(--number)); } 
 
.wide { 
 
    width: var(--percent); 
 
    height: 100px; 
 
    background-color:red; 
 
}
<div id="parent"> 
 
    <div id="test" class="fifty percent wide"> 
 
    </div> 
 
</div>

ПРИМЕЧАНИЕ: A ttributes или стили CSS, которые он не понимает из кода в DOM. Это по дизайну. Javascript имеет доступ только к DOM, а не к коду. Таким образом, нет, нет доступа к ресурсу из javascript, который сам браузер не поддерживает.

+1

@torazaburo благодарит за ответ, но вы согласны со мной в моем ответе? –

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^