我刚刚被分配了重构一个巨大的5000行CSS文件的任务......但这是最糟糕的部分 - 我还需要使它与IE6兼容。任何CSS大师都有工具的建议,或者可能在我的整体探险中使用的提示(常见的陷阱)?欢呼声。
答案 0 :(得分:12)
checkout sass ...它包括将css转换为sass的功能。 http://haml.hamptoncatlin.com/docs/rdoc/classes/Sass.html
sass例子:
!main_color = #00ff00
#main
:color = !main_color
:p
:background-color = !main_color
:color #000000
css输出:
#main {
color: #00ff00; }
#main p {
background-color: #00ff00;
color: #000000; }
答案 1 :(得分:10)
一些提示:
从机械上讲,我会像这样攻击它:
<link type="text/css" href="newhotness.css" />
<link type="text/css" href="newhotness-ie6.css" />
<link type="text/css" href="oldandbusted.css" />
将代码从第三个(旧)文件移动到另外两个文件中,随时清理。这样你就可以验证你的代码,而不必担心旧的东西中的大量错误,你可以跟踪你的进度,它们之间的Ctrl-Tab比单个文件中的位置之间更容易,等等。
(如果您无法控制标记来添加CSS文件,请在旧文件的顶部使用@import。)
答案 2 :(得分:9)
从头开始!
假设您可以手动检查所有主要页面,我会非常想要擦除整个文件并从头开始。现在检查IE6的不一致性,无论如何你都会做几乎相同的工作,但如果你修改旧的,特定于浏览器的CSS,那将会更加痛苦。
5000行可以在2000行现代设计良好的CSS中表现出来。我认为大多数经验丰富的CSS开发人员会发现编写2k行新CSS比修改5k行可怕的CSS要少。
答案 3 :(得分:3)
答案 4 :(得分:1)
不一定是CSS,但这里有一个问题:使用GIT 。
git bisect
(a good description)确定完全相同的步骤; 对于额外的踢法,这里有一个关于code coverage for CSS的讨论,以帮助您快速清除未使用的规则。
答案 5 :(得分:1)
正如Triptych所说,我会从头开始。另外,请考虑以下事项:
答案 6 :(得分:1)
我首先想要创建一个测试套件:自动化页面访问(可能使用Selenium?),截取屏幕截图,然后使用像ImageMagick这样的内容来比较参考图像。
另外,我提出了使用源代码管理的所有建议。如果您后来发现您的重构破坏了测试套件未检查的内容,您可以添加一个新测试,然后将您的历史记录一分为二,找到破坏它的更改。 Git对此很有好处。
答案 7 :(得分:0)
获取具有良好语法突出显示的代码编辑器。好吧,我不羡慕你。
答案 8 :(得分:0)
我最初的想法确实存在一些类似于NCover的CSS,因为查看是否所有CSS都被引用会很方便。一个关于CSS代码覆盖的快速谷歌发现了一些事情 - 你可能想要看看自己:http://development.lombardi.com/?p=436
答案 9 :(得分:0)
安装sass,在你的5000行css上运行css2sass,继续。完成sass文件重构后,运行sass2css重新生成css文件。祝你好运!
答案 10 :(得分:0)
我建议Stylizer - 它是一个带有嵌入式实时预览浏览器的CSS编辑器。它使编辑CSS文件时的生活变得更加容易,并且可以告诉您哪些规则会影响页面上的哪个元素等等。
答案 11 :(得分:0)
你们所有人都说他应该从零开始是错误的。你不应该。尝试识别网站使用的不同部分。把它们放在一张纸上。找到匹配在一起的零件。建立一个结构。查找应用程序中相同但仍使用不同规则设置样式的部分。
拿一部分命名。然后将使用该“模式”的所有应用程序部分与正确的HTML / CSS进行匹配。
重复直到你完成。用小块分解大任务。
确定原始CSS编写器是否使用标准方法,例如使用CSS重置。如果他没有,并且所有内容都由#id定义而没有可重复使用的类,那么也许那些说你应该从头开始的人实际上是正确的。但我的观点是,你不能在不评估情况的情况下推荐这一点。
答案 12 :(得分:0)
使用Dust-Me Selectors Firefox插件非常方便。这有点像CSS的代码覆盖工具。
答案 13 :(得分:-1)
工具建议:JetBrains的ReSharper。它将自动完成CSS并从CSS文件编辑窗口重命名站点范围的选择器。