编写css代码的实用性建议

Margin Collapse

不同于其他很多属性,盒模型中垂直方向上的Margin会在相遇时发生崩塌,也就是说当某个元素的底部Margin与另一个元素的顶部Margin相邻时,只有二者中的较大值会被保留下来,可以从下面这个简单的例子来学习:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

.square {

    width: 80px;

    height: 80px;

}

 

.red {

    background-color: #F44336;

    margin-bottom: 40px;

}

 

.blue {

    background-color: #2196F3;

    margin-top: 30px;

}

在上述例子中我们会发现,红色和蓝色方块的外边距并没有相加得到70px,而是只有红色的下外边距保留了下来。建议来说还是尽量统一使用margin-bottom属性,这样就显得和谐多了。

使用Flexbox进行布局

在传统的布局中我们习惯使用Floats或者inline-blocks,不过它们更适合于格式化文档,而不是整个网站。而Flexbox则是专门的用于进行布局的工具。Flexbox模型允许开发者使用很多便捷可扩展的属性来进行布局,估计你一旦用上就舍不得了:

1

2

3

4

.container {

    display: flex;

    /* Don't forget to add prefixes for Safari */display: -webkit-flex;

}

 

使用CSS Reset

虽然这些年来随着浏览器的迅速发展与规范的统一,浏览器特性碎片化的情况有所改善,但是在不同的浏览器之间仍然存在着很多的行为差异。而解决这种问题的最好的办法就是使用某个CSS Reset来为所有的元素设置统一的样式,保证你能在相对统一干净的样式表的基础上开始工作。目前流行的Reset库有 normalize.css, minireset以及 ress ,它们都可以修正很多已知的浏览器之间的差异性。而如果你不打算用某个外在的库,那么建议可以使用如下的基本规则:

CSS

 

1

2

3

4

5

* {

    margin: 0;

    padding: 0;

    box-sizing: border-box;

}

上面的规则看起来没啥用,不过如果不同的浏览器在默认情况下为你设置了不同的外边距/内边距的默认值,还是会挺麻烦的。

一切应为Border-box

虽然很多初学者并不了解box-sizing这个属性,但是它确实相当的重要。而最好的理解它的方式就是看看它的两种取值:

· 默认值为content-box,即当我们设置某个元素的heght/width属性时,仅仅会作用于其内容尺寸。而所有的内边距与边都是在其之上的累加,譬如某个<div>标签设置为宽100,内边距为10,那么最终元素会占用120(100 + 2*10)的像素。

· border-box:内边距与边是包含在了width/height之内,譬如设置了width:100px<div>无论其内边距或者边长设置为多少,其占有的大小都是100px。

将元素设置为border-box会很方便你进行样式布局,这样的话你就可以在父元素设置高宽限制而不担心子元素的内边距或者边打破了这种限制。

以背景图方式使用Images

如果需要在响应式的环境下展示图片,有个简单的小技巧就是使用该图片作为某个<div>的背景图而不是直接使用img标签。基于这种方式配合上background-sizebackground-position这两个属性,可以很方便地按比例缩放:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

img {

    width: 300px;

    height: 200px;

}

 

div {

    width: 300px;

    height: 200px;

    background: url('http://cdn.tutorialzine.com/wp-content/uploads/2016/08/bicycle.jpg');

    background-position: center center;

    background-size: cover;

}

section{

    float: left;

    margin: 15px;

}

不过这种方式也是存在缺陷的,譬如你无法设置图片的懒加载、图片无法被搜索引擎或者其他类似的工具抓取到,有个不错的属性叫object-fit可以解决这个问题,不过该属性目前的浏览器支持并不是很完善。

注释格式优化

CSS虽然谈不上一门编程语言但是其仍然需要添加注释以保障整体代码的可读性,只要添加些简单的注释不仅可以方便你更好地组织整个样式表还能够让你的同事或者未来的自己更好地理解。对于CSS中整块的注释或者使用在Media-Query中的注释,建议是使用如下形式:

CSS

 

1

2

3

4

5

/*---------------

    #Header

---------------*/header { }header nav { }/*---------------

    #Slideshow

---------------*/.slideshow { }

而设计的细节说明或者一些不重要的组件可以用如下单行注释的方式:

CSS

 

1

2

3

4

/*   Footer Buttons   */

.footer button { }

 

.footer button:hover { }

同时,不要忘了CSS中是没有//这种注释方式的:

CSS

 

1

2

3

4

5

6

7

/*  Do  */p {

    padding: 15px;

    /*border: 1px solid #222;*/

}/*  Don't  */p {

    padding: 15px;

    // border: 1px solid #222;  

}

使用Kebab-case命名变量

对于样式类名或者ID名的命名都需要在多个单词之间添加-符号,CSS本身是大小写不敏感的因此你是用不了camelCase的,另一方面,很久之前也不支持下划线,所以现在的默认的命名方式就是使用-:

