如何删除旧版 Web 应用程序中的 CSS 意大利面?

2024-02-17

在开发了几个大型 Web 应用程序并看到没有清晰结构的巨大样式表之后,我真的很想知道人们是否找到了方法来保持大型复杂 Web 应用程序的 CSS 干净。

如何从遗留的、混乱的 CSS 转向干净的、漂亮的级联、DRY 样式表?

我目前正在开发的应用程序有 12000 行 css。由于早期没有标准或 CSS 审查,它就有机地发展到了这个规模,唯一的规则是使应用程序与设计相匹配。我们经常遇到的一些问题:

  • 样式冲突:一位开发人员添加了 .header { font-weight: bold;} 但 .header 已在其他模块中使用,因此不应在这些模块中使用粗体。

  • 级联问题:Foo 小部件有一个 .header,但它还包含带有 .header 类的 Bar 小部件列表。

    • 如果我们定义 .foo .header { ... } 和 .bar .header { ... } 任何未在 foo 中显式覆盖的内容都会显示在 bar 中。
    • 如果我们定义 .foo > .header 和 .bar > .header 但后来需要修改 foo 以将 header 包装在 div 中,我们的样式就会中断。
  • 继承问题,我们不断地将小部件字体重新定义为11px/正常,因为某些顶部容器使用12px/18px行高。

  • 与小部件库作斗争,使用 dojo/dijit 或 jquery ui 之类的库添加大量样式以使其发挥作用,这意味着我们的代码中充满了必须覆盖库样式才能使内容看起来恰到好处的地方。大约有 2000 行 css 只是为了调整内置的 dijit 样式


我们现在正在考虑实施以下规则:

命名空间所有新的小部件类- 如果你有一个小部件 foo,所有子类名都将是 .foo_ 所以我们得到:.foo、.foo_header、.foo_content、.foo_footer。这使得我们的 CSS 本质上是扁平的,但是我们没有看到其他方法可以在不遇到遗留样式或我上面提到的级联问题的情况下组织我们的代码。

警察通用款式- 有一小部分通用类仅适用于非常特定的情况。例如.editable - 适用于应调用编辑器的句子部分 - 应仅包含文本节点。

利用 css 编译器 mixins为了避免在不同的小部件中重复定义相同的样式,请定义和使用 mixins。尽管我们担心 mixins 也会失控。

我们还能如何从不断引入回归的 CSS 混乱中转向可维护的东西。


我们使用简单 HTML 页面形式的样式指南,其中包含以下示例every样式表中的 CSS 规则。由于示例是相互对齐的,因此很容易判断是否添加了新的、不兼容的规则。

我喜欢的一个例子:http://getbootstrap.com/components/ http://getbootstrap.com/components/(2015 年新增)

从这种方法中获得的另一个优点是可重用性:您知道自己得到了什么,并且知道您希望样式指南尽可能小 - 因此:重用性。

当您对已使用的样式进行更改时:检查样式指南。如果它没有改变,那可能很好(如果你刚刚改变了一些东西,包括盒子模型问题,或者一般的宽度、高度、填充、边距,你可能需要浏览一下)。

你如何摆脱遗留下来的混乱局面 css 清理,很好的级联, 干燥样式表?

使用样式指南作为单元测试。一旦你掌握了其中的基本部分:减少、重构和组合(你很可能会发现之间的一些冲突).campaign_1 span和你的常规规则,继承可以是你的朋友)。

风格冲突:一位开发人员补充道 .header { font-weight: 粗体;} 但是 .header 已在其他中使用 模块,不应加粗 那些。

回复 Adriano Varoli Piazza 的评论和上面的引用: 我不记得这是一个完全属于 CSS 的问题,而更多地属于 HTML 标记。无论你做什么,都将是一些繁重的工作。决定您想要保留哪条规则,并采取行动清理较少使用的规则;例如:通过继承:#news a .header { ... }或重命名 HTML 类a .stand_out_header { ... }.

关于以下想法

命名空间所有新的小部件类 - 如果 你有一个小部件 foo all 子类名将是 .foo_ 所以我们 获取:.foo、.foo_header、.foo_content、 .foo_footer。这使得我们的CSS 基本上是平坦的,但我们没有看到其他 组织我们的代码的方式 不会遇到遗留样式 或者我提到的级联问题 多于。

