【项目总结】扯一扯电商网站前端css的整体架构设计(1)

news/2024/5/20 0:50:28/文章来源:https://blog.csdn.net/weixin_30347335/article/details/98617250

  最近半忙不忙的写了一个外包网站,网站主要功能是艺术品竞拍和艺术衍生品的销售。工程已经完成了80%左右,现在前后端代码量已经50W行左右,我主要负责的是前端设计和前端布局。下面就先放一个网站的设计图吧,因为涉及到甲方的“商业机密”,所以打一下马赛克:

  

  

  这篇文章主要算是我对于这个项目的总结或者说是对于这阶段自己看的一些前端书或者经验的一个总结吧,所以设计图就不贴那么多了。整个项目的设计图由最开始的ui定了个首页稿基调,剩下的界面大部分都是我在首页稿基础上做出来的,以后有机会再唠。PS:不过话说博客园里现在遍园子都是.net的文章,前端的文章除了js的,就是那些“可复制可粘贴”的源码文,希望以后能看到更多前端好文吧。

  整个网站的单界面(不包括后端)已经有3,40个了,css文件累积下来也有10多个(这个之后会细说,这块儿是我这个项目中做的最失败的一部分,也是我写这个blog的原因)。

  

  

  一个一个问题的唠,我就说说自己的理解,不太对的地方欢迎交流:

  一、什么是css的架构?为什么要做架构?

    如果做的是一个小的博客网站或者说是一个小的CMS,那可能很多时候不用考虑css的架构,因为css文件很少,总共就不到10个界面,给每个界面单独写样式、单独封一个css文件也没有太大的工程量。但是,如果换到这种界面数达到几十个或者几百个的大型网站中,css的架构就非常有必要了。而且,好的架构能够帮助团队共同开发,不可能说总共几十个界面,3个前端,一人分十几个,好,你们去写吧,这样的工作效率太低,而且极易导致样式冲突和样式被覆盖,可能写起来很快,每个人都很勤劳的把自己的代码写完了,然后后端总合之后发现样式全乱了,一改改了好几天,比写都慢。

    合适的css结构能够帮助开发者减少代码量,能够帮助前端开发团队在共同开发的过程中能够更好的合作。同时它也能优化前端的整体结构,合理的css架构能够减少css文件数目和css文件总大小,降低对服务器的访问压力。

    它也能大幅度提高前端代码的重用度和减少代码的维护成本。对于那种1个小时想改一次界面的甲方,没有好的css架构真是要疯了。比如说你每个页面都有个标题栏,每个页面都是一个单独的css,然后突然有一天甲方深井冰一样说,我想改一下样式,这时候你只有两个办法:1.抱着甲方大腿哭诉求不改2.默默打开电脑开始一个界面一个界面的改。看到这里很多有开发经验的同志们应该都知道说,提取这个标题版块,写在统一的css文件内,每个界面都引用一下,最后想改的话只要去总的那个css文件里面改就可以了。这就是最简单的模块化,不过,模块化的过程中还有很多问题需要注意:1.比如3个界面都有标题栏,但是3个界面对于标题栏字体颜色的要求各不相同怎么办?对于上下margin的要求又不相同怎么办?2.突然多了一个界面,它有标题栏,但是它标题栏里多了个背景图片,这个怎么解决?再麻烦一点,它标题栏里多了一个<p>表签,多出来的又怎么布局?这种解决模块之间差异的问题确实值得好好研究一下。

    通常的css架构,或者是当前网站的css框架,包括了对浏览器默认样式的覆盖重置、对网站内部模块的提取抽象化、约定css代码规范、冲突解决等功能。如果项目中有引用其他的成熟框架,比如说bootstrap、yui,怎么把这些框架和自己写的分割开,能实现样式而又不冲突?稍后慢慢唠。

    怎么做css架构或者怎么实现简单的css结构?

    答:写代码啊!

  

  二、css的架构从哪里做起呢?

    动手一个项目前,不能看到设计图就直接干,应该先想的是怎么样去写。就像我们老师最常对我们说的一样“只会写代码,你只是平庸的程序员。能够做出好的架构或者能够安排好项目怎么开发的,才是高端点儿的程序员。平庸的程序员只能吃香蕉,高端的程序员有时候还能吃点菠萝、苹果啥的”。直接动手开始写,写着写着就会发现很多时候自己是在做重复功,不断地复制粘贴或者是为了一个界面模块重写一种又一种样式,或者写着写着发现“卧槽,冲突了,样式乱了”,再或者写着写着发现自己写的不对想回去改,然后开始挨个文件的改...这种没有架构的、笨拙的在写css就是在干体力活,很久之前写的一个项目就是这样,20几个界面慢慢改去吧,改了整整两天,都要疯了...

    动手一个项目前,最起码的,应该想清楚大致有多少个css文件,哪些css文件需要先写出来一个固定版本,哪些css代码可能会大量重用,哪些css文件可能会有大规模的改动。然后根据这些css的详细要求去开始动手写初版。

    比如我上面放的截图,最直观的header首部栏:,在每个界面都是一样的。当然这个我们可以在后端里面用分布视图layout来实现,但是在界面前端实现的初期,是不是也应该把这一块儿的html、css、js抽离出来,这样在后端进行最后整合的时候也能快一些,而且万一碰到个圣诞节,客户说给上面背景色换成蓝色吧,这样直接翻到header.css里改一改样式就好了,不用苦逼的去“体力活”了。

    所以,第一种css前端架构设计的方式就是:按照区域划分。

    按照页面内的元素或者模块的区域定位,网站中可以划分出来很多区域:header、footer、sidebar、slogan等等,针对于这些区域单独定位能够有效的实现分布视图的划分,每个区域都被抽离出来,新建一个界面的时候我们只需要在里面拼一拼就好了。没记错的话,yui就是这么干的。

    在这个拍卖网站的css里我没有单独抽离出来,因为我觉得单独抽离成一个header.css、footer.css文件有点赘余,css文件数在增多,而每个文件内的代码行数却很少。这个还要根据具体代码来看,一个footer样式写了几十行的话,那就抽离成一个文件吧。所以我在总的css文件:layout.css里其实是按照区域进行写的:。当我想要更改底部导航样式的时候,直接就去layout.css里往下翻找,改掉就可以了。

    

    然而我们对界面进行分割之后发现,还是有很多代码在大量重复出现,比如说登陆框、比如说表格、比如说文本框等等,所以有了第二种划分方式:按照功能进行划分。

    按照功能划分就是看元素的界面内功能是什么,然后根据具体功能,把具有相同功能的元素、模块抽离出来:font、color、button、form等等,这个应该是现在很多成熟框架采用的模式,比如我大bootstrap就是这么干的,下面是bootstrap2.3的less文件夹的截图,很明显,都是一个个功能模块,最后我们直接应用的是被全部整合压缩的.min.css,里面其实也还是这种结构:

    

    按照功能划分还是蛮爽的,因为你可以为每个功能划分添加统一的前缀,在有代码提示的编译器里写代码简直极速。换成那种按区域划分的话,有时候就略微蛋疼了“哎呀,页脚的css名是什么?哎呀,小王写的那块儿侧边栏的类名是什么”。

    在这个项目的代码里,我其实采用的是第一种方式和第二种方式混用的模式,从我上一张css文件截图就能看出来,我不仅把重复出现的区域模块的代码抽象了出来,而且也把侧边栏、遮罩这种功能模块给抽象整理了出来,尽量提高我的代码的复用度。

    之前还觉得自己的这个项目的架构做的不错,但是后来越写越坑,因为很多时候自己都是在做无用功。我犯的傻X错误:

      1.模块抽象有局限。比如说表单有要差一个特殊的元素,原来写好的模块就没法用了,又得重头写一遍。

      2.模块抽象不完全。在我认为自己已经把模块抽象做的差不多的时候就开始全力写,写着写着发现,有的模块被遗忘了,很多模块需要一遍一遍的手写。

      3.css类名不规范说到底是模块没有划分好。这个网站写到现在,我的命名已经词穷了,它这里有很多界面:加入购物车、加入收藏列表、查看购物车、确认支付、填写确认订单、一口价支付...没有好的英文底子真是噩梦...所以只能翻译汉语名,然后驼峰命名法:AddCart。其实命名法还有很多,驼峰命名法最大的好处就是可以很直观的命名,不用考虑别的,但是驼峰命名法在子类命名的时候就比较头疼了,一个又一个的长单词...另一种命名方法是划线法,为了避免麻烦直接用的下划线没用中杠add_cart,这种命名法对于子类命名特别爽,这个后几篇总结的时候再唠。

    ------------下面---------就是------------本篇-------核心-----了---

    下面就是本篇文章的【核心】了,也是我痛心疾首的反思T^T最近项目受阻、半写不写的状态,所以看了一些前端代码规范、网站前端开发的总结的书,然后发现了一种新的结构方法,看完之后真是整个人都不好了。推荐这本书《编写高质量代码-web前端开发修炼之道》

    另一种比较推荐的css架构方法是:按照界面职能进行划分:这里将网站的整个前端抽象成了一个软件或者是一个项目,这时候我们要考虑的就是项目底层是什么,项目的表现层是什么,类似于大家常说的mvc的思想,把前端架构也进行mvc般的划分,可以把所有的css文件归纳为三类:

      1.base类   2.common类  3.page类

    这三类并不是像区域架构、功能架构中并列作用的模式,而是以base类为底层,逐层影响,层叠作用,大概画了个作用图:

    确实,就像这种金字塔结构,下面详细介绍一下每个类的作用。

  

    [1.base类]

      顾名思义,基础,它是整个css架构中最基础的部分。它负责提供浏览器默认样式重置、基础功能实现。说到base里的基础功能实现,它主要指的是那种涉及范围极小、抽象程度高的原子级别的功能类实现。比如我们最常见的.f12{font-size:12px;},.mt30{margin-top:30px;},每一个原子类只负责实现一种功能,绝对不涉及到具体的页面ui,只是为上几层提供原子功能,具体某模块的实现则有这些原子类间进行组合实现。当然,base类还要负责浏览器默认样式的reset,这个我觉得yui实现的就很靠谱,现在很多网站的<h123456>都是不加粗的,这个都需要提前在reset部分写好。

      base类是整个css架构的地基,所有界面都会引用整个文件,这对这个文件提出了要求:1.文件大小不能过大 2.文件可靠性要高,不能出现多个版本 3.写成之后尽量减少维护次数或者尽量不用维护。而且不同网站的base类可以共用,因为base类不涉及任何具体的ui样式,高度可移植。

      具体base类文件都有什么,这个下一讲来好好唠唠,今天没空了。

    [2.common类]

      普通类,它是利用css基础类实现的基础模块的css文件,我们已经把整个界面里的文字、边距、颜色等原子工程抽离出来了,现在需要我们为当前网站定制模块了。

      设计原则里“统一性原则”要求到同一网站必须保持风格一致,你不可能首页扁平化,进了列表页就来个高光高阴影还带酷炫flash的web2.0风格页。所以,同一网站内的搜索框、文本框、按钮、列表大多数情况下都是统一风格的,所以这就给我们个机会,把这些会重复出现的模块抽离到common类里,类似于MVC里面的model,也类似于我们上面讲述的架构功能划分的具体功能文件。为了尽量保证可重用和灵活使用,我们需要对这些模块进行完整封装。

      话说,模块需要进行订制时怎么办?

      我想到了两个办法,一种是利用less等语言给模块预留样式接口,直接修改配置文件,再动态输出css文件。2.尽量减少模块的ui属性,比如bgcolor或者是border,可以空缺,而在实际使用时根据自己的需要与原子类进行组合。但是这种方法可能会对原子类有要求而且会对base文件产生影响,所以我自己又编出了个词:分子类,显而易见就是提供针对于模块的大原子类定制,为每一个模块定制专属样式类,同样至于common层,需要定制模块样式时只需要彼此组合即可。之后的文章里写点东西示范一下。  

    [3.page类]

      页面类,从图里也能看出来,它在金字塔的塔尖,而它的作用范围也是最小的,就是每一个页面,到不至于每一个页面一个css,但是也差不多吧。 page类就是负责提供页面级样式的。page类css可能产生一些比较令人纠结的问题:1.page太多,所以page css单文件太多,每一个文件就是一个http请求,服务器能受得了不?2.page css为了不多,所以合并在一个page.css里,但是命名怎么办?比如.part, .one, .main, .theme....这些频繁出现的类名合并冲突怎么办?

      第二个问题可以通过命名范围限定来解决。

      至于第一个问题,你可以把css单文件合并,然后你就去看第二个问题的答案吧。

      

      总结下来,在开发中,base和common类一般由一个人完成,在他完成这些类之后其他人接手项目,开始添些page.css,所以page层里代码奇多,如果应用到分布视图,一个整页面其实是由若干个小界面拼起来的,那么如何避免冲突?如何避免样式覆盖?以后详谈。

 

    

     _(:з」∠)_码了这么多字累死我了,今天就先写到这。下篇见~~【求交流求师傅带求内推求不吐槽...】

     下一篇文章,咱们详细谈谈base类css文件,以及我自己对项目css的重构。  

     最后,最后,我想说的就是↓↓↓

          

      

