整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

WEB前端开发工程师必备实用的50个CSS技巧

WEB前端开发工程师必备实用的50个CSS技巧

里我工作中收集了10个很不错的CSS技巧,你可以用在你的项目上。它可以帮你很好地整理你的元素并让他们看起来蛮酷的。下面开始我们的内容,希望你会喜欢它。下面是我收集的CSS技巧,希望能帮助到你,感觉收藏吧。

1. 黑白图像

这段代码会让你的彩色照片显示为黑白照片,是不是很酷?

img.desaturate { filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%);
}

2. 使用 :not() 在菜单上应用/取消应用边框

先给每一个菜单项添加边框

/* add border */.nav li { border-right: 1px solid #666;
}

……然后再除去最后一个元素……

// remove border /.nav li:last-child { border-right: none;
}

……可以直接使用 :not() 伪类来应用元素:

.nav li:not(:last-child) { border-right: 1px solid #666;
}

这样代码就干净,易读,易于理解了。

当然,如果你的新元素有兄弟元素的话,也可以使用通用的兄弟选择符(~):

..nav li:first-child ~ li { border-left: 1px solid #666;
}

3. 页面顶部阴影

下面这个简单的 CSS3 代码片段可以给网页加上漂亮的顶部阴影效果:

body:before { content: ""; position: fixed; top: -10px; left: 0; width: 100%; height: 10px;
 -webkit-box-shadow: 0px 0px 10px rgba(0,0,0,.8); -moz-box-shadow: 0px 0px 10px rgba(0,0,0,.8); box-shadow: 0px 0px 10px rgba(0,0,0,.8);
 z-index: 100;
}

4. 给 body 添加行高

你不需要分别添加 line-height 到每个p,h标记等。只要添加到 body 即可:

body { line-height: 1;
}

这样文本元素就可以很容易地从 body 继承。

5. 所有一切都垂直居中

要将所有元素垂直居中,太简单了:

html, body { height: 100%; margin: 0;
}body { -webkit-align-items: center; 
 -ms-flex-align: center; 
 align-items: center; display: -webkit-flex; display: flex;
}

看,是不是很简单。

注意:在IE11中要小心flexbox。

6. 逗号分隔的列表

让HTML列表项看上去像一个真正的,用逗号分隔的列表:

ul > li:not(:last-child)::after { content: ",";
}

对最后一个列表项使用 :not() 伪类。

7. 使用负的 nth-child 选择项目

在CSS中使用负的 nth-child 选择项目1到项目n。

li { display: none;
}/* select items 1 through 3 and display them */li:nth-child(-n+3) { display: block;
}

8. 对图标使用 SVG

我们没有理由不对图标使用SVG:

.logo { background: url("logo.svg");
}

SVG对所有的分辨率类型都具有良好的扩展性,并支持所有浏览器都回归到IE9。这样可以避开.png、.jpg或.gif文件了。

9. 优化显示文本

有时,字体并不能在所有设备上都达到最佳的显示,所以可以让设备浏览器来帮助你:

html { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
}

注:请负责任地使用 optimizeLegibility。此外,IE /Edge没有 text-rendering 支持。

10. 对纯 CSS 滑块使用 max-height

使用 max-height 和溢出隐藏来实现只有CSS的滑块:

.slider ul { max-height: 0; overlow: hidden;
}.slider:hover ul { max-height: 1000px; transition: .3s ease;
}

11. 继承 box-sizing

让 box-sizing 继承 html:

html { box-sizing: border-box;
}
*, *:before, *:after { box-sizing: inherit;
}

这样在插件或杠杆其他行为的其他组件中就能更容易地改变 box-sizing 了。

12. 表格单元格等宽

表格工作起来很麻烦,所以务必尽量使用 table-layout: fixed 来保持单元格的等宽:

.calendar { table-layout: fixed;
}

13. 用 Flexbox 摆脱外边距的各种 hack

当需要用到列分隔符时,通过flexbox的 space-between 属性,你就可以摆脱nth-,first-,和 last-child 的hack了:

.list { display: flex; justify-content: space-between;
}.list .person { flex-basis: 23%;
}

现在,列表分隔符就会在均匀间隔的位置出现。

14. 使用属性选择器用于空链接

当a元素没有文本值,但 href 属性有链接的时候显示链接:

a[href^="http"]:empty::before { content: attr(href);
}

相当方便。

15. 检测鼠标双击

HTML:

<div class="test3"> <span><input type="text" value=" " readonly="true" />
 <a href="http://renpingjun.com">Double click me</a></span></div>

CSS:

.test3 span { position: relative;
}.test3 span a { position: relative; z-index: 2;
}.test3 span a:hover, .test3 span a:active { z-index: 4;
}.test3 span input { background: transparent; border: 0; cursor: pointer; position: absolute; top: -1px; left: 0; width: 101%; /* Hacky */
 height: 301%; /* Hacky */
 z-index: 3;
}.test3 span input:focus { background: transparent; border: 0; z-index: 1;
}

