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

C# 如何以编程方式扩展CSS速记属性?,c#,.net,css,C#,.net,Css,有没有一个.NETCSS解析器可以让我解析成它们的手写形式 例如,我想采取以下措施: #somediv{ margin: 10px; padding: 10px 20px; border:5px solid #FFF; } 并将其翻译为: #somediv{ margin-top: 10px; margin-right: 10p

有没有一个.NETCSS解析器可以让我解析成它们的手写形式

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

        #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; 
        }
以下是我需要以这种方式处理的所有不同属性的非常好的列表:

理想情况下,我希望在.Net中有一些东西,但如果在另一种语言中有一些东西是开源的,我可能会调整它

更新

不需要太多细节,我在这里要做的是基本前提:

我需要通过编程获取多个CSS文档并合并它们,以创建一组最终的CSS

因此,如果文件1有:

p { padding: 10px;}
然后我加上doc 2:

p { padding-left:20px;}
产生的CSS应该是:

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

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

您能再详细说明一下为什么要这样做吗

您是否希望它能够对以下内容进行正确的解析:

填充:10px 15px

进入

填充顶部:10px; 右侧填充:15px; 垫底:10px;
左侧填充:15px

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

为了将速记属性分解为它们的速记形式,我找到了两种方法:

在.Net中:


在JavaScript中:

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

//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 Assembly\

可能重复的是和否,提供的解析器不进行这种扩展,实际上,这是我唯一需要的部分。因此,如果您有两个数据项,这会自动发生。我还是不明白你为什么想要这个解析器。你只是想把你所有的CSS文件合并成一个最终文件吗?对于压缩还是什么?好吧,它有,也没有,我需要能够返回给最终用户一个单一的确定的CSS文档,这是整个应用程序的一部分,你可能想检查一下:添加了一点信息来回答“为什么”我需要这个我正在工作的项目。谢谢另外,我正在使用Bone Soft CSS解析器的一部分来做其他事情,但它没有完成我需要的属性分解。我认为您必须为此编写自己的解析器。因为这可能是你正在尝试做的一件非常独特的事情。也许看看或调查一下萤火虫。。。。有一个javascript版本列出了“cumputed style”,将其显示为所需粒度的细分,将padding:10px转换为4个元素。我已经为其中的大部分内容编写了自定义解析器,但希望找到一些可以为我实现CSS属性扩展的东西,因为逻辑可能会变得非常复杂。我发现了一些东西,但没有银弹谢谢你的调查+1-这是我的第一个想法,尽管我不确定我有多相信IE渲染器能够可靠地解释CSS。@Rob我相信,与手动解析html文件相比,这可能是成本更低、更可靠的解决方案。我完全同意。但作为一名web开发人员,我正借此机会抨击IE的标准遵从性(历史)。