多网站项目的 CSS 架构

news/2024/5/19 11:45:58/文章来源:https://blog.csdn.net/weixin_45556713/article/details/100137920

复杂的 CSS 架构,可不是你在科班里能学到的东西。

我在互联网行业的第四份工作,是在我国一家领先的媒体新闻公司中任职一名 CSS/HTML 专家,我的主要职责就是开发可重用的、可扩展的、用于多网站的 CSS 架构。

image

在本文中,我将与大家分享我在构建多网站架构领域中积累的知识和经验。

附注:如今,正规的项目都会用到 CSS 预处理器。而在本文中,我会使用 Sass 预处理器。

用层构建世界

在开始开发一个大型项目之前,我们应该放眼全局,把多个网站的共同之处提炼出来。高楼大厦始于一砖一瓦,而项目的基石就是样式规格化、混入(Mixins)、通用图标以及局部模块层(元素、组件、图形逻辑、实体、页面……不一而足)等。

为了使多重项目(即多个网站)正常运转,我们必须决定哪些样式是通用样式、哪些是专有样式 —— 通用样式写进基础层,而专有样式写在与其对应的层中。这是一条充满摸索和碰壁的实践之路。每当思考的角度发生变化,我们都需要逐层地挪动样式代码,直到我们觉得顺眼为止,这都是家常便饭了。

理解了这项原则后,我们就可以开始着手构建作为基础的全局层了。这个全局层是整个多重项目(多个网站)的起始点。

下面的示例图向我们演示了彼时我司的项目需求。

image

基础层要保持轻量,其中只包含 CSS 初始化、基本的 SASS mixins、通用图标、通用字体(如需)以及功能类,如果某些网格布局适用于所有网站,就将其作为通用网格添加到基础层中。在 _partials.scss 层(元素、组件等)中,我们主要用到的是 _elements.scss 层,该层中包含诸如通用弹窗、通用表单和通用标题等此类局部模块。我们应该在基础样式中添加的是所有(或者大多数)底层样式共有的部分。(更多关于文件夹和文件结构的细节,参见我的上一篇文章)

如何组织多个层

在我们的架构中,每个层都至少包含三个文件:两个私有文件(局部样式文件和配置文件,称之为私有是因为它们不会被编译成一个 CSS 文件)和一个公共文件(本层的主文件)。每层的配置文件 _config.scss 通常包含变量。_local.scss 文件则包含内容样式,为当前层充当控制器或者包管理器的角色。而第三个文件(layer-name.scss)会调用前二者。

layer-name.scss 文件:

```
@import "config";
@import "local";```

另外一个我们要给自己定下的原则就是,尽可能把每个文件都拆分成尽可能小的部分(小文件)。这个原则会让重构非常方便。

在每一层中,都要保证只编译 layer-name.scss 文件,即使某些层代表的是一个“虚拟项目”(如上面示例图中的“基础层框架”)。

对于不会被编译成单独文件的私有文件,我们用一个下划线(_)作为其文件名的前缀。这里的下划线代表着此文件不能单独存在。

**注意:**当导入私有文件时,我们书写其文件名时可以不必带上前缀下划线。

层架构示例:

image

文件夹结构长这样:

```
sass/ ||- base-layer/|- config/ |- local/|- _config.scss|- _local.scss|- base-layer.css (编译后的层样式)|- base-layer.scss```

继承

假设我们想要从基础层开始创建一个项目。我们需要根据 base-layer 文件夹的内部结构,用新项目的名称照猫画虎地克隆一套出来。在后续例子中,我们把这个新项目称为 inherited-project

提示:把所有的层目录和项目目录都放在 Sass 的根目录中。

该项目至少包含一个 _config.scss 文件、一个 _local.scss 文件和此层的核心 Sass 文件 —— 在本例中即为 inherited-project.scss

所有的层和项目都位于 Sass 的根目录中。

```
sass/ ||- base-layer| |- config/ | |- local/| |- _config.scss| |- _local.scss| |- base-layer.css (编译后的层样式)| |- base-layer.scss ||- inherited-project|- config/ |- local/|- _config.scss|- _local.scss|- inherited-project.css (编译后的层样式)|- inherited-project.scss```

项目 inherited-project 的配置文件引入了 base-layer 中的配置文件。这样一来,我们就能增加新变量或者覆写上层(base-layer)中的已有变量了。