转载于:https://www.cnblogs.com/limingxi/p/3709322.html

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

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

相关文章

tomcat找不到servlet这个类_办公中常用的模板和工具找不到?这个网站就能帮到你...

相信大家都知道我们平时办公的时候&#xff0c;需要去找一些办公类的资源&#xff0c;但是去哪里找免费的呢&#xff1f;只需要用到一个网站就够了&#xff0c;各种模板和抠图功能都有&#xff0c;总有一款适合你&#xff01;一、PPT资源1、PPT模板首先我们登陆办公资源网这个网…

化工网站开发_石油化工行业网站定制 | 石油化工产品销售网站制作

在网站建设中&#xff0c;如果想要运营好网站&#xff0c;那么一定是离不开对网站的访问信息进行收集、记录并归类&#xff0c;还要在统计这些数据的基础上进行深度分析&#xff0c;来找到网站出现的一些问题&#xff0c;从而进行整改。今天我们来具体说说网站建设中&#xff0…

Python进阶学习网站

2019独角兽企业重金招聘Python工程师标准>>> www.scipy.org 科学 数学 工程 http://www.pygame.org/lofi.html http://www.pygame.org/news.html pygame&#xff08;库&#xff09;是一个免费和开源的Python编程语言库&#xff0c;用于制作多媒体应…