使用包含元素代替,这将更容易维护:

<div id="widget_email">
  <h2>One type of h2</h2>
</div>
<div id="widget_twitter">
  <h2>Another h2</h2>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何删除旧版 Web 应用程序中的 CSS 意大利面? 的相关文章

  • CSS 的用户选择和可访问性

    如果我使用以下内容 webkit touch callout none webkit user select none khtml user select none moz user select none ms user select n
  • Material-ui 表:如何对表元素进行样式更改

    我正在使用 material ui 并尝试让表格元素在元素具有特定值时改变颜色 下面是我尝试过的代码 如果单元格值为 超出区域 背景应该变成红色 表格渲染得很好 但是切换颜色变化不起作用 这是怎么回事 或者我的方法全错了 function
  • 使用 jQuery 删除 元素?

    我不想使用 style css 中的样式 因此我决定从 DOM 中删除 style css 这在 Firefox 和 IE8 中工作正常 但在 IE6 中不行 LINK href http www example com style css
  • 绝对定位但调整父级的大小

    我正在尝试编写一个 div 中包含 2 个 div 的 html 代码 有一个没有宽度和高度的父div 宽度是浏览器宽度 没有指定高度 我想要在这个父 div 内有 2 个 div 第一个需要具有宽度或 250px 第二个需要具有屏幕宽度的
  • Google 组织结构图数据溢出到 div 之外

    我在一个项目中使用 Google Org 图表 图表的内容在包含的 div 之外流动 该 div 在下面以红色突出显示 我希望图表的节点能够移动到下一行 以防它流到 div 之外 爱丽丝将移动到下一行 数据将继续 See my 在这里摆弄
  • 使用 TABS 时 DataTable.js 无法正确加载

    我使用 DataTables js 生成表 非常棒 运行良好 我想将选项卡添加到我的 页面 但似乎当在主选项卡以外的其他选项卡上使用 DataTables 时 它不会加载所有内容 First Tab 2nd Tab 以下是添加了 DataT
  • 是否可以使用 CDN 仅对 div 应用 bootstrap?

    我使用 twitter bootstrap 设计了一个包含一些内容的 div 现在我想生成此页面的片段 以便其他用户可以将此片段复制粘贴到他们的页面中 但问题是 不能保证所有这些都将使用引导程序 因此此代码片段在非引导程序站点中不起作用 我
  • jQuery 可以改变 css 样式定义吗? (不是每个元素的单独CSS)

    我还没有看到任何文档说 jQuery 可以更改任何 CSS 定义 例如更改 td padding 0 2em 1 2em to td padding 0 32em 2em 但要么必须更改整个样式表 要么更改每个元素的类 要么更改每个元素的
  • 如何让我的 DIV 出现在另一个 DIV 下方

    我有这样的情况 div div div Div A 是 B 和 C 的全屏宽度容器 Div B 是一个小矩形 例如 100 x 200 px Div C 是另一个小矩形 例如 100 x 200 像素 现在发生的情况是 B 和 C 出现在同
  • 跨页面加载跟踪子窗口

    如果重新加载父页面 是否可以跟踪子窗口 我目前打开窗口如下 var childWindow childWindow window open url 当我想重新打开同一个子窗口时 childWindow focus 明显的问题是 如果刷新父窗
  • 如何给背景图片指定alt和标题?

    如何给背景图片指定alt和标题 是否可以 div div cont background FFF url images post png no repeat 您不能为 css 背景指定 alt 和标题 但可以为 div 指定标题 div t
  • 将 css 应用到区域地图

    我创建了一个非常大的地图 其中包含许多多边形区域 每个多边形区域超过 20 个坐标 用于地图内的区域 但是 您无法将 css 添加到 AREA 标记 因为我被告知它不是可见元素 我想要做的是 当用户将鼠标悬停在地图上的某个区域上时 我希望通
  • 当我从 Android 设备中选择下一步时,在填写表单时,它会跳过任何下拉菜单

    我有一个由输入文本框 下拉菜单和提交按钮组成的网络表单 当我在 Android 手机上使用我的网站 chrome 浏览器 或 Android 设备上的任何浏览器 时 我使用手机键盘上的 next 导航到下一个字段 我的表单上的字段顺序 名字
  • 在 TFS 构建过程中运行 WatiN 测试时出现超时问题

    我已经在我的开发环境中运行了一个简单的 WatiN Web 测试 并尝试让它在 TFS 构建服务器上运行 尝试加载页面时失败 但出现以下异常 WatiN Core Exceptions TimeoutException Internet E
  • 如何设置上一个/下一个箭头按钮的样式?

    GOAL 我一直在尝试修改slick css以适应我的网站所需的风格 我拿到slick css from here http kenwheeler github io slick Now 我想让箭头 左 右 更大 对于图标 我想使用没有的图
  • 使用 HTML / CSS / JavaScript 隐藏 YouTube 视频控件(标题、稍后观看、分享)

    我正在我的网站中嵌入 Youtube 每日动态视频 我不希望 Youtube 视频控件在我的网站上可见 请查看附件 我想删除顶部的控件 以红色突出显示 并且还想删除底部的控件 以红色突出显示 以前可以在 YouTube 视频中使用 show
  • 将文本环绕在 div 两侧

    这是我试图实现的目标 与以下HTML div p some text p div Awesome content div div 有这个 text text text text text text text text text text t
  • 如何在透明背景图像后面添加背景颜色?

    我试图在透明背景图像后面添加背景颜色 但它不起作用 我希望它位于名为 标题 的 div 中 我尝试先使用 png 文件 然后使用 gif 文件 我以为所有的 gif 都是透明图像 任何帮助 将不胜感激 heading background
  • 将 a:visited 链接设置为与 a:link 和 a:hover 相同的状态

    我正在研究一个想法 其中我的 a link 有一个状态 蓝色 无下划线等 而 a hover 为白色 我想要我的访问过的链接具有相同的状态 as a link and a hover 这可能吗 大多数常见浏览器都支持吗 a a link a
  • 用 CSS 设置背景图像的大小?

    可以用CSS设置背景图片的大小吗 我想做类似的事情 background url bg gif top repeat y background size 490px 但这样做似乎是完全错误的 CSS2 如果需要放大图像 则必须在图像编辑器中

