【问题标题】:Is it possible to edit css file in a running mvc site?是否可以在正在运行的 mvc 站点中编辑 css 文件?
【发布时间】:2011-07-17 16:59:09
【问题描述】:

我有一个 MVC 网站,它是黑色和白色的,但某些设计元素用一种特定颜色(比如说蓝色)着色。我从 css 中完成所有着色。

我想做的是不时将这种颜色切换到另一种颜色。问题是,如果我在加载文档时从 jquery 进行此切换,则异步加载元素中的颜色不会改变。

是否可以从 MVC 更改 css 文件本身,或者也有异步加载元素的事件?

【问题讨论】:

  • 如果您编辑 CSS 文件本身,在进行更改时浏览该网站的其他人会发生什么情况?他们不会看到不同的颜色,即使它可能与他们的活动无关?
  • 真的没关系。这整个事情基本上只是设计。因此,假设站点的一般突出显示颜色从蓝色变为绿色,如果这就是您所说的,这似乎不是错误,因为所有蓝色元素都会变为绿色。所以我觉得还可以。

标签: jquery css asp.net-mvc model-view-controller


【解决方案1】:

如何将不同的元素放在不同的文件中,然后只包含您关心的那个?例如:

在文件default.css

#myDiv {
    color: blue;
}

现在我可以拥有其他文件了……比如说red.css

#myDiv {
    color: red !important;
}

现在,您可以在母版页中根据您喜欢的任何业务逻辑加载red.css。这是一个示例:

<link rel="stylesheet" type="text/css" href="/css/default.css" />
<% if (SomeCondition) { %>
    <link rel="stylesheet" type="text/css" href="/css/red.css" />
<% } %>

【讨论】:

  • 这实际上不是一个坏主意! :) 但不幸的是,这个网站的管理员不擅长这些东西,所以我不能要求她每次切换到新颜色时都写一个新的 css。我也猜不出他们将来会使用什么颜色,所以我不能(或不想)限制他们的选择。我在想的是管理 UI 上的一个迷你颜色选择器,当单击“保存”按钮时,它会在 css 中进行更改。
  • 将颜色选择器值放入数据库中,然后创建一个“模板”CSS 文件。然后按照 Brant Bobby 的建议做,除了为您的颜色值做一个简单的字符串替换。现在你已经有了 MVC 根据存储在别处的颜色值生成的样式表。
【解决方案2】:

您的颜色多久更换一次?如果更改不经常发生,您可以创建一个操作方法,根据当前时间返回不同的样式表。

public ActionResult GetCss() {
    string stylesheet = GetStylesFromSomewhere();
    return Content(stylesheet, "text/css");
}

【讨论】:

  • 这种情况不会经常发生。假设每隔一个月。但是正如我在上面的评论中所描述的,我不知道他们将来想使用哪种颜色,也不能要求站点管理员编写 css。而且真的不想成为这样做的人:)
【解决方案3】:

我重新阅读了这个问题,并认为我应该给出一个完全不同的答案。

css 主要是声明性的。这是一个很大的方便。如果您以这种方式声明某些内容,则无需关心在新元素上重新应用 css 或重新处理 DOM。它发生在“浏览器中”。每次发生某些事情(例如添加新元素)时都必须将新元素更改为新状态不仅不方便,而且会导致很多错误。所以没有“异步加载元素”的一般事件,但你不应该寻找一个。

缓存

在任何 web 环境中,拥有一个恒定的 css 文件主要是一个好主意。浏览器缓存 css,每次需要时都可以使用它。如果您更改 css,浏览器将不会注意到。当然有很多设置需要考虑,但在大多数情况下都是如此。

因此,如果您可以编辑您的 css 文件,这并不重要,因为您需要以某种方式告诉浏览器注意更改。

有一种叫做cache-busting的技术,主要是在css后面加一个GET参数,比如:

<link href="https://www.famous-cats.com/style/puna.css?v=3" rel="stylesheet" type="text/css" />

浏览器认为 ?v=1 与 ?v=2 不同,尽管您只是引用了同一个文件。所以它会缓存它具有不同 GET 参数的每个版本。

好的。

更改文件

但即使您更改了文件:更改 css 文件本身是否是个好主意?如果 95% 的规则每次都是相同的(与那一种颜色无关的所有内容),您可能希望将其分隔在一个“主”文件中,并且只更改有关颜色的部分,这可能是不同的文件/内联 html。

关于更改文件的另一件事是,如果您不打算以程序方式生成新样式,您应该只编写常量文件并切换它们。

DOTLESS

它是lesscss 到asp.net 的一个端口。检查 http://lesscss.org/ 的功能,它基本上是 sass,语法略有不同。

它的好处是你可以使用变量,并从 url 参数中获取它的值,所以如果你链接 style.less?color=fuschia 它只会将名为“color”的变量设置为你喜欢的颜色。

Less 是整洁的东西,可以大大减少开发时间。

我推荐的解决方案

只需在不同于主要的 css 中进行着色:

<link href="https://www.famous-cats.com/style/main.css" rel="stylesheet" type="text/css" />
<link href="https://www.famous-cats.com/style/color.less?color=00FF55" id="colorcss" rel="stylesheet" type="text/css" />

如果您需要更改颜色,只需调用:

document.getElementById('colorcss').href = 'color.less?color=F35741';

(我已经给链接标签一个id)。

而且它有效。

深入浅出,看看如何使用颜色变量。您可以让管理员只选择一种颜色。

另外,内联 CSS 也不是魔鬼的工作,您可以在 razor 中轻松创建它。如果只是一些规则,它不会伤害任何人。因此,如果您不喜欢 less,您可以使用内联 css,或使用 MVC 控制器操作生成 css(只需将 mimetype 设置为 text/css,并使用 url 参数进行颜色更改/缓存破坏)。

我希望这能回答你的问题。

【讨论】:

  • 嗯...听起来很有趣!我要试试这个!
猜你喜欢
  • 1970-01-01
  • 2019-10-06
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 2019-06-09
  • 2012-12-25
  • 1970-01-01
相关资源
最近更新 更多