反复刷新增加访问量_基于爬虫刷新某网站访问量!我说怎么上千万呢!

前言&#xff1a;前一段时间看到有博友写了爬虫去刷新博客访问量一篇文章&#xff0c;当时还觉得蛮有意思的&#xff0c;就保存了一下&#xff0c;但是当我昨天准备复现的时候居然发现文章404了。所以本篇文章仅供学习交流&#xff0c;严禁用于商业用途当我在写文章的同时&…

php 禁止抓取,服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站

一、Apache①、通过修改 .htaccess 文件修改网站目录下的.htaccess&#xff0c;添加如下代码即可(2 种代码任选)&#xff1a;可用代码 (1)&#xff1a;RewriteEngineOnRewriteCond %{HTTP_USER_AGENT} (^$|FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDadd…

java天气获取网站_java扒取天气网站的数据

1:由于天气apk接口不稳定所以经常获取不到信息。于是就动手写一个扒取天气网站上的数据然后做成json&#xff0c;apk直接调用服务器上扒取的数据增加稳定性。2&#xff1a;项目主要是用servlet然后正则表达式来提取网站信息。3:我觉得比较难得地方就是如何写正确的正则来提取出…

使用Varnish为web网站加速

使用Varnish为网站加速varnish概述 Varnish是一款高性能的开源HTTP加速器&#xff0c;挪威最大的在线报纸Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原来的12台squid&#xff0c;性能居然比以前更好。Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一&am…