CSS

 

1

2

3

4

5

6

7

/*  Do     */

.footer-column-left { }

 

/*  Don't  */

.footerColumnLeft { }

 

.footer_column_left { }

而涉及到具体的变量命名规范时,建议是使用BEM规范,只要遵循一些简单的原则即可以保证基于组件风格的命名一致性。你也可以参考CSS Tricks来获得更多的细节描述。

避免重复代码

大部分元素的CSS属性都是从DOM树根部继承而来,这也是其命名为级联样式表的由来。我们以font属性为例,该属性往往是继承自父属性,因此我们并不需要再单独地为元素设置该属性。我们只需要在html或者body中添加该属性然后使其层次传递下去即可:SS

1

2

3

html {

    font: normal 16px/1.4 sans-serif;

}

使用transform添加CSS Animations

不建议直接改变元素的widthheight属性或者left/top/bottom/right这些属性来达到动画效果,而应该优先使用transform()属性来提供更平滑的变换效果,并且能使得代码的可读性会更好:

CSS

 

1

2

3

4

5

6

7

8

.ball {

    left: 50px;

    transition: 0.4s ease-out;

}/* Not Cool*/.ball.slide-out {

    left: 500px;

}/* Cool*/.ball.slide-out {

    transform: translateX(450px);

}

Transform的几个属性translaterotatescale都具有比较好的浏览器兼容性可以放心使用。

不要重复造轮子

现在CSS社区已经非常庞大,并且不断地有新的各式各样的库开源出来。这些库可以帮助我们解决从小的代码片到用于构建完整的响应式应用的全框架。

尽可能使用低优先级的选择器

并不是所有的CSS选择器的优先级都一样,很多初学者在使用CSS选择器的时候都是考虑以新的特性去复写全部的继承特性,不过这一点在某个元素多状态时就麻烦了,譬如下面这个例子:

1

2

3

4

5

6

7

8

9

10

11

12

a{

    color: #fff;

    padding: 15px;

}

 

a#blue-btn {

    background-color: blue;

}

 

a.active {

    background-color: red;

}

