zent
Version:
一套前端设计语言和基于React的实现
56 lines (55 loc) • 1.69 kB
JavaScript
export function parseFontSize(fontSize) {
return parseCSSAbsoluteUnit(fontSize.toLowerCase());
}
export function parseBorderWidth(width, fontSize, rootFontSize) {
width = width.toLowerCase();
var pixels = parseCSSAbsoluteUnit(width);
if (pixels !== null) {
return pixels;
}
return parseCSSFontRelativeUnit(width, fontSize, rootFontSize);
}
var CSS_ABSOLUTE_UNIT_REGEXP = /(^-?\d*\.?\d+)(cm|mm|in|px|pt|pc)$/;
function parseCSSAbsoluteUnit(value) {
var result = CSS_ABSOLUTE_UNIT_REGEXP.exec(value);
if (result) {
var val = parseFloat(result[1]);
switch (result[2]) {
case 'cm':
return (val * 9600) / 254;
case 'mm':
return (val * 960) / 254;
case 'in':
return val * 96;
case 'pt':
return (val * 4) / 3;
case 'pc':
return val * 16;
case 'px':
return val;
default:
return null;
}
}
return null;
}
var CSS_FONT_RELATIVE_UNIT_REGEXP = /(^-?\d*\.?\d+)(em|rem)$/;
function parseCSSFontRelativeUnit(value, fontSize, rootFontSize) {
var result = CSS_FONT_RELATIVE_UNIT_REGEXP.exec(value);
if (result) {
var val = parseFloat(result[1]);
switch (result[2]) {
case 'em': {
var fs = fontSize();
return fs !== null ? fs * val : null;
}
case 'rem': {
var fs = rootFontSize();
return fs !== null ? fs * val : null;
}
default:
return null;
}
}
return null;
}