iis网站域名绑定

这里解释两种绑定 一、全局ip未分配 二、绑定指定域名 1、添加主机名 注释&#xff1a;没有绑定主机名的进站默认就会被访问。绑定主机名的进站访问特定主机名的网站。转载于:https://www.cnblogs.com/zz-930474270/p/4569358.html

谈谈网站防盗链

引子&#xff1a;明明引用了一个正确的图片地址&#xff0c;但显示出来的却是一个红叉或写有“此图片仅限于***网站用户交流沟通使用”之类的“假图片”&#xff08;下图便是网易博客的防盗链效果&#xff09;。用嗅探软件找到了多媒体资源的真实地址用下载软件仍然不能下载。下…

从服务器检索时出错dfdferh01_服务器空间的稳定性对seo优化非常重要—竹晨网络...

网站降权是指搜索引擎对网站评定的级别下降&#xff0c;是搜索引擎对网站进行的一种处罚方式。通常多为网站自身作弊导致的&#xff0c;改正错误一段时间后会自行恢复。特征一&#xff1a;关键词排名大幅度下降特征二&#xff1a;网站收录量减少特征三&#xff1a;搜索引擎快照…

对公司网站DNS解析异常的排查与处理

这周可谓是屋漏连夜雨&#xff0c;先是nfs挂载出现问题&#xff0c;紧接着住处的厕所堵了&#xff0c;然后又是今天的域名解析异常导致服务访问返回404。我们的域名是解析到两个IP&#xff0c;分别是电信跟网通。异常情景&#xff1a;用户打开页面登录后图片上传跟显示出现异常…

