1

我通常会处理更多后端的东西,所以我以前从来没有真正想过它,但是昨天我正在为一个朋友开发一个网站,经过一些挫折之后,我突然想到没有理由只有 html 文件可以动态生成的服务器端。

我看到人们谈论解决 CSS 限制的 javascript 解决方案,但为什么 CSS 不能动态“硬编码”?

我知道我不是第一个想出它的人,因为在想到它之后,我查了一下,有几个例子,但不是很多,而且我也从未在 StackOverflow 上看到过它。

与在页面加载之前使用 javascript 调整元素大小相比,这有缺点吗?我应该注意的任何其他潜在问题?

我在 Django 中做这件事,但这个问题几乎与框架/语言无关。

在这里查看 dynamic-css 标记中的问题,我发现Ruby 的{less}看起来很酷,但总体而言,关于服务器端生成的 css 文件的讨论并不多。

编辑:我认为有些人可能对我所说的动态 css 的意图感到困惑。我并不是说它会根据用户内容或任何东西而改变。这是我发现的如何使图像居中的示例:

img {   
   position: absolute;   
   top: 50%;
   left: 50%;
   width: 500px;
   height: 500px;
   margin-top: -250px; /* Half the height */
   margin-left: -250px; /* Half the width */
}

这一切都很好,但这意味着要知道 CSS 中图像的大小。此外,这意味着不同大小的图像的不同条目。如果高度和宽度是可变的并且图像的大小是在服务器端确定的,那么它就会变得更加通用和可重用。

我敢肯定还有其他例子可以说明这会有所帮助,但是没有过多地使用 css,这是我遇到的第一个问题,它可以很好地与动态 css 配合使用。

此外,如果性能成为一个问题,我相信它可以通过一些工作来正确缓存。

4

5 回答 5

2

我同意其他人发布的内容。HTML 是在服务器端生成的,因为内容是动态的,如果他们总是提供相同的 html,没有人会去 facebook、google、youtube 或几乎任何其他地方。服务器端生成允许您发布和查看用户贡献和改进的内容。

另一方面,CSS 很少由用户贡献,如果是,他们被称为网页设计师,只生成静态主题或文件,并由网站所有者付费。有些网站确实会发生这种情况,例如csszengarden,但文件仍然是静态的。但是,它们的主要区别在于,用户不觉得他们对站点的唯一贡献是页面上元素的位置和不同的颜色。CSS 的重点之一是一致性。哎呀,每次有人发布答案时,stackoverflow 都可以更改 css,重新定位所有按钮,并将整个页面更改为,ltr而不仅仅是提供不同的 html。说这很烦人将是本世纪最大的轻描淡写。

但是,我认为这不是您要问的。正如您所提到的,动态 CSS 的一大优势是:您可以对其进行动态硬编码。dot-less-css在其主页上有一些很好的例子。这使您可以以更简单的中间形式编写 CSS,将颜色存储在变量中,而不是不断重复、嵌套规则和其他功能,使编码更容易。这些是许多编码人员希望所有浏览器都支持的功能,因此有些人满足了这一需求并创建了自己的框架来“破解”它。许多人都说 JQuery 是 javscript 应该一直工作的方式。

与在页面加载之前使用 javascript 调整元素大小相比,这有缺点吗?我应该注意的任何其他潜在问题?

动态调整大小的最大问题是它很困难且容易出错。如果你做的不对,可能会给你和你的观众带来痛苦。如果酷炫的动态因素值得为您付出大量额外的工作,那么就去做吧。你如何选择不会有很大的不同。Javascript 更加成熟可靠,服务器端动态 CSS 是做同样事情的另一种很酷的方式。这取决于你对什么有信心以及你有多大胆。

于 2010-12-05T16:48:12.823 回答
1

你在寻找类似 Sass 的东西吗?http://sass-lang.com/

于 2010-12-05T16:29:12.023 回答
1

CSS 往往会被缓存,因此动态生成它会 a)需要关闭 css 的缓存,并且 b)会产生更多的服务器开销。

我认为在 html 中动态生成 css 链接是相当普遍的,根据哪个浏览器正在调用,但仍然指向一组静态 css 文件之一。

最后,它不是服务器生成的真正原因可能是它通常是由设计人员编写的,而不是由做后端代码的人编写的,这只是角色的问题。

于 2010-12-05T16:52:30.267 回答
0

我认为这是一个非常聪明的解决方案,尽管很多人不同意,但我希望 css 的未来看起来更像这样。然而,标准的变化真的很慢,尽管有类似 less 的框架,但它们还不够流行。

从某种意义上说,用javascript处理很多事情更简单。我的意思是,如果你已经在用 JS 做动画或其他事情,你不妨用它来做所有的动态变化。使用像 jQuery 这样的库,它只会变得更好。

于 2010-12-05T16:31:42.597 回答
0

我们做了一些 CSS 来支持国际化。CSS 中有很多小细节必须根据您提供页面的语言环境进行更改:主要是背景图像(我们经常将其用于导航按钮,因此有文本)和表单标签的宽度(其中在德语中必须要大得多——尽管我们真的应该使用更聪明的 CSS 来避免显式地调整它们的大小)。我们没有维护 N 个不同的样式表,而是拥有一个,但从存储在数据库中的值中动态填充变量位。

于 2010-12-05T16:37:18.407 回答