如何以编程方式扩展CSS速记属性?

时间:2010-09-17 19:30:06

标签: c# .net css

是否有.Net CSS解析器允许我将css shorthand properties解析为其缩写形式?

例如,我想采取以下措施:

        #somediv{
            margin: 10px;
            padding: 10px 20px;
            border:5px solid #FFF;
        }

并将其翻译为:

        #somediv{
            margin-top: 10px;
            margin-right: 10px;
            margin-bottom: 10px;
            margin-left: 10px;
            padding-top: 10px;
            padding-right: 20px;
            padding-bottom: 10px;
            padding-left: 20px;
            border-width: 5px;
            border-style: solid;
            border-color: #FFF; 
        }

以下是我需要以这种方式处理的所有不同属性的相当不错的列表:http://www.dustindiaz.com/css-shorthand/

理想情况下,我喜欢.Net中的某些东西,但如果有另一种语言的东西是开源的,我可能会对它进行调整。

更新

没有详细说明我在这里尝试做的是基本前提:

我需要以编程方式获取多个CSS文档并合并它们以创建一组明确的CSS。

所以如果doc 1有:

p { padding: 10px;}

然后我加上文档2:

p { padding-left:20px;}

生成的CSS应为:

p { padding-top: 10px; padding-right:10px; padding-bottom:10px; padding-left:20px;}

因为后来添加的文件会覆盖单个属性。为了准确地做到这一点,我需要采用每个CSS并将每个属性分解为它的最低元素。

3 个答案:

答案 0 :(得分:1)

对于常规CSS解析,我发现这是最容易使用的:

http://www.codeproject.com/KB/recipes/CSSParser.aspx

为了将速记属性分解为他们的速记形式,我发现了两个可以做到的:

在.Net:http://www.modeltext.com/css/index.aspx

在JavaScript中:http://www.glazman.org/JSCSSP/

答案 1 :(得分:1)

最简单的方法是使用.NET的WebBrowserControl和MsHTML(IE Renderer),这也是最可靠的方法!

//Create the instance of new webbrowser control.
        WebBrowser browser = new WebBrowser();

        //Navigate to the specified URL.
        browser.Navigate(@"test.html");

        //Wait until the webpage gets loaded completely.
        while (browser.ReadyState != WebBrowserReadyState.Complete)
        {
            Application.DoEvents();
        }


        foreach (object divElement in
            (browser.Document.GetElementsByTagName("div")))
        {
            IHTMLCurrentStyle currentStyle = ((divElement as HtmlElement)
                .DomElement as IHTMLElement2).currentStyle;

            Console.WriteLine(currentStyle.marginLeft);
            Console.WriteLine(currentStyle.marginRight);

        }

注意:

为了使此代码正常工作,您需要添加对Microsoft.MSHTML.dll的引用,该引用可以在以下位置找到。

c:{Program Files} \ microsoft.net \ Primary Interop Assemblies \

答案 2 :(得分:0)

你能否详细介绍一下你为什么要这样做?

您是否正在寻找使用以下内容进行正确解析:

填充:10px 15px;

填充顶:10px的; 填充右:15像素; 填充底:10px的; 填充左:15px的;