16. CSS 写出三角形

/* create an arrow that points up */div.arrow-up { width:0px; height:0px; border-left:5px solid transparent; /* left arrow slant */
 border-right:5px solid transparent; /* right arrow slant */
 border-bottom:5px solid #2f2f2f; /* bottom, add background color here */
 font-size:0px; line-height:0px;
}
/* create an arrow that points down */div.arrow-down { width:0px; height:0px; border-left:5px solid transparent; border-right:5px solid transparent; border-top:5px solid #2f2f2f; font-size:0px; line-height:0px;
}
/* create an arrow that points left */div.arrow-left { width:0px; height:0px; border-bottom:5px solid transparent; /* left arrow slant */
 border-top:5px solid transparent; /* right arrow slant */
 border-right:5px solid #2f2f2f; /* bottom, add background color here */
 font-size:0px; line-height:0px;
}
/* create an arrow that points right */div.arrow-right { width:0px; height:0px; border-bottom:5px solid transparent; /* left arrow slant */
 border-top:5px solid transparent; /* right arrow slant */
 border-left:5px solid #2f2f2f; /* bottom, add background color here */
 font-size:0px; line-height:0px;
}

17. CSS3 calc() 的使用

calc() 用法类似于函数,能够给元素设置动态的值:

/* basic calc */.simpleBlock { width: calc(100% - 100px);
}
/* calc in calc */.complexBlock { width: calc(100% - 50% / 3); padding: 5px calc(3% - 2px); margin-left: calc(10% + 10px);
}

18. 文本渐变

文本渐变效果很流行,使用 CSS3 能够很简单就实现:

h2[data-text] {
 position: relative;
}h2[data-text]::after {
 content: attr(data-text);
 z-index: 10;
 color: #e3e3e3;
 position: absolute;
 top: 0;
 left: 0;
 -webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,0)), color-stop(50%, rgba(0,0,0,1)), to(rgba(0,0,0,0)));}

19. 禁用鼠标事件

CSS3 新增的 pointer-events 让你能够禁用元素的鼠标事件,例如,一个连接如果设置了下面的样式就无法点击了。

.disabled { pointer-events: none; }

20. 模糊文本

简单但很漂亮的文本模糊效果,简单又好看!

.blur { color: transparent; text-shadow: 0 0 5px rgba(0,0,0,0.5);
}

21.简单的方法调整图片大小

.content img {

height:auto;

width:500px;

}

太阳、地球、月球应该是我们人人都比较了解的天体,它们的运动轨迹是我们研究星系乃至宇宙的重要信息之一。那么我们如何使用HTML + CSS来模拟这么一个效果呢?


运动轨迹。

简单的来说就是转圈。

// 定义轨迹
@keyframes rotate {
  from {
    transform: rotateZ(0);
  }
  to {
    transform: rotateZ(360deg);
  }
}

定义太阳

/* 定义一个太阳 */
.sum {
  position: relative;
  margin: 100px auto 0;
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background: radial-gradient(
    circle at center,
    #ff9b9b 0%,
    rgba(235, 36, 64, 0) 70%
    );
}

定义地球

地球绕太阳一圈的时间是365.24天左右,这被称为一年。每年有一个额外的日子被称为闰年,这一年会有366天,目的是为了弥补地球绕太阳的公转周期与我们日历的定义周期之间的不匹配。

/* 定义地球位置及公转信息 */
.earth {
  position: absolute;

  /* 定义地球与太阳的相对位置以及轨道线 */
  width: 300px;
  height: 300px;
  margin-left:-50px;
  margin-top:-50px;
  border:1px solid #dddddd;
  border-radius:50%;

  /*动画: 设定公转时间以及轨迹 */
  animation: rotate 36.524s infinite linear;
}
/* 地球本体 */
.earth::before{
  content: ' ';
  position:absolute;
  background-color: blue;
  width: 30px;
  height: 30px;
  margin-left:70px;
  border-radius: 30px;
}

定义月球

月球绕地球一圈的时间大约是27.32天。这被称为一个月(也称为地月周期)。月亮的运动轨迹略呈椭圆形,因此月球与地球的距离会随时间而变化,这也导致月球的运动速度略有不同,有时会更快,有时会更慢,但平均值仍然是27.32天左右。

/* 定义月球位置及公转信息 */
.moon {
  position: absolute;

  /* 定义月球与地球的相对位置以及轨道线 */
  width: 60px;
  height: 60px;
  margin-left:55px;
  margin-top:-15px;
  border:1px solid #dddddd;
  border-radius:50%;

  /*动画: 设定公转时间以及轨迹 */
  animation: rotate 2.732s infinite linear;
}

/* 月球本体 */
.moon::before{
  content: ' ';
  position:absolute;
  background-color: blue;
  width: 10px;
  height: 10px;
  margin-left:7px;
  border-radius: 10px;
}