php多站点建站,wordpress多站点子目录多域名建站 管理开启方法

最近打算折腾一个主题演示站&#xff0c;给每个主题使用独立的子站点来搭建演示&#xff0c;如果是Apache环境&#xff0c;配置就比较容易&#xff0c;但是倡萌使用的是 Nginx&#xff0c;花了大量的时间测试了N多网络上的伪静态规则&#xff0c;最终找到了完美的解决方法。下面…

如何查看任何一下网站的全部二级域名?

快速教会你查看任何一个网站的全部二级域名。请看我的讲解吧&#xff01; 方法/步骤 1方法其实很简单。首先&#xff0c;我们随便找一个搜索引擎。我以百度搜索引擎为例。 2我以腾讯QQ这个网站为例。我们在搜索框内输入site:*qq.com这下我们就可以搜索到这个网站所有二级域名以…

linux系统 网站木马后门Webshell查杀工具源码

后门这东西好让人头疼&#xff0c;第一文件太多了&#xff0c;不容易找&#xff0c;第二&#xff0c;难找&#xff0c;需要特征匹配啊。搞了一个python版查杀php webshell后门工具&#xff0c;大家可以增加后门的特征码&#xff0c;然后甩到后台给他查杀就可以了。适合Linux系统…

SEO算法深度分析之倒排索引,来解释SEO排名的问题

今天给大家分享一下倒排索引的一些事情&#xff0c;为什么要说倒排索引呢?因为当用户搜索一个词的时候&#xff0c;返回的搜索结果页面就是经过倒排索引和一系列算法过滤后的结果排序&#xff0c;seo苦苦追求的不就是排名的多少吗?说的通俗一点&#xff0c;其实搜索引擎的索引…

网站主机Introduction

“Introduction” 真是一个让人头晕的一个词汇&#xff0c;文章来自3wsc的记录。 首 页 目录主要内容网站主机简介万维网如何工作、发布站点&#xff1b;因特网服务提供商(ISP)提供什么服务主机提供商将站点放置 自己的服务器 与放置于 ISP 的差异域名注册如何注册域名并充分利…

【网络推广方案】比相微博、SEOSEM依然是最有效手段

【网络推广方案】比相微博、SEOSEM依然是最有效手段近年来&#xff0c;微博作为一个重要的社交网络平台&#xff0c;一度成为最具潜力和最重要的流量来源。无论谁拥有大量的微博粉丝&#xff0c;都会引起很多关注。一些产品在微博上高度传播。人们传递这些商业信息仅仅是因为他…

JavaScript实现在线进制转换工具网站 -toolfk程序员工具网

2019独角兽企业重金招聘Python工程师标准>>> 本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱&#xff0c;ToolFk 特色是专注于程序员日常的开发工具&#xff0c;不用安装任何软件&#xff0c;只要把内容贴上按一个执行按钮,就能获取到想要的内容结果…

网站爬取-案例四:知乎抓取(COOKIE登录抓取个人中心)(第一卷)

有很多网站是需要先登录&#xff0c;才可以浏览的&#xff0c;所以我们这个案例主要讲解如何以登陆的方式抓取这类的页面 第一&#xff1a;http本身是一种无状态的协议 这样两个请求没有任何关系&#xff0c;像淘宝这样的网站需要记录用户的每次请求&#xff0c;来看看有状态的…

wordpress域名解析到了网站,但是点击其他页面会出现ip而不是域名

1.前提域名可以访问你的网站证明解析没问题 2.那就是wp后台的设置问题&#xff0c;将url和站点url改为你的域名http://www.eovision.cc清理缓存即可 亲测可用&#xff0c;如果改了出现页面前台和后台无法访问了&#xff0c; 在你使用的主题下找到functons.php任意地方加上 upda…