这两天窝在家里又看了本CSS相关的书:《CSS重构:样式表性能调优 》。重构是指在不改变代码行为的前提下,重写代码,使其更加简洁、易于复用。
这本书读起来比较快,可挑自己感兴趣的读,前面三章是基础知识的介绍,都了解的话可直接跳过。第四章是为样式分类,我比较感兴趣的是第四章(测试)和第五章(代码的组织和重构策略)。
一、测试
测试时需要考虑很多因素,其中包括以下几点:
1、正在用什么浏览器测试网页?
2、如何在不同的操作系统上测试各种各样的浏览器?
3、正在多大的窗口浏览网页?
4、如何快速测试大量网页?
5、如何验证你所看到的效果是正确的?
6、如果你无法获得某些设备,如何测试网站在这些设备上的效果?
1)测试多个浏览器
最常用的测试 CSS 在不同浏览器中显示效果的方法是人工测试,主流浏览器包括Chrome、Firefox、Safari、Microsoft Edge等。
为了测试 CSS 在移动端的效果,需要从合适的应用市场下载适合于设备的各种浏览器。
1、要用iOS系统的Safari浏览器测试, 可以使用iOS原生设备或Xcode的iOS模拟器。
2、安卓设备可以用 Android Studio 的模拟器测试。
2)第三方测试服务
除了自己测试,还可以使用第三方提供的种类丰富的测试服务。它们能够满足测试网站在任意浏览器或其他配置环境中的效果的需求,同时还提供类似共享测试阶段信息、人工测试多种浏览器和截图等功能。
下面列出的几种第三方服务,有些可免费试用一段时间或提供几种级别的免费服务:
1、BrowserStack
2、Sauce Labs
3、Browserling
4、Litmus
3)视觉回归测试
视觉回归测试是一种测试方法,它通过比较作为基准的用户界面图像和开发过程同一用户界面的图像,来检测不符合预期的改动(回归)。视觉回归测试非常耗时,因为需要测试的浏览器很多,一有改动就进行这种测试,测试工作量很大。此外,肉眼难以确定元素在空间位置上的变化。视觉回归测试有如下技巧:
1、测试重要的点,例如一旦基础样式定义好,就不大可能因为改动它们而引入错误;但是更为复杂、更加脆弱的可用性组件则是需要重点测试的。
2、保持足够细致的粒度,每次只测单个组件。
3、用多种浏览器进行视觉回归测试,因为不同浏览器之间可能存在不一致现象,即不要尝试比较不同浏览器的截图。
Gemini 项目是Yandex 团队开发的视觉回归测试工具。使用该工具,可以编写脚本,自动截取网站在主流浏览器中的截图,然后将其与基准图像比较,不同之处将以高亮形式标记出来。
除了 Gemini, 还有多种视觉回归测试工具, 其中最常用的两个是Wraith 和PhantomCSS 。前者由BBC开发,后者由Huddle公司的James Cryer带领开发团队编写,它们能打开网站,能用PhantomJS(基于WebKit的无头浏览器)或 SlimerJS(基于Gecko的无头浏览器)截图,能对比网页现有元素的截图跟元素基准图像之间的差异。
二、维护代码
代码的测试跟编写同等重要。不断维护已有代码,提高其质量,其重要性不亚于编写新代码。
1)编码规范
编码规范是指将良好的代码编写方法记录下来形成指南,以鼓励团队所有成员以相同的方式编写代码。CSS 编码规范通常指定了注释、格式、命名和选择器用法方面的规范,其详略程度可根据实际情况自行调整。
(1)注释
A. 应该在每个文件的开头添加注释,说明文件的内容。
/* *
* 该文件包含选项卡组的样式。
* 选项卡组应仅包含拥有tab类的元素。
*/
B. 易于混淆的属性,应用注释予以说明。
.tab-group-flush {
display : block ;
margin-left : -12px ; /* 清除父容器的padding值 */
margin-right : -12px ; /* 清除父容器的padding值 */
}
(2)格式
A. 规则集应该满足下列要求。
1、有多个属性时,每个属性占一行。
2、规则集声明块中的每条声明缩进 4 个空格。
.selector {
property1 : value ;
property2 : value ;
}
B. 声明语句应该满足下列要求。
1、冒号后面加1个空格。
2、必须以分号结尾。
.selector {
property1 : value ;
}
C. background-position各个属性值不同时,可以将两个属性值放在一行。
.selector1 { background-position : 0 0 ; }
.selector2 { background-position : 0 -10px ; }
.selector3 { background-position : 0 -10px ; }
D. 规则集和声明末尾的空格必须删除。
(3)选择器命名规范
A. 只允许使用小写字母。
B. 包含多个单词的选择器必须使用脊柱状形式(用连字符连接单词)。
.selector-with-multiple-words {}
C. 禁止用ID为元素添加样式,应该使用类。
D. 用JavaScript修改样式(不管用什么框架),都必须通过增加或删除CSS类来完成。
/* *
* 正确:用 JavaScript 为元素添加类,修改元素的样式。
*/
$( ".js-menu-item").on("click", function (e) {
$( this ).addClass("highlighted");
});
E. 用作 JavaScript 选择器的类和 ID ,必须添加 js- 前缀,并严禁在样式表中使用。
/* *
* 正确:在JavaScript中,用专门用作JavaScript选择器的类选择元素。
*/
$( ".js-menu-item").on("click", function () {
$( this ).addClass("highlighted");
});
F. 必须使用有意义的类名。
/* 正确:类的命名有意义且描述清楚。 */
.resident {}
G. 类名必须描述为什么元素添加样式,而不是怎样添加样式。
/* 正确:类的命名描述的是为什么元素添加样式。 */
.sidebar-important {}
(4)属性
A. 属性的简写形式只可用于border、margin和padding。
/* 正确:仅border属性使用了简写形式。 */
.selector {
border : 1px solid #000000 ;
font-family : Arial, sans-serif ;
font-size : 12px ;
}
B. 属性必须按照字母顺序排列。
.selector {
border : 1px solid #000000 ;
margin : 24px ;
padding : 12px ;
}
C. 属性值为0时,必须省略单位。
.selector {
border : 1px solid #000000 ;
margin : 0 ;
padding : 0 ;
}
更多编码规范方面的启示,请见下面这些规范:
1、Google CSS编码规范
2、18F前端指南
2)模式库
模式库 (有时也称样式指南)是网站使用的一组用户界面模式,它展示了每种模式相关的重要信息,其中包括以下几点:
1、何时(不)使用模式的指导。
2、解释模式使用方式的示例代码。
3、使用某一模式而不用另一模式的原因。
模式库有如下几个优点。
1、首先,模式库将网站所有组件汇集到一起。参与项目的所有成员都能了解到搭建网站的各个模块,确保他们熟悉其背后的原理。让每个人都熟悉一组可复用的模式,还能加快开发速度,因为开发新项目时,无需从头重新开发这些构建模块。
2、模式库将所有组件汇集到一起,还有助于保证用户界面的一致性。使用模式库对设计团队也能起到帮助作用,因为需要修改组件的样式时,在现有模式的基础上做修改即可。模式库为设计工作提供约束条件,鼓励设计师在现有模式的基础上设计新的元素,这进一步强化了用户界面应该保持一致的设计理念。
3、最后,模式库将网站的所有组件都汇集到一起,使识别不一致的组件变得更加容易。编写的新代码可能影响到用户界面效果,在提交代码之前,借助模式库,可从视觉上快速识别错误。修改模式后,若网页看起来有问题,有了模式库,诊断问题将更加容易,因为模式库是模式的最简单应用形式。
Yelp 和MailChimp 的模式库在各个方面都做得非常出色。关于模式库的更多资源,请见styleguides.io , 该网站提供相关示例、文章、图书和播客。
三、代码的组织和重构策略
1)按照样式从最不精确到最精确组织 CSS
CSS 样式根据选择器的特指度和样式的顺序产生作用。因此,有必要按照样式产生作用的顺序组织 CSS 代码。
1、通用样式,用来设定基准,以消除不同浏览器之间的不一致性。
2、基础样式,为网站的所有元素提供基本的样式。留白( margin、padding和line-height等)、字体及其大小等样式。
3、组件及其容器的样式,满足网站范围内的大多数应用场景,样式上的任何调整都应该交由父容器处理。
4、结构化样式,包括组件及其容器的样式。 该类样式用来创建网页的布局,并常用于定义尺寸。
5、功能性样式,所有样式中最精确的样式。 JavaScript所使用的添加 !important 语句的类就属于这类样式,其他为满足单一目的而实现的样式也属于该类。
6、浏览器特定样式(如果一定需要),只对特定的浏览器生效。通常不够优雅,因此不再使用时,一定要将其删除。
按照以上顺序添加 CSS, 随着声明块选择器的精确度提高,更为复杂的选择器将与已经添加的更加宽泛的选择器区分开来。
2)多个文件还是一个大文件
代码的组织方式有两种,即将代码置于多个文件或只用一个大文件。代码放置位置要易于开发人员查找,这一点很重要,并且同样非常重要的是,这样做有助于网站快速加载以满足终端用户的需要。
1、尽可能地使需要下载的 CSS 文件缩小,以便提高加载速度。
2、小型项目用一个 CSS 文件完全可以接受,合理地将 CSS 文件内容划分为几个大块,每个大块下再恰当安排小块内容,并合理添加注释。
/* *
* 通用样式
* ---------------------------------------------
*/
/* *
* 基础样式
* ---------------------------------------------
*/
/* 基础样式:表单 */
/* 基础样式:标题 */
/* 基础样式:图像 */
3、开发网站时使用多个 CSS 文件,各个文件所包含的样式可以分别服务于网站的某一部分功能,从而可以避免将 CSS 添加到不恰当的位置。
|-css/ |
|-normalizing-styles |
| |- normalize.css |
| |
|-base-styles |
| |- forms.css |
| |- headings.css |
| |- images.css |
| |- lists.css |
| |- tables.css |
| |- etc. |
| |
|-component-styles |
| |- alerts.css |
| |- buttons.css |
| |- carousel.css |
| |- dropdowns.css |
| |- modals.css |
| |- etc. |
| |
|- structural-styles |
| |- layout-checkout.css |
| |- layout-sidebar.css |
| |- layout-primary.css |
| |- layout-settings.css |
| |- etc. |
| |
|- utility-styles |
| |- utility.css |
| |
|- browser-specific-styles |
| |-ie8.css
3)重构前审查CSS
从以下更高的角度来审查 CSS,将非常有助于重构:
1、所用到的属性列表
2、使用某一特定属性的声明块列表
3、使用的颜色数量
4、使用的最高和最低特指度
5、拥有最高和最低特指度的选择器
6、选择器的长度
CSS Dig 是 Google Chrome 浏览器的一款免费插件, 你可以用它获取到以上信息。
4)重构策略
条件允许的话, 应该只对你能够维护的小块代码进行重构,并做到经常评审和发布。
1、保持规则集结构的一致性可以使开发更容易。 请确定好声明块的格式和声明语句的顺序。 每条声明语句可以各占一行,并尽可能按照字母顺序排列。
2、删除僵尸代码 ,僵尸代码是指存在但没有使用的代码,包括没有使用的声明块、重复的声明块和声明语句。
3、分离CSS和JavaScript ,搜索JavaScript代码, 找到选取元素的位置, 然后在选择器前面添加 js- ,同时将该选择器添加到HTML代码中定义该元素的位置。
4、分离基础样式 ,将基础样式分为以下不同类别:
标题(–)
文本(例如:、和)
超链接()
列表(、和
表格(例如:、、 、 、和)
表单(例如:
媒体(例如:、和)
分完类之后,你可以用 CSS Dig寻找某一特定类别的选择器。找到选择器的使用频率和使用位置之后,你可以对它们进行比较,看看哪个属性更常用。如果一个类型选择器单独使用,且只用过一次,就可以放心将其删除。然而,如果一个类型选择器用过多次,请按以下步骤重构。
对于样式要予以重构的类型选择器,在基础样式中新建一条规则集。
从所有用到该类型选择器的地方找到最常用的属性,将其添加到新规则集中。
从其他规则集删除重复的属性,因为它们可以继承新定义的基础样式。
5、删除冗余的ID ,对拥有多个 ID 的选择器进行重构时,首先可以将最右侧 ID 左边的一切统统删除。因为同一个ID在一个网页最多只能使用一次,一个选择器包含多个 ID 实属冗余。
6、将ID转化为类 ,该过程虽然要花费一定时间,但是最终得到的 CSS 特指度更低、更易于复用。将 ID 改为类时,请记得使用意义明确的类名,切记不要使用晦涩或过于精确的名称。如果解决某一特定问题需要改动大量的选择器,那么最好不要将 ID 转化为类,而是等将更精确样式选择器的特指度降低之后,再来重构这部分代码。
7、区分功能性样式 ,功能性样式是唯一应该使用 !important 声明的样式。若不得不使用 !important 的样式,且用途单一(如隐藏元素),应将其作为功能样式写到样式表的同一地方。在拼接 CSS 时功能样式应该置于 CSS 文件的底部,因此整合 CSS 文件时,一定要恰当安排功能性样式的位置。
8、定义可复用组件 ,可以从经常重复使用的界面模式(例如:选项卡)着手,花点时间调研网站什么地方用到了该模式。 请记录该模式的各种变体, 并判断它们是合乎规范的, 还是由于不一致的CSS 而导致的。
9、删除行内CSS和过于模块化的类 ,两种行为应该同时进行, 因为它们在本质上是相同的, 只不过用 style 属性添加的行内 CSS 其特指度更高,除非用 !important 声明覆盖了行内样式。删除行内CSS和过于模块化的类(每个类应用一种样式,它们总是需要一起使用,如下代码所示)都应该晚些重构。
< h1 class ="font-bold uppercase blue-text margin-bottom-large no-padding" >
Too Many CSS Classes
h1 >
10、隔离面向特定浏览器的CSS样式 ,这些代码很容易污染其他 CSS, 因此我们需要对其进行区分。但是在隔离之前, 请记得查看网站的流量来源,以判断是否能够放弃支持这些浏览器。
5)评估重构是否成功
下面是重构完成之后如何评价是否成功的一些想法。 其中一些建议,比如检查文件的大小,在重构之前也应要做,以便与重构之后进行比较。
1、你的网站崩溃了吗?
判断代码重构之后成功与否的首要的、最明显的方式是确认网站的行为是否倒退。如果经过彻底的视觉效果检测之后没有发现视觉效果方面的问题,那么接下来你需要考虑其他方面。
低耦合度,通过创建可复用组件和用容器包裹组件,你可以实现 CSS 和 HTML 的分离。虽然一定程度的耦合度一直存在,但是还是要避免使用过于复杂的选择器。
低特指度,选择器的特指度指标可用于度量代码库的特指度,以判断代码库是否包含大量高特指度的选择器,这些选择器将增加代码的维护成本。
更少的文件数量和更小的文件,拼接可以减少需要下载的文件数量,压缩可以删除多余字符以减小文件体积。
2、UI Bug数
一旦你开始重构 CSS 并遵循编码标准,因代码凌乱或代码重复而引入的 UI bug 数量应该会减少。软件 bug 是不可避免的(网站开发人员可能引入 bug, 浏览器厂商可能引入浏览器问题),但是使用模式库和执行视觉效果测试百试不爽,它们能够帮你更快地检测和诊断这些问题。
3、减少开发和测试时间
将 CSS 以符合逻辑的方式分成多个文件,确立了编码标准,并创建了用户界面模式库之后,应该能够较以往更快地构建和维护用户界面了。除了降低开发时间,如果你能熟练使用正确的工具,你也许还注意到你可以更快地测试界面。
你可能感兴趣的:(CSS重构:样式表性能调优)
DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理
STU学生网页设计
网页设计 期末网页作业 html静态网页 html5期末大作业 网页设计 web大作业
️精彩专栏推荐作者主页:【进入主页—获取更多源码】web前端期末大作业:【HTML5网页期末作业(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】文章目录二、网站介绍三、网站效果▶️1.视频演示2.图片演示四、网站代码HTML结构代码CSS样式代码五、更多源码二、网站介绍网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程
关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript
二挡起步
web前端期末大作业 javascript html css 旅游 风景
⛵源码获取文末联系✈Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业|游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作|HTML期末大学生网页设计作业,Web大学生网页HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScrip
HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动
二挡起步
web前端期末大作业 web设计网页规划与设计 html css javascript dreamweaver 前端
Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线
webpack图片等资源的处理
dmengmeng
需要的loaderfile-loader(让我们可以引入这些资源文件)url-loader(其实是file-loader的二次封装)img-loader(处理图片所需要的)在没有使用任何处理图片的loader之前,比如说css中用到了背景图片,那么最后打包会报错的,因为他没办法处理图片。其实你只想能够使用图片的话。只加一个file-loader就可以,打开网页能准确看到图片。{test:/\.(p
深入浅出 -- 系统架构之负载均衡Nginx的性能优化
xiaoli8748_软件开发
系统架构 系统架构 负载均衡 nginx
一、Nginx性能优化到这里文章的篇幅较长了,最后再来聊一下关于Nginx的性能优化,主要就简单说说收益最高的几个优化项,在这块就不再展开叙述了,毕竟影响性能都有多方面原因导致的,比如网络、服务器硬件、操作系统、后端服务、程序自身、数据库服务等,对于性能调优比较感兴趣的可以参考之前《JVM性能调优》中的调优思想。优化一:打开长连接配置通常Nginx作为代理服务,负责分发客户端的请求,那么建议开启H
[Swift]LeetCode767. 重构字符串 | Reorganize String
weixin_30591551
swift runtime
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng
metaRTC5.0 API编程指南(一)
metaRTC
metaRTC c++ c语言 webrtc
概述metaRTC5.0版本API进行了重构,本篇文章将介绍webrtc传输调用流程和例子。metaRTC5.0版本提供了C++和纯C两种接口。纯C接口YangPeerConnection头文件:include/yangrtc/YangPeerConnection.htypedefstruct{void*conn;YangAVInfo*avinfo;YangStreamConfigstreamco
《HTML 与 CSS—— 响应式设计》
陈在天box
html css 前端
一、引言在当今数字化时代,人们使用各种不同的设备访问互联网,包括智能手机、平板电脑、笔记本电脑和台式机等。为了确保网站在不同设备上都能提供良好的用户体验,响应式设计成为了网页开发的关键。HTML和CSS作为网页开发的基础技术,在实现响应式设计方面发挥着重要作用。本文将深入探讨HTML与CSS中的响应式设计原理、方法和最佳实践。二、响应式设计的概念与重要性(一)概念响应式设计是一种网页设计方法,旨在
html+css网页设计 旅游网站首页1个页面
html+css+js网页设计
html css 旅游
html+css网页设计旅游网站首页1个页面网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode、Sublime、Webstorm、Text、Notepad++等任意html编辑软件进行运行及修改编辑等操作)。获取源码1,访问该网站https://download.csdn.net/download/qq_42431718/897527112,点击
css设置当字数超过限制后以省略号(...)显示
周bro
css 前端 vue css3 html 经验分享
1、文字超出一行,省略超出部分,显示’…’用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览。overflow:hidden;text-overflow:ellipsis;white-space:nowrap;2、多行文本溢出显示省略号display:-webkit-box;-webkit-box-orient:vertical;-webkit-lin
360前端星计划-动画可以这么玩
马小蜗
动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能
css2中的透明
琪33
.out{width:400px;height:400px;background-color:blue;margin:100pxauto;border:1pxsolid#000;opacity:0.6;}.in{width:200px;height:200px;background-color:red;margin:100pxauto;}
Nginx从入门到实践(三)
听你讲故事啊
动静分离动静分离是将网站静态资源(JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离的目标。rewrite规则Rewrite规则常见正则表达式Rewrite主要的功能就是实现URL的重写,Ngin
Nginx的使用场景:构建高效、可扩展的Web架构
张某布响丸辣
nginx 前端 架构
Nginx,作为当今最流行的Web服务器和反向代理软件之一,凭借其高性能、稳定性和灵活性,在众多Web项目中扮演着核心角色。无论是个人博客、中小型网站,还是大型企业级应用,Nginx都能提供强大的支持。本文将探讨Nginx的几个主要使用场景,帮助读者理解如何在实际项目中充分利用Nginx的优势。1.静态文件服务对于包含大量静态文件(如HTML、CSS、JavaScript、图片等)的网站,Ngin
Python精选200Tips:121-125
AnFany
Python200+Tips python 开发语言
Spendyourtimeonself-improvement121Requests-简化的HTTP请求处理发送GET请求发送POST请求发送PUT请求发送DELETE请求会话管理处理超时文件上传122BeautifulSoup-网页解析和抓取解析HTML和XML文档查找单个标签查找多个标签使用CSS选择器查找标签提取文本修改文档内容删除标签处理XML文档123Scrapy-强大的网络爬虫框架示例
前端CSS面试常见题
剑亦未配妥
前端面试 前端 css 面试
边界塌陷盒模型有两种:W3C盒模型和IE盒模型,区别在于宽度是否包含边框定义:同时给兄弟/父子盒模型设置上下边距,理论上边距值是两者之和,实际上不是注意:浮动和定位不会产生边界塌陷;只有块级元素垂直方向才会产生margin合并margin计算方案margin同为正负:取绝对值大的值一正一负:求和父子元素边界塌陷解决父元素可以通过调整padding处理;设置overflowhidden,触发BFC子
爬虫技术抓取网站数据
Bearjumpingcandy
爬虫
爬虫技术是一种自动化获取网站数据的技术,它可以模拟人类浏览器的行为,访问网页并提取所需的信息。以下是爬虫技术抓取网站数据的一般步骤:发起HTTP请求:爬虫首先会发送HTTP请求到目标网站,获取网页的内容。解析HTML:获取到网页内容后,爬虫会使用HTML解析器解析HTML代码,提取出需要的数据。数据提取:通过使用XPath、CSS选择器或正则表达式等工具,爬虫可以从HTML中提取出所需的数据,如文
svg图片兼容性和用法优缺点
独行侠_ef93
svg图片的使用方法第一次来认认真真的研究了下svg图片,之前只是在网上见过,但都是一晃而过也没当回事,最近网站改版看到同事有用到svg格式的图片,想想自己干了几年的重构也没用过,这些细节的知识是应该好好研究研究了。暂时还没研究得完全透切,先记下目前为止所看到的吧不然又给忘了。svg可缩放矢量图形(ScalableVectorGraphics),顾名思义就是任意改变其大小也不会变形,是基于可扩展标
创建一个完整的购物商城系统是一个复杂的项目,涉及前端(用户界面)、后端(服务器逻辑)、数据库等多个部分。由于篇幅限制,我无法在这里提供一个完整的系统代码,但我可以分别给出一些关键部分的示例代码,涵盖几
uthRaman
前端 ui 服务器
前端(HTML/CSS/JavaScript)grsyzp.cnHTML页面结构(index.html)html购物商城欢迎来到购物商城JavaScript(Ajax请求商品数据,app.js)javascriptdocument.addEventListener('DOMContentLoaded',function(){fetch('/api/products').then(response=
HTML中"bgcolor"与"background-color"的区别
Sardar_
html
bgcolor只是标签属性,而backgroud更多作为css的样式属性。它们俩大多数情况下效果完全相同。但在标签下效果不同。不支持bgcolor属性,只能用style标签添加CSS样式。作为table的属性而言:HelloWorld!和HelloWorld!效果完全相同。作为body属性而言:效果完全相同。不过个人推荐统一用CSS样式进行控制,把style统一放到.css文件中。backgrou
2019-05-29 vue-router的两种模式的区别
Kason晨
1、大家都知道vue是一种单页应用,单页应用就是仅在页面初始化的时候加载相应的html/css/js一单页面加载完成,不会因为用户的操作而进行页面的重新加载或者跳转,用javascript动态的变化html的内容优点:良好的交互体验,用户不需要刷新页面,页面显示流畅,良好的前后端工作分离模式,减轻服务器压力,缺点:不利于SEO,初次加载耗时比较多2、hash模式vue-router默认的是hash
清除 Conda 缓存
Dmatteratall
conda 缓存
清除Conda缓存:cssCopycodecondaclean--allcondaclean--all命令将会清除Conda缓存和临时文件,而不会删除已经安装的软件包和环境。它主要用于清理不必要的缓存和临时文件以释放磁盘空间。
electron多标签页模式更像客户端
diygwcom
electron javascript 前端
Electron多标签页模式是指在Electron框架中实现的类似Web浏览器的多标签页功能。Electron是一个使用Web技术(HTML、CSS和JavaScript)来创建跨平台桌面应用程序的框架。在Electron中实现多标签页模式,通常需要借助一些特定的库或组件,如BrowserView或electron-tabs,或者通过自定义实现。实现方式1.使用BrowserViewBrowser
前端HTML+CSS+JS的入门学习
俊昭喜喜里
前端 html css
一.HTMLHTML(HyperTextMarkupLanguage)即超文本标记语言,是用于创建网页和网页应用程序的标准标记语言。它不是一种编程语言,而是一种标记语言,通过一系列的元素(elements)来告诉浏览器如何显示网页上的内容,如文本、图片、链接、表格、列表等。HTML文档由一系列的标签(tags)组成,这些标签告诉浏览器如何显示内容。标签通常成对出现,例如和,其中是开始标签,表示一个
quartus频率计 时钟设置_FPGA021 基于QuartusⅡ数字频率计的设计与仿真
weixin_39876739
quartus频率计 时钟设置
摘要随着科技电子领域的发展,可编程逻辑器件,例如CPLD和FPGA的在设计中得到了广泛的应用和普及,FPGA/CPLD的发展使数字设计更加的灵活。这些芯片可以通过软件编程的方式对内部结构进行重构,使它达到相应的功能。这种设计思想改变了传统的数字系统设计理念,促进了EDA技术的迅速发展。数字频率计是一种基本的测量仪器。它被广泛应用与航天、电子、测控等领域。采用等精度频率测量方法具有测量精度保持恒定,
10/24 每周学习总结5
木木ainiks
1024程序员节
1RecordingtheMoolympicsS#include#includeusingnamespacestd;typedeflonglongint_1;intn;structnode{int_1begin_b;int_1end_e;}a[300];boolcmp(nodea,nodeb){if(a.end_e==b.end_e)returna.begin_b>b.begin_b;return
HTML5概述
WFIT~SKY
Web前端 html5 前端 html
1.HTML概述1.1HTML定义HTML超文本标记语言,其中超文本是链接,标记也叫标签(即带尖括号的文本)。1.2HTML基本骨架HTML基本骨架是网页模板。网页的标题网页的内容html:整个网页head:网页头部,存放给浏览器看的代码,例如CSSbody:网页主体,存放给用户看的代码,例如文字、图片title:网页标题1.3HTML关系父子关系(嵌套)兄弟关系(并列)2.HTML开发环境2.1
CSS中如何实现鼠标悬停效果?
神明木佑
css 前端
在CSS中,您可以使用:hover伪类来实现鼠标悬停效果。:hover伪类会在用户将鼠标悬停在选择器所匹配的元素上时应用指定的样式。下面是一个简单的例子,展示了如何在鼠标悬停时改变文本颜色和背景颜色:MouseHoverExample.hover-effect{color:black;background-color:white;padding:10px;text-align:center;}.h
js的书写位置和css的书写位置的区别?为什么要这样写?
李是啥也不会
javascript css 开发语言
JavaScript和CSS的书写位置有以下区别:CSS通常写在标签中,或者在外部样式表文件中()。CSS主要用于控制页面的视觉样式和布局,通常在HTML文件的部分引入,以确保在页面渲染时样式已经加载完毕,从而避免样式闪烁。JavaScript通常写在标签中,或者在外部脚本文件中()。JavaScript用于添加页面的动态行为和交互。一般建议将JavaScript放在HTML文件的末尾(标签之前)
【H2O2|全栈】关于CSS(3)CSS基础(三)
过期的H2O2
【H2O2】CSS入门 css 前端
目录CSS基础知识前言准备工作盒模型概念内容的宽高displaypaddingborderborder-widthborder-styleborder-colormargin预告和回顾后话CSS基础知识前言本系列博客将分享层叠样式表(CSS)有关的知识点。作为本系列的第三篇,本博客将分享盒模型以及页面布局有关的知识点。不是专业的科普博主,主打一个分享知识,写的不好,多多包涵(哈哈)。准备工作软件:
对于规范和实现,你会混淆吗?
yangshangchuan
HotSpot
昨晚和朋友聊天,喝了点咖啡,由于我经常喝茶,很长时间没喝咖啡了,所以失眠了,于是起床读JVM规范,读完后在朋友圈发了一条信息:
JVM Run-Time Data Areas:The Java Virtual Machine defines various run-time data areas that are used during execution of a program. So
android 网络
百合不是茶
网络
android的网络编程和java的一样没什么好分析的都是一些死的照着写就可以了,所以记录下来 方便查找 , 服务器使用的是TomCat
服务器代码; servlet的使用需要在xml中注册
package servlet;
import java.io.IOException;
import java.util.Arr
[读书笔记]读法拉第传
comsci
读书笔记
1831年的时候,一年可以赚到1000英镑的人..应该很少的...
要成为一个科学家,没有足够的资金支持,很多实验都无法完成
但是当钱赚够了以后....就不能够一直在商业和市场中徘徊......
随机数的产生
沐刃青蛟
随机数
c++中阐述随机数的方法有两种:
一是产生假随机数(不管操作多少次,所产生的数都不会改变)
这类随机数是使用了默认的种子值产生的,所以每次都是一样的。
//默认种子
for (int i = 0; i < 5; i++)
{
cout<<
PHP检测函数所在的文件名
IT独行者
PHP 函数
很简单的功能,用到PHP中的反射机制,具体使用的是ReflectionFunction类,可以获取指定函数所在PHP脚本中的具体位置。 创建引用脚本。
代码:
[php]
view plain
copy
// Filename: functions.php
<?php&nbs
银行各系统功能简介
文强chu
金融
银行各系统功能简介 业务系统 核心业务系统 业务功能包括:总账管理、卡系统管理、客户信息管理、额度控管、存款、贷款、资金业务、国际结算、支付结算、对外接口等 清分清算系统 以清算日期为准,将账务类交易、非账务类交易的手续费、代理费、网络服务费等相关费用,按费用类型计算应收、应付金额,经过清算人员确认后上送核心系统完成结算的过程 国际结算系
Python学习1(pip django 安装以及第一个project)
小桔子
python django pip
最近开始学习python,要安装个pip的工具。听说这个工具很强大,安装了它,在安装第三方工具的话so easy!然后也下载了,按照别人给的教程开始安装,奶奶的怎么也安装不上!
第一步:官方下载pip-1.5.6.tar.gz, https://pypi.python.org/pypi/pip easy!
第二部:解压这个压缩文件,会看到一个setup.p
php 数组
aichenglong
PHP 排序 数组 循环 多维数组
1 php中的创建数组
$product = array('tires','oil','spark');//array()实际上是语言结构而不 是函数
2 如果需要创建一个升序的排列的数字保存在一个数组中,可以使用range()函数来自动创建数组
$numbers=range(1,10)//1 2 3 4 5 6 7 8 9 10
$numbers=range(1,10,
安装python2.7
AILIKES
python
安装python2.7
1、下载可从 http://www.python.org/进行下载#wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
2、复制解压
#mkdir -p /opt/usr/python
#cp /opt/soft/Python-2
java异常的处理探讨
百合不是茶
JAVA异常
//java异常
/*
1,了解java 中的异常处理机制,有三种操作
a,声明异常
b,抛出异常
c,捕获异常
2,学会使用try-catch-finally来处理异常
3,学会如何声明异常和抛出异常
4,学会创建自己的异常
*/
//2,学会使用try-catch-finally来处理异常
getElementsByName实例
bijian1013
element
实例1:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/x
探索JUnit4扩展:Runner
bijian1013
java 单元测试 JUnit
参加敏捷培训时,教练提到Junit4的Runner和Rule,于是特上网查一下,发现很多都讲的太理论,或者是举的例子实在是太牵强。多搜索了几下,搜索到两篇我觉得写的非常好的文章。
文章地址:http://www.blogjava.net/jiangshachina/archive/20
[MongoDB学习笔记二]MongoDB副本集
bit1129
mongodb
1. 副本集的特性
1)一台主服务器(Primary),多台从服务器(Secondary)
2)Primary挂了之后,从服务器自动完成从它们之中选举一台服务器作为主服务器,继续工作,这就解决了单点故障,因此,在这种情况下,MongoDB集群能够继续工作
3)挂了的主服务器恢复到集群中只能以Secondary服务器的角色加入进来
2
【Spark八十一】Hive in the spark assembly
bit1129
assembly
Spark SQL supports most commonly used features of HiveQL. However, different HiveQL statements are executed in different manners:
1. DDL statements (e.g. CREATE TABLE, DROP TABLE, etc.)
Nginx问题定位之监控进程异常退出
ronin47
nginx在运行过程中是否稳定,是否有异常退出过?这里总结几项平时会用到的小技巧。
1. 在error.log中查看是否有signal项,如果有,看看signal是多少。
比如,这是一个异常退出的情况:
$grep signal error.log
2012/12/24 16:39:56 [alert] 13661#0: worker process 13666 exited on s
No grammar constraints (DTD or XML schema).....两种解决方法
byalias
xml
方法一:常用方法 关闭XML验证
工具栏:windows => preferences => xml => xml files => validation => Indicate when no grammar is specified:选择Ignore即可。
方法二:(个人推荐)
添加 内容如下
<?xml version=
Netty源码学习-DefaultChannelPipeline
bylijinnan
netty
package com.ljn.channel;
/**
* ChannelPipeline采用的是Intercepting Filter 模式
* 但由于用到两个双向链表和内部类,这个模式看起来不是那么明显,需要仔细查看调用过程才发现
*
* 下面对ChannelPipeline作一个模拟,只模拟关键代码:
*/
public class Pipeline {
MYSQL数据库常用备份及恢复语句
chicony
mysql
备份MySQL数据库的命令,可以加选不同的参数选项来实现不同格式的要求。
mysqldump -h主机 -u用户名 -p密码 数据库名 > 文件
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump -–add-drop-table -uusername -ppassword databasename > ba
小白谈谈云计算--基于Google三大论文
CrazyMizzz
Google 云计算 GFS
之前在没有接触到云计算之前,只是对云计算有一点点模糊的概念,觉得这是一个很高大上的东西,似乎离我们大一的还很远。后来有机会上了一节云计算的普及课程吧,并且在之前的一周里拜读了谷歌三大论文。不敢说理解,至少囫囵吞枣啃下了一大堆看不明白的理论。现在就简单聊聊我对于云计算的了解。
我先说说GFS
&n
hadoop 平衡空间设置方法
daizj
hadoop balancer
在hdfs-site.xml中增加设置balance的带宽,默认只有1M:
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>10485760</value>
<description&g
Eclipse程序员要掌握的常用快捷键
dcj3sjt126com
编程
判断一个人的编程水平,就看他用键盘多,还是鼠标多。用键盘一是为了输入代码(当然了,也包括注释),再有就是熟练使用快捷键。 曾有人在豆瓣评
《卓有成效的程序员》:“人有多大懒,才有多大闲”。之前我整理了一个
程序员图书列表,目的也就是通过读书,让程序员变懒。 程序员作为特殊的群体,有的人可以这么懒,懒到事情都交给机器去做,而有的人又可以那么勤奋,每天都孜孜不倦得
Android学习之路
dcj3sjt126com
Android学习
转自:http://blog.csdn.net/ryantang03/article/details/6901459
以前有J2EE基础,接触JAVA也有两三年的时间了,上手Android并不困难,思维上稍微转变一下就可以很快适应。以前做的都是WEB项目,现今体验移动终端项目,让我越来越觉得移动互联网应用是未来的主宰。
下面说说我学习Android的感受,我学Android首先是看MARS的视
java 遍历Map的四种方法
eksliang
java HashMap java 遍历Map的四种方法
转载请出自出处:
http://eksliang.iteye.com/blog/2059996
package com.ickes;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
/**
* 遍历Map的四种方式
【精典】数据库相关相关
gengzg
数据库
package C3P0;
import java.sql.Connection;
import java.sql.SQLException;
import java.beans.PropertyVetoException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DBPool{
自动补全
huyana_town
自动补全
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml&quo
jquery在线预览PDF文件,打开PDF文件
天梯梦
jquery
最主要的是使用到了一个jquery的插件jquery.media.js,使用这个插件就很容易实现了。
核心代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.
ViewPager刷新单个页面的方法
lovelease
android viewpager tag 刷新
使用ViewPager做滑动切换图片的效果时,如果图片是从网络下载的,那么再子线程中下载完图片时我们会使用handler通知UI线程,然后UI线程就可以调用mViewPager.getAdapter().notifyDataSetChanged()进行页面的刷新,但是viewpager不同于listview,你会发现单纯的调用notifyDataSetChanged()并不能刷新页面
利用按位取反(~)从复合枚举值里清除枚举值
草料场
enum
以 C# 中的 System.Drawing.FontStyle 为例。
如果需要同时有多种效果,
如:“粗体”和“下划线”的效果,可以用按位或(|)
FontStyle style = FontStyle.Bold | FontStyle.Underline;
如果需要去除 style 里的某一种效果,
Linux系统新手学习的11点建议
刘星宇
编程 工作 linux 脚本
随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起。这里介绍学习Linux的一些建议。
一、从基础开始:常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者的权限等问题,这些问题其实都不是很难的,只要了解了 Linu
hibernate dao层应用之HibernateDaoSupport二次封装
wangzhezichuan
DAO Hibernate
/**
* <p>方法描述:sql语句查询 返回List<Class> </p>
* <p>方法备注: Class 只能是自定义类 </p>
* @param calzz
* @param sql
* @return
* <p>创建人:王川</p>
* <p>创建时间:Jul