html结构 / 天体结构

<div class="sum">
  <div class="earth">
      <div class="moon"></div>
  </div>
</div>

最终效果

者:老姚,《JS正则迷你书》的作者 https://github.com/qdlaoyao/css-gif

本文的每一条,都是我曾经发过的掘金沸点,其中有很多条超过了百赞(窃喜)。鉴于时不时有童鞋翻我以前的沸点,因此,本文收集了个人目前发过的所有CSS知识点动图,以便阅读。

需要说明的是,顺序仍是按当时发布顺序罗列的,还没有系统的总结,多多包涵。另外这里,老姚谢谢各位一如既往的支持。

01.【负边距】负边距的效果。注意左右负边距表现并不一致。左为负时,是左移,右为负时,是左拉。上下与左右类似

02.【shape-outside】?不要自以为是了。你以为自己是方的,在别人眼里你却是圆的

03.【BFC应用】BFC应用之阻止外边距合并(margin collapsing)

04.【BFC应用】BFC应用之消除浮动的影响

05.【flex不为认知的特性之一】flex布局下margin:auto的神奇用法

06.【flex不为认知的特性之二】flex布局,当flex-grow之和小于1时,只能按比例分配部分剩余空间,而不是全部

07.【input的宽度】并不是给元素设置display:block就会自动填充父元素宽度。input 就是个例外,其默认宽度取决于size特性的值

08.【定位特性】绝对定位和固定定位时,同时设置 left 和 right 等同于隐式地设置宽度

09.【层叠上下文】层叠上下文:小辈就是小辈,再厉害也只是个小辈

10.【粘性定位】position:sticky,粘性定位要起作用,需要设置最后滞留位置。chrome有bug,firefox完美

11.【相邻兄弟选择器】相邻兄弟选择器之常用场景

12.【模态框】要使模态框背景透明,用rgba是一种简单方式

13.【三角形】css绘制三角形的原理

14.【table布局】display:table实现多列等高布局

15.【颜色对比度】?蓝底红字,由于颜色对比度比较低,故而看不清,因此不是好的配色方案

16.【定宽高比】?css实现定宽高比的原理:padding的百分比是相对于其包含块的宽度,而不是高度

17.【动画方向】动画方向可以选择alternate,去回交替进行

18.【线性渐变应用】css绘制彩带的原理

19.【隐藏文本】隐藏文字内容的两种办法

20.【居中】实现居中的一种简单方式

21.【角向渐变】新的渐变:角向渐变。可以用来实现饼图

22.【背景位置百分比】background-position百分比的正确理解方式:图片自身的百分比位置与容器同样的百分比位置重合

23.【背景重复新值】background-repeat新属性值:round和space。前者表示凑个整,后者表示留点缝

24.【背景附着】background-attachment指定背景如何附着在容器上,注意其属性值local和fixed的使用

25.【动画延时】动画添加延迟时间可以使步调不一致

26.【outline使用】可以使用outline来描边,不占地方,它甚至可以在里面

27【背景定位】当固定背景不随元素滚动时,背景定位是相对于视口的

28【tab-size】浏览器默认显示tab为8个空格,tab-size可以指定空格长度

29【动画暂停】CSS动画其实是可以暂停的

30【object-fit】图片在指定尺寸后,可以设置object-fit为contain或cover保持比例

31【鼠标状态】按钮禁用时,不要忘了设置鼠标状态

32【背景虚化】使用CSS滤镜实现背景虚化

33【fill-available】设置宽度为fill-available,可以使inline-block像block那样填充整个空间

34【fit-content】设置宽度为fit-content,可以使block像inline-block那样实现收缩宽度包裹内容的效果

35【自定义属性】CSS自定义属性的简单使用

36【min-content/max-content】可以设置宽度为min-content和max-content,前者让内容尽可能地收缩,后者让内容尽可能地展开

37【进度条】使用渐变,一个div实现进度条

38可以在打印网页时,设置page相关属性。比如page-break-before属性来表示是否需要另起新页

39【逐帧动画】利用CSS精灵实现逐帧动画

40【resize】普通元素也可以像textarea那样resize

41【面包屑】使用before伪元素实现面包屑

42【sticky footer】使用grid布局实现sticky footer

43【动画填充状态】CSS可以设置动画开始前和结束时所保持的状态

44【动画负延迟】CSS动画可以设置延迟时间为负数,表示动画仿佛开始前就已经运行过了那么长时间

45【过渡】爱的魔力转圈圈

46【动画案例】水波效果原理

47【动画案例】CSS弹球动画效果的原理

48【outline】outline属性的妙用

49【grid】火狐浏览器grid布局检测器

希望有所帮助。

也欢迎阅读本人的《JS正则迷你书》

本文完。

References

  • 《JS正则迷你书》(https://github.com/qdlaoyao/js-regex-mini-book)