首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析CSS字体速记格式

问如何解析CSS字体速记格式
EN

Stack Overflow用户
提问于 2011-04-11 16:30:14
回答 4查看 3.3K关注 0票数 11

我需要将CSS字体简写格式解析为单独的组件( font -family,font-size,font-weight,...)。这个速记格式看起来相当复杂。这里有两个例子:

代码语言:javascript
复制
10px sans-serif
bold italic small-caps 1em/1.5em verdana,sans-serif

在我开始为它编写解析器之前,有没有现成的解析器可以使用(最好是用JavaScript编写)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-11 18:01:57

下面是一个“临时DOM元素并使用jquery的css()函数”的解决方案:

http://jsfiddle.net/thirtydot/tpSsE/2/

代码语言:javascript
复制
var $test = $('<span />');
$test.css('font', 'bold italic small-caps 1em/1.5em verdana,sans-serif');

alert($test.css('fontWeight'));
alert($test.css('fontStyle'));
alert($test.css('fontVariant'));
alert($test.css('fontSize'));
alert($test.css('lineHeight'));
alert($test.css('fontFamily'));

​

票数 11
EN

Stack Overflow用户

发布于 2014-11-12 11:03:35

纯自由范围Javascript版本:

代码语言:javascript
复制
var parsedStyleForCSS = function(cssString){
    var el = document.createElement("span");
    el.setAttribute("style", cssString);

    return el.style; // CSSStyleDeclaration object
};

var parsedStyle = parsedStyleForCSS("font: bold italic small-caps 1em/1.5em verdana,sans-serif");

console.log(parsedStyle["fontWeight"]); // bold
console.log(parsedStyle["fontStyle"]); // italic
console.log(parsedStyle["fontVariant"]); // small-caps
console.log(parsedStyle["fontSize"]); // 1em
console.log(parsedStyle["lineHeight"]); // 1.5em
console.log(parsedStyle["fontFamily"]); // verdana, sans-serif

如果您希望对完整的样式表执行类似的操作,请参阅以下答案:Parsing CSS in JavaScript / jQuery

票数 8
EN

Stack Overflow用户

发布于 2011-04-11 19:10:51

这是我自己对刚创建的字体解析器函数的微不足道的尝试。但我不确定它是否适用于字体速记格式的所有特性。

代码语言:javascript
复制
function parseFont(font)
{
    var fontFamily = null,
        fontSize = null,
        fontStyle = "normal",
        fontWeight = "normal",
        fontVariant = "normal",
        lineHeight = "normal";

    var elements = font.split(/\s+/);
    outer: while (element = elements.shift())
    {
        switch (element)
        {
            case "normal":
                break;

            case "italic":
            case "oblique":
                fontStyle = element;
                break;

            case "small-caps":
                fontVariant = element;
                break;

            case "bold":
            case "bolder":
            case "lighter":
            case "100":
            case "200":
            case "300":
            case "400":
            case "500":
            case "600":
            case "700":
            case "800":
            case "900":
                fontWeight = element;
                break;

            default:
                if (!fontSize)
                {
                    var parts = element.split("/");
                    fontSize = parts[0];
                    if (parts.length > 1) lineHeight = parts[1];
                    break;
                }

                fontFamily = element;
                if (elements.length)
                    fontFamily += " " + elements.join(" ");
                break outer;
        }
    }

    return {
        "fontStyle": fontStyle,
        "fontVariant": fontVariant,
        "fontWeight": fontWeight,
        "fontSize": fontSize,
        "lineHeight": lineHeight,
        "fontFamily": fontFamily
    }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5618676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档