视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CSS高级技巧
2020-11-27 18:53:57 责编:小采
文档

使用:not()在菜单上添加/取消边框

很多人会这样给导航添加边框,然后给最后一个取消掉:

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

其实,用CSS3的:not()可以简化为下面的代码:

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

当然,你也可以使用.nav li + li甚至.nav li:first-child ~ li,但是使用:not()可以使意图更加明确
所有主流浏览器均支持:not选择器,除了IE8及更早的版本

给body添加line-height属性

你不需要为<p>、<h*>分别添加line-height属性,相反的,只需要添加到body上即可:

body {
 line-height: 1;
}

这样,文本元素就可以很容易的从body继承该属性

垂直居中

可以垂直居中任何元素:

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

注:flexbox在IE11下存在一些bug

使用逗号分割列表

使列表看起来像是用逗号分割的:

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

通过:not()伪类去掉最后一个元素后面的逗号

使用负的nth-child选取元素

使用负的nth-child在1到n之间选择元素:

li {
 display: none;
}
/* 选择第1到3个元素并显示它们 */
li:nth-child(-n+3) {
 display: block;
}

当然,如果你了解:not()的话,还可以这么做:

li:not(:nth-child(-n+3)) {
 display: none;
}

使用SVG作icon图标

没什么理由不使用SVG作icon图标:

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

SVG对于任何分辨率的缩放效果都很好,并且支持 IE9+所有浏览器,所以,放弃使用png、jpg、gif文件吧
注:以下代码对于使用辅助设备上网的用户可以提升可访问性:

.no-svg .icon-only:after {
 content: attr(aria-label);
}

优化显示文本

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

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

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

使用max-height实现纯CSS幻灯片

使用max-height与超出隐藏实现纯CSS的幻灯片:

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

继承box-sizing

让box-sizing继承自html:

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

这使得在插件或者其他组件中修改box-sizing属性变得更加容易

设置表格相同宽度

.calendar {
 table-layout: fixed;
}

使用Flexbox来避免Margin Hacks

在做多列布局的时候,可以通过Flexbox的space-between属性来避免nth-、first-、 last-child等hacks:

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

这样,列之间的空白就会被均匀的填满

对空链接使用属性选择器

当<a>中没有文本而href不为空的时候,显示其链接:

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

文本溢出省略的处理方法

单行文本溢出

.inline{
 overflow: hidden;
 text-overflow: ellipsis;
 white-space: nowrap;
}

多行文本溢出

.foo{
 display: -webkit-box!important;
 overflow: hidden;
 text-overflow: ellipsis;
 word-break: break-all;
 -webkit-box-orient: vertical;/*方向*/
 -webkit-line-clamp:4;/*显示多少行文本*/
}

下载本文
显示全文
专题