以下为 inherited-project/_config.scss 的一个例子

```
/*加载 base-layer 配置信息 */
@import "../base-layer/config.scss";
/** 局部的 Config 层 (按需添加或覆写变量)**/
@import "config/directions.scss";```

内容样式文件 inherited-project/_local.scss 亦同理:

```
/* 导入 base-layer 局部组件 */
@import "../base-layer/local.scss";
/* 局部字体 */
@import "local/font-almoni.scss";
/* 局部组件 */
@import "local/elements.scss";
@import "local/components.scss";```

如果要创建的新层既有通用样式又有独特样式,那么从 base-layer 文件夹继承基础层样式再合适不过了。

这一层会创建一个名为 inherited-project.css 的 CSS 文件。

在内部层中覆写变量

使用“层”的方式覆写变量非常简单。

比方说在基础层中有一个名为 base−color∗∗的变量,其值为blue(∗∗base-color** 的变量,其值为 blue(**basecolor bluebase-color: blue;)。要想覆写此变量,就需要在局部文件 _config.scss 中更新它的值。现在,所有使用该变量的组件 —— 不论是继承于基础层还是定义于局部层 —— 都会更新对应变量的的颜色值。

Global Story 全局

某些模块并非在所有层中都会用到,因此如果你在基础层中定义它们,其他项目就会导入冗余代码。为了解决这个问题,我走了另一条路线,采用了全局模块的概念。

这个概念是说,把仅用于某些层的模块放置于一个新的根目录(_partials)中,这个新的根目录位于所有层之外。然后,任何层都可以从全局目录 _partials 中导入所需模块。

下图展示了将模块分离的例子:

image

每一层都可以按需从全局目录 _partials 中调用一个或多个模块。

全局目录 _partials 示例:

```
sass/ ||- _partials/ |- base-layer/ |- inherited-project/```

从 _partials 导入模块的 local.scss 文件:

```
/* 导入 base-layer 中的局部组件 */
@import "../base-layer/local.scss";
/* 局部组件 */
@import "local/partials.scss";
/* 添加全局模块 */
@import "../_partials/last-connection";```

些许额外忠告

  • 组织结构要有条理。要一直记得以满足需求的方式规划项目、保持最佳结构。
  • 别重蹈覆辙。仅用 @import 即可轻松导入另一层的组件。比如说,某些组件定义在一个“体育”项目中,而这些组件与另一个项目中的“新闻”网站有关联。那我们就可以直接把这些组件 @import 进“新闻”网站中。(网站 = 层 = 项目)
  • 充分利用 IDE 快捷方式。选用一款便于重构的编辑器,免于导致报错或故障。
  • 立新不可破旧。在开发和后续重构中,每次都要把所有 Sass 根文件一同编译,以免新旧脱节。

总结

在本文中,我向大家展示了针对多网站项目的 CSS 体系结构的构建方法,这套思想提炼于我经年积累的知识和经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_751757.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部署网站(虚拟主机,MVC站点,前后台,百度编辑器)出现的问题

开发工具:Vs2010 数据库:Sql2008 部署主机:万网虚拟主机,支持.NET 4.0 / 4.5 SQL2008 等.. 出现问题1:无法访问页面 出现问题2:后台无法访问 出现问题3:使用的编辑器是百度的UM,有使用到的地方…

电商详情页缓存架构(一)电商网站的商品详情页架构

小型电商网站的商品详情页的页面静态化架构以及其缺陷 小型电商网站,一般使用页面静态化的方案,提前将数据渲染到模板中。 问题:每次模板变更,模板对应的所有数据需要全部重新渲染 大型电商网站的异步多级缓存构建 nginx 数据本…

云南楚雄做网站找哪家?

2019独角兽企业重金招聘Python工程师标准>>> 云南楚雄做网站哪家强? 点击进入:http://www.anline.cn 转载于:https://my.oschina.net/jiankian/blog/614142

一分钟了解阿里云产品:利用Rsync服务SLB下多台centos服务器网站文件同步更新...

易淘帮使用了SLB负载均衡,为了保证SLB下两台服务器下面的网站文件同步,易淘帮采用了rsync服务进行同步,每三分钟进行同步一次。 简单介绍下reync,rsync—remote synchronize是类unix系统下的数据镜像备份工具,它的特性…

从全球最大同性交友网站抄了一份不一样的2048小游戏

大家好,我是“前端点线面”,一位新生代农民工,欢迎关注我获取最新前端知识和《前端百题斩》pdf版(包括JS基础篇、浏览器篇、网络篇共计50个章节,5万多字),此外有喜欢划水的老铁们,可以加我进“前端划水群”…

10个大佬经常逛的小网站,各个爆款!!!

欢迎和号主【前端点线面】进群盘算法,此外本号干货满满:14个门类(100篇原创)内容(又干又硬)、《前端百题斩》pdf(助力薪资double)、20篇思维导图(知识系统化、记忆简单化…

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构,MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型,我们可以从中获取很多有关网站架构方面的知识,看了之后你会发现你原来的想法很可能…

【问底】徐汉彬:大规模网站架构的缓存机制和几何分形学

【导读】徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设。 在过去的工作中,徐汉彬从事各类缓存建设和优化,遇到问题无数&#xf…

npm的gh-pages结合github发布repository网站

如果你在使用github而且创建了一个新的仓库,你会发现,在仓库设置里面有结合github pages发布网站的设置,如下所示: 用过github pages都知道它可以做为静态网站来处理比如html和markdown的文件产生预览效果,我之前做过类…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标,可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间,指从发出请求到最后收到响应数据所需要的时…

网站安全认证系统的设计变迁

网站在从小到大的发展历程中,安全认证系统是如何变迁的? 下面我们从其发展的几个阶段来分下: 阶段1: 起步,注册用户很少,两台服务器,一台应用服务器,一台数据库服务器。 用户登陆后在…

如何通过IP地址来访问网站

今天我们写极少量的代码,来实现用IP地址来访问一个网站。步骤如下: 打开命令提示符,输入以下代码: (这里用CSDN官网https://www.csdn.net/为例) 输入代码ping csdn.net /n 5 复制上面正在 Ping csdn.net […

网站推荐——洛谷

粉丝福利 【洛谷】(链接在最后)是一个我感觉非常良心的网站。自从五月以来,我一直在学习C语言,明年参加CSP大赛,自然少不了刷题。 这个网站我觉得最好的地方,就是它有很多比赛的题库: 有很多…

SEO和SEM策略:建立工作关系

SEO和SEM策略:建立工作关系 原文地址http://www.semorseo.com/1601.html SEO和SEM策略之间的关系将互联网营销的两个方面联系在一起。通过凝聚力,SEO和SEM关系导致更有效的整体策略。许多策略可以利用您的SEO来帮助您的SEM,反之亦然。 创建有…

Java小应用目录快速变网站

1. 简介 快速将一个目录变成静态站点的Java小应用 2. 程序下载 https://github.com/broncho/oss/raw/master/blog/directory-website-1.0.0.jar 3. 依赖环境 JRE 1.6 4. 使用说明 5. 运行 转载于:https://blog.51cto.com/aiilive/2285524

chrome v69 设置网站允许 flash

为什么80%的码农都做不了架构师?>>> **问题描述:**升级 Chrome V69 以后,发现之前通过 Setting -> Content Settings -> Flash -> Allow 列表里添加的允许运行 flash 的网站列表已经没有了,而且也没有了新增…

微软正式发布Azure Storage上的静态网站

微软正式宣布了Azure Storage上的静态网站,提供了从托管在Azure Storage上的HTML、CSS和JavaScript文件提供内容的能力。静态网站包含内容固定的Web页面,同时仍然允许利用JavaScript等客户端代码来创建丰富的用户体验。 有了这个新功能,继用于…

网站推广必备手册:SEO教程:搜索引擎优化入门与进阶(第2版)

网站推广必备手册:SEO教程:搜索引擎优化入门与进阶(第2版)【作  者】吴泽欣 [同作者作品] [作译者介绍] 【丛 书 名】 图灵程序设计丛书 【出 版 社】 人民邮电出版社 【书 号】 9787115213389 【上架时间】 2009-11-19 【出版日期】 2009 年12月 【开 本】 16开 编…

PageAdmin Cms建站系统教程之栏目的添加和管理

PageAdmin建站系统作为国内用户最多的企业级网站建设系统,功能强大,扩展灵活,在国内拥有庞大的用户群体,系统可以免费下载使用,被众多个人站长和网站制作公司用于网站建设和二次开发,上一篇小编讲解了PageA…