- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
在处理过几个大型网络应用程序并看到结构不清晰的巨大样式表之后,我真的很想知道人们是否找到了让大型复杂网络应用程序保持 css 整洁的方法。
您如何从遗留的、乱七八糟的 CSS 转变为清理干净、层叠良好的 DRY 样式表?
我目前正在开发的应用程序有 12000 行 CSS。早在没有标准或 css 审查的情况下,它就有机地发展到这种规模,唯一的规则是使应用程序与设计相匹配。我们经常遇到的一些问题:
样式冲突:一名开发人员添加了 .header { font-weight: bold;} 但 .header 已在其他模块中使用,因此不应在这些模块中使用粗体。
级联问题:Foo 小部件有一个 .header,但它还包含一个带有 .header 类的 Bar 小部件列表。
继承问题,我们不断将小部件字体重新定义为 11px/normal,因为某些顶部容器使用 12px/18px 行高。
与小部件库作斗争,使用诸如 dojo/dijit 或 jquery ui 之类的库来添加大量样式以发挥作用,这意味着我们的代码中到处都是我们必须覆盖库样式才能使事物看起来像的地方正确的。大约 2000 行 css 仅用于调整内置 dijit 样式
我们正在考虑实现以下规则:
为所有新的小部件类命名空间 - 如果您有一个小部件 foo,所有子类名都将是 .foo_,因此我们得到:.foo、.foo_header、.foo_content、.foo_footer。这使我们的 css 本质上是扁平的,但我们认为没有其他方法可以在不遇到遗留样式或我上面提到的级联问题的情况下继续组织我们的代码。
Police generic styles - 有一小部分通用类,仅适用于非常特殊的情况。例如.editable - 适用于应调用编辑器的句子部分 - 应仅包含文本节点。
利用 css 编译器混入 要避免在不同的小部件中重复定义相同的样式,请定义并使用混入。尽管我们担心 mixin 也会失控。
我们还能如何从不断引入回归的 css 困惑转变为可维护的东西。
最佳答案
我们使用简单 HTML 页面形式的样式指南,其中包含样式表中每个 CSS 规则的示例。很容易判断您是否添加了新的、不兼容的规则,因为这些示例彼此对齐。
我喜欢的一个例子:http://getbootstrap.com/components/ (2015 年添加)
您从这种方法中获得的另一个优点是可重用性:您知道自己得到了什么,并且知道您希望样式指南尽可能小 - 因此:重用。
当您更改已在使用的样式时:检查样式指南。如果它没有改变,那可能很好(如果您刚刚更改了一些内容,包括盒子模型问题,或者通常的宽度、高度、填充、边距,您可能需要浏览一下)。
How do you move from a legacy, mess of css to cleaned up, nicely cascading, DRY stylesheets?
将样式指南用作单元测试。一旦掌握了其中的基本部分:减少、重构和组合(您很可能会发现 .campaign_1 span
与您的常规规则之间存在一些冲突,继承可能是您的 friend )。
Conflicting styles: one developer adds a .header { font-weight: bold;} but .header was already used in other modules and shouldn't be bold in those.
在回复 Adriano Varoli Piazza 的评论和上面的引用时:我不记得这是一个完全属于 CSS 的问题,而是更多地属于 HTML 标记。无论您做什么,都会有些繁重的工作。确定您要保留的规则,并采取行动清除较少使用的规则;例如:通过继承:#news a .header { ... }
或重命名 HTML 类 a .stand_out_header { ... }
。
关于下面的想法
Namespace all new widget classes - if you have a widget foo all sub-classnames will be .foo_ so we get: .foo, .foo_header, .foo_content, .foo_footer. This makes our css essentially FLAT, but we see no other way to organize our code going forward without running into the legacy styles or the cascading problems I mentioned above.
改用包含元素,这将更容易维护:
<div id="widget_email">
<h2>One type of h2</h2>
</div>
<div id="widget_twitter">
<h2>Another h2</h2>
</div>
关于css - 如何删除遗留网络应用程序中的 CSS 意大利面条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3720174/
什么是 Web 服务(Rmi、ejb、soap)? Web服务和Web应用程序有什么区别?是否可以在 Web 应用程序中实现 Web 服务? 最佳答案 Web 服务是一种传输/公开信息的方式,使得可以
典型的 J2ee web 应用程序或任何基于 java 构建的 web 应用程序是多线程应用程序,所以每次我编写一些代码时我都必须牢记竞争条件或并发修改? 最佳答案 Is a typical J2ee
我正在将 google 登录集成到我的网络应用程序中。我按照 here 的说明进行操作。但我无法从登录中获取任何用户信息。不过,登录按钮工作得很好。 我使用这些 JavaScript 函数: i
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
是否有通用 cookie 或其他方式可以检查用户是否登录到谷歌应用程序。然后,如果是这样,我想运行一些 js。如果我知道通常在 Google 应用程序/服务中使用的 cookie 的名称,我就可以读取
我正在尝试以 Web 应用程序样式展示我的记事卡。我不担心缓存或让它离线工作。 我只想让它在 iOS 浏览器中呈现良好。这是链接:http://kaninepete.com/flashcard/rev
我正在使用 bootstrap 制作响应式网络应用。 我开始在我的网站上使用导航栏和表单进行一些测试,问题是 android 中的导航栏,因为它以全宽度呈现(如桌面 View ),而 chrome(对
我正在尝试使用 http://zxing.appspot.com/scan从 WebApp 调用 Barcode Scanner,但我无法让它工作。即使在不必要地更新和重新安装之后,它所做的只是显示默
在 WebStorm 中运行 Dart Web 应用程序时,?底部的 Pane 报告以下内容(--port 因运行而异): /home/tom/dart-sdk/bin/pub serve web -
由于某些原因,我的网络应用程序的路径似乎有问题。 我在 Eclipse 中的 WEB-INF 路径如下: Project --src -- main --webapp
Apps 脚本最近已将 StackDriver 日志移至 Apps Script dashboard ,“执行”页面。 问题是,日志不会显示在 Apps 脚本 Web 应用程序的仪表板中。当我向 Ap
身份验证后,我将用户权限标识符放入用户 session 中。如何根据用户权限限制对网站某些部分的访问。现在我正在检查页面处理程序中的权限,但如何改进? 是否有任何现有的模板可以做到这一点?能举个例子吗
我打算用 GUI 前端编写一个网络应用程序,大概使用 GTK。 我对 GTK(以及一般的 GUI 编程)完全陌生。我目前的猜测是使用两个线程,一个处理网络,另一个运行 GTK 前端。 这是解决此类问题
我一直在办公室工作,我们有一些数据需要处理几次。我的意思是数百行,有时每行中有非常大的文本 block 。为我们的客户说出食谱,其中包含 ID、名称、类别、食谱本身、时间…… 问题是我们需要经常处理和
当谈到使用官方 web SDK 的 Firestore 缓存时,它是否优化了读取以便仅当文档在上次读取后发生更改时才向服务器“发送”读取请求? (因此每次尝试不会生成 1 次额外的文档读取) 为了详细
我开发了一个使用 Jquery 移动框架的移动网络应用程序...我的主页我添加了一个 div,其中包含一些关于谁浏览我的网站 android 设备的说明... Some instructi
我就是这么想的,不知道是不是我 react 慢了。 通常,我将正在编辑的项目的 ID 存储在隐藏字段中。然后在后端(顺便说一句,我正在使用 PHP/Zend Framework),我用它来确定要编辑的
我有一些应用创意想免费发布(带广告)。我是一名 Web 开发人员,目前不想学习 Java/Objective C。我可以轻松地将想法构建到 HTML 5 在线应用程序中。 有什么原因我不能使用 Pho
我正在编写一个网络套接字应用程序,我打算使用 Azure 网络应用程序将其托管在云上。 Web 套接字是使用相当标准的 Owin 中间件实现的,并且在前 100 秒内功能齐全。这段时间之后,webso
是否有任何协议(protocol)可用于在(现在可下载的)谷歌地图中打开地址?这不是 native 应用程序,只是 Safari 的网络应用程序/网站(网络剪辑)。 Google 是否提供任何此类协议
我是一名优秀的程序员,十分优秀!