我们本来希望将.active类添加到按钮上然后使其显示为红色,不过在上面这个例子中很明显起不了作用,因为button已经以ID选择器设置过了背景色,也就是所谓的Higher Selector Specificity。一般来说,选择器的优先级顺序为:ID(#id) > Class(.class) > Type(header)

避免使用!important

认真的说,千万要避免使用!important,这可能会导致你在未来的开发中无尽的属性重写,你应该选择更合适的CSS选择器。而唯一的可以使用!important属性的场景就是当你想去复写某些行内样式的时候,不过行内样式本身也是需要避免的。

使用text-transform属性设置文本大写

1

2

3

4

5

<div class="movie-poster">Star Wars: The Force Awakens</div>

 

.movie-poster {

    text-transform: uppercase;

}

Em, Rem, 以及 Pixel

已经有很多关于人们应该如何使用em,rem,以及px作为元素尺寸与文本尺寸的讨论,而笔者认为,这三个尺寸单位都有其适用与不适用的地方。不同的开发与项目都有其特定的设置,因此并没有通用的规则来决定应该使用哪个单位,这里是我总结的几个考虑:

· em – 其基本单位即为当前元素的font-size值,经常适用于media-queries中,em是特别适用于响应式开发中。

· rem – 其是相对于html属性的单位,可以保证文本段落真正的响应式尺寸特性。

· px – Pixels 并没有任何的动态扩展性,它们往往用于描述绝对单位,并且可以在设置值与最终的显示效果之间保留一定的一致性。

在生产环境下使用Minified代码

为了提升页面的加载速度,在生产环境下我们应该默认使用压缩之后的资源代码。在压缩的过程中,会将所有的空白与重复剔除掉从而减少整个文件的体积大小。当然,经过压缩之后的代码毫无可读性,因此在开发阶段我们还是应该使用普通的版本。对于CSS的压缩有很多的现行工具:

· Online tools – CSS Minifier (API included), CSS Compressor

· Text editor plugins: Sublime TextAtom

· Libraries: Minfiy (PHP), CSSO and CSSNano (PostCSS, Grunt, Gulp)

选择哪个工具肯定是依赖于你自己的工作流啦~

多参阅Caniuse

不同的浏览器在兼容性上差异很大,因此如果我们可以针对我们所需要适配的浏览器,在caniuse上我们可以查询某个特性的浏览器版本适配性,是否需要添加特定的前缀或者在某个平台上是否存在Bug等等。不过光光使用caniuse肯定是不够的,我们还需要使用些额外的服务来进行检测。

Validate:校验

对于CSS的校验可能不如HTML校验或者JavaScript校验那么重要,不过在正式发布之前用Lint工具校验一波你的CSS代码还是很有意义的。它会告诉你代码中潜在的错误,提示你一些不符合最佳实践的代码以及给你一些提升代码性能的建议。就像Minifers与Autoprefixers,也有很多可用的工具:

· Online tools: W3 ValidatorCSS Lint

· Text editor plugins: Sublime TextAtom

· Libraries: stylelint (Node.js, PostCSS), css-validator (Node.js)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用CSS代码绘制甘特图样式是通过利用CSS的样式属性和选择器来设置甘特图的外观和布局。 首先,我们可以使用CSS的盒子模型来设置甘特图的宽度、高度和边框等属性。例如,我们可以设置甘特图的宽度为500px,高度为300px,边框为1px实线,并给甘特图设置一个合适的背景色。 其次,我们可以利用CSS的定位属性来布局甘特图的各个任务栏。使用绝对定位或相对定位来设置左、上的距离,从而确定每个任务栏的位置。我们还可以使用CSS的宽度属性来设置每个任务栏的长度,从而表示任务的持续时间。 在样式方面,我们可以利用CSS的背景色或背景图片属性来区分不同类型的任务。通过为不同的任务栏设置不同的背景色或背景图片,可以直观地显示任务的类型。 此外,我们还可以使用CSS的其他样式属性,如字体大小、字体颜色、对齐方式等,来美化和调整甘特图的显示效果。例如,我们可以设置任务名称的字体大小和颜色,使其更加醒目。 最后,为了提高甘特图的可读性,我们还可以使用CSS的伪类选择器来设置鼠标悬停和选中效果。通过设置鼠标悬停时的样式,可以让用户在使用甘特图时有更好的交互体验。 总之,通过合理地使用CSS的样式属性和选择器,我们可以绘制出漂亮且有吸引力的甘特图样式,从而方便用户理解和管理项目的进度。 ### 回答2: 甘特图是一种项目管理工具,用于展示项目任务的时间安排和进度。使用CSS代码绘制甘特图样式可以实现自定义的外观效果,使其更加符合项目需求和视觉美感。 首先,我们可以利用CSS中的盒子模型和定位属性来创建甘特图的时间轴和任务条。通过设置div元素的宽度和高度,以及使用position属性控制元素的位置,我们可以绘制出一个简单的甘特图框架。 接下来,我们可以使用CSS的背景颜色或背景图片属性来给任务条添加不同的样式。根据任务的属性或进度,我们可以自定义任务条的颜色、渐变效果或阴影,以显示不同的状态。 此外,我们还可以利用CSS的伪元素和动画属性来为甘特图添加一些交互效果。例如,在任务条的基础上使用::before或::after 伪元素来添加箭头或标签,以增加可读性和易用性。我们还可以通过CSS的动画属性来实现任务条的平滑过渡效果或进度动画,提升用户体验。 最后,我们应该保持代码的可维护性和可复用性。可以使用CSS预处理器如Sass或Less来管理样式的变量、函数和混合器,使代码更具可读性和易于修改。此外,在编写CSS样式时,注重语义化和模块化也是很重要的,这样可以使代码更易于理解和维护。 总之,使用CSS代码绘制甘特图样式可以实现自定义的外观效果,使其更加符合项目需求和视觉美感。在设计甘特图样式时,考虑到交互效果、可维护性和可复用性等方面,能够使工具更加实用和易于扩展。 ### 回答3: 甘特图是一种项目管理工具,用于展示项目工作项的时间计划和进度。使用CSS代码可以绘制出不同样式的甘特图。 首先,我们可以使用CSS设置甘特图的背景颜色和边框样式,通过设置背景颜色、边框颜色和边框宽度,可以将甘特图的背景和边框样式化。 接下来,我们可以使用CSS设置甘特图中的不同工作项的样式。可以通过设置工作项的颜色、字体样式和大小,来区分不同的工作项。例如,可以用不同的颜色表示不同类型的工作项,比如蓝色表示开发任务,红色表示测试任务等。同时,还可以通过调整字体样式和大小来使甘特图更加清晰和易读。 此外,还可以使用CSS设置甘特图中的时间轴样式。可以通过设置时间轴的颜色、字体样式和大小,来增加甘特图的可读性。可以使用不同的颜色表示不同的时间段,比如将计划时间用灰色表示,实际时间用绿色表示等。 最后,我们还可以使用CSS设置甘特图中的进度样式。可以通过设置进度条的颜色、高度和宽度,来表示工作项的进度。可以使用不同的颜色表示不同的进度,比如将已完成的工作项用绿色表示,未完成的工作项用灰色表示等。 总而言之,使用CSS代码可以实现丰富多样的甘特图样式。通过设置背景颜色和边框样式、工作项样式、时间轴样式和进度样式,可以使甘特图更具吸引力和可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值