随机推荐

  • 如何在不创建新用户的情况下使用电话验证

    嗨 我现在正在使用本机反应 我一直面临这个问题 我想使用电话验证而不创建新用户 但我找不到我想要的东西 我尝试使用 npm react native firebase auth 和 firebase auth 我找不到它 我非常感谢你的帮助
  • 连体网络显示 ValueError

    我正在使用 Siamese 网络来实现具有不同域的 2000 个功能 我想训练相似的特征对并测试不同的特征对 当我尝试拟合模型时遇到值错误 def get siamese conv unit input encoder models Seq
  • 如何使用 jQuery / Javascript 运行浏览器命令?

    我有一页 HTML 格式 有两个按钮 保存和打印 当用户单击 打印 时 它应该打印页面并当用户单击 保存 页面时 应打开该页面的 另存为 框 首选 Javascript jQuery 解决方案 对于打印 您可以使用window print
  • 使用对象检测算法进行 SageMaker 托管 Spot 训练

    我正在尝试使用新的托管点训练功能从现有模型开始训练对象检测模型 创建估计器时使用的参数如下 od model sagemaker estimator Estimator get image uri sagemaker Session bot
  • XHTML 合规性毫无意义吗?

    我现在正在构建一个网站 到目前为止 我已经痛苦地强制所有内容都兼容 并且它在浏览器中看起来几乎相同 不过 我开始实现一些第三方 免费的 javascript 它们可以执行添加属性等操作 例如 order 2 我可以解决这个问题 但这很痛苦
  • Python:在巨大的文本中替换单词

    我有一个巨大的文本和一个大约 10K 的单词列表 Python 中用其他单词替换文本中所有单词的最快方法是什么 编辑 文本大小 gt 1Gb 文本是人工编写的 并且 极度标记化 任何字母数字字符和任何其他单个符号都被分割成新的标记 单词数
  • 带节点的 OpenVPN,它是如何工作的?

    我可以使用以下 openVPN 命令轻松从终端连接到 VPN openvpn config conf ovpn 我需要使用 Javascript 连接到同一个 VPN 用于 selenium 测试 我已经安装了openvpn客户端与 NPM
  • 在可访问性方面, 相同吗?

    img src srcpath alt img src srcpath alt 也就是说 这些都被视为图像的空值吗alt文本 或者您必须确保alt 存在 You should使用alt 属性 空 alt 属性的每个示例为图像提供替代文本的规
  • heroku 错误:编译的 slug 大小:对于 Puppeteer 来说太大

    我的应用程序正在本地主机上运行 但是当我在heroku上部署时 puppeteer应用程序需要这个模块https github com jontewks puppeteer heroku buildpack https github com
  • Chrome 历史记录错误可能 - 执行 PRG,并且当再次导航到相同表单时 - 没有添加历史记录条目

    仅在 Chrome 中才会出现奇怪的后退按钮行为 我有两个页面 网格和表单场景 1 当从网格导航到表单时 一切都很好 网格被添加到历史记录中 2 当表单通过post发送到服务器时 我使用RedirectToAction再次重定向 302 到
  • 是否可以通过脚本禁用 Firefox JavaScript JIT?

    我们的网站有一个相当复杂的 JS 应用程序 该应用程序在最新的 Firefox 10 版本中失败 这是由于 JS 解释器中的一个错误导致变量返回 NULL 而实际上它们显然不是这样 此错误仅在 JIT 编译器处于活动状态时发生 而不是在禁用
  • 如何保持用户控件的纵横比?

    有谁知道如何保持 UserControl 的高 宽比 1 1 吗 例如 如果高度 gt 宽度 则宽度和高度将具有相同的尺寸 反之亦然 我不确定这是否有效 但是如果您为SizeChanged http msdn microsoft com e
  • Angular-ui 路由器同时获得两个活动状态

    我需要并行使用两种状态 一种用于我的页面 另一种用于具有多个子状态的模式 现在调用模态状态将清除我的页面 因为页面状态发生了变化 创建我的页面的子状态子级不是解决方案 因为模式将在多个页面上使用 Example stateProvider
  • Flutter - 容器中的顶部对齐文本

    我正在尝试离开 文本位于容器顶部 但即使FractionalOffset 1 0 0 0 the 文本在容器中间继续 可以做什么来离开 在容器的顶部 body new Card child new Column mainAxisSize M
  • 和 'a t 有区别吗?' aria-label='F# 中 t<'a> 和 'a t 有区别吗?'> F# 中 t<'a> 和 'a t 有区别吗?

    之间的含义有什么区别吗t lt a gt and a t在 F 中 即使在声明后它们也可以互换使用吗 没有区别 是的 即使在声明后它们也可以互换使用 但请注意F 组件设计指南 http fsharp org specs component
  • Strope字符编码问题

    我正在开发 XMPP 客户端 并且在发送 接收消息时遇到问题Strophe http strophe im JavaScript 版本 问题是包含 特殊 字符的消息 例如 如果我发送 我在这 外部客户端 即 iChat 将显示 我在这儿 s
  • C++ int a[n] 在 g++ 中工作但不能在 vs2008 中工作

    我有以下代码 int n cin gt gt n int numbers n 它在 Mac 上使用 g 我认为 通过 NetBeans 进行编译 而在 Windows 上则无法使用 VS2008 进行编译 为什么让它适用于每个编译器如此困难
  • SQL Server 2k5内存消耗?

    我有一个正在运行 sql server 的开发虚拟机以及我的堆栈的一些其他应用程序 我发现其他应用程序的性能非常糟糕 经过一番挖掘后 SQL Server 占用了内存 经过快速的网络搜索后 我发现默认情况下 它会消耗尽可能多的内存来缓存数据
  • Java 反射,getMethod()

    我正在研究 Java 反射的基础知识并观察类方法的信息 我需要获取一个与 getMethod 函数所描述的规范相匹配的方法 然而 当我这样做时 我得到一个 NoSuchMethodException 我希望你能告诉我为什么我的实现不正确 s
  • 如何删除旧版 Web 应用程序中的 CSS 意大利面?

    在开发了几个大型 Web 应用程序并看到没有清晰结构的巨大样式表之后 我真的很想知道人们是否找到了方法来保持大型复杂 Web 应用程序的 CSS 干净 如何从遗留的 混乱的 CSS 转向干净的 漂亮的级联 DRY 样式表 我目前正在开发的应