linear-gradient()
linear-gradient,创建两种或多种颜色线性渐变的图片。
<body>
<div class="box"></div>
</body>
div{
width: 100px;
height: 100px;
}
.box{
background-image: linear-gradient(gold,blue);
}
横条纹
两种颜色
<body>
<div class="box"></div>
</body>
div{
width: 100px;
height: 100px;
}
.box{
background-color:lightskyblue;
background-image: linear-gradient(gold 50%, blue 0);
background-size:100% 50%;
background-repeat:repeat;
}
三种颜色
<body>
<div class="box"></div>
</body>
div{
width: 100px;
height: 100px;
}
.box{
background-image: linear-gradient(gold 33.33%,
blue 0, blue 66.66%,
tomato 0);
/* background-image: linear-gradient(gold 0%, gold 33.33%,
blue 33.33%,blue 66.66%,
tomato 66.66%,tomato 100%); */
background-size:100% 50%;
background-repeat: repeat;
}
竖条纹
两种颜色
<body>
<div class="box"></div>
</body>
div{
width: 100px;
height: 100px;
}
.box{
background-image: linear-gradient(to right, gold 50%,blue 0);
background-size:50% 100%;
background-repeat: repeat;
}
三种颜色
<body>
<div class="box"></div>
</body>
div{
width: 100px;
height: 100px;
}
.box{
background-image: linear-gradient(to right,gold 33.33%,
blue 0,blue 66.66%,
tomato 0);
background-size:50% 100%;
background-repeat: repeat;
}
斜条纹
两种颜色
<body>
<div class="box"></div>
</body>
div{
width: 100px;
height: 100px;
}
.box{
background-image: linear-gradient(to right top,gold 25%,
blue 0, blue 50%,
gold 0, gold 75%,
blue 0);
background-size:20px 20px;
background-repeat: repeat;
}
repeating-linear-gradient()
<body>
<div class="box"></div>
</body>
div{
width: 100px;
height: 100px;
}
.box{
background-image: repeating-linear-gradient( to right top,
gold 0, gold 10px,
blue 0, blue 20px);
}
同色系条纹
深色作为背景色,背景色+半透明即可得浅色。
<body>
<div class="box"></div>
</body>
div{
width: 100px;
height: 100px;
}
.box{
background-color: darkorange;
background-image: repeating-linear-gradient(45deg,
transparent,transparent 10px,
hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 20px);
}
方形网格
<body>
<div class="box"></div>
</body>
div{
width: 110px;
height: 110px;
margin: 20px;
}
/*
.box{
background-color: white;
background-image: linear-gradient(hsla(0,80%,50%,.5) 50%,transparent 0);
}
*/
/*
.box{
background-color:white;
background-image: linear-gradient(90deg,hsla(0,80%,50%,.5) 50%,transparent 0);
}
*/
/*
.box{
background-color: white;
background-image: repeating-linear-gradient(hsla(0,80%,50%,.5),hsla(0,80%,50%,.5) 10px,
transparent 0,transparent 20px);
}
*/
/*
.box{
background-color: white;
background-image:repeating-linear-gradient(90deg, hsla(0,80%,50%,.5),hsla(0,80%,50%,.5) 10px,
transparent 0,transparent 20px);
}
*/
.box{
background-color: white;
background-image: repeating-linear-gradient(hsla(0,80%,50%,.5),hsla(0,80%,50%,.5) 10px,
transparent 0,transparent 20px),
repeating-linear-gradient(90deg, hsla(0,80%,50%,.5),hsla(0,80%,50%,.5) 10px,
transparent 0,transparent 20px);
}
div{
width: 100px;
height: 100px;
margin: 20px;
}
/*
.box{
background-color: lightskyblue;
background-image:linear-gradient(white 2px, transparent 0);
background-size: 50px 50px;
}
*/
/*
.box{
background-color: lightskyblue;
background-image: linear-gradient(90deg,white 2px,transparent 0);
background-size: 50px 50px;
}
*/
/*
.box{
background-color: lightskyblue;
background-image: linear-gradient(white 1px,transparent 0);
background-size: 10px 10px;
}
*/
/*
.box{
background-color: lightskyblue;
background-image: linear-gradient(90deg,white 1px,transparent 0);
background-size: 10px 10px;
}
*/
/*
.box{
background-color: lightskyblue;
background-image:linear-gradient(white 2px, transparent 0),
linear-gradient(90deg,white 2px,transparent 0);
background-size: 50px 50px;
}
*/
/*
.box{
background-color: lightskyblue;
background-image: linear-gradient(white 1px,transparent 0),
linear-gradient(90deg,white 1px,transparent 0);
background-size: 10px 10px;
}
*/
.box{
background-color: lightskyblue;
background-image:
linear-gradient(white 2px, transparent 0),
linear-gradient(90deg,white 2px,transparent 0),
linear-gradient(white 1px,transparent 0),
linear-gradient(90deg,white 1px,transparent 0);
background-size:
50px 50px,
50px 50px,
10px 10px,
10px 10px;
}
棋盘
<body>
<div class="box"></div>
</body>
/*
.box{
width: 100px;
height: 100px;
background-image: linear-gradient(45deg,#bbb 50%,transparent 0);
}
*/
/*
.box{
width: 100px;
height: 100px;
background-image: linear-gradient(45deg,#bbb 25%,transparent 0);
}
*/
/*
.box{
width: 100px;
height: 100px;
background-image: linear-gradient(45deg,#bbb 25%,transparent 0);
background-size: 50px 50px;
}
*/
/*
.box{
width: 100px;
height: 100px;
background-image: linear-gradient(45deg,transparent 75%,#bbb 0);
background-size:50px 50px;
}
*/
/*
.box{
width: 100px;
height: 100px;
background-image: linear-gradient(45deg,#bbb 25%,transparent 0),
linear-gradient(45deg,transparent 75%,#bbb 0);
background-size: 50px 50px;
}
*/
/*
.box{
width: 100px;
height: 100px;
background-image: linear-gradient(45deg,#bbb 25%,transparent 0),
linear-gradient(45deg,transparent 75%,#bbb 0);
background-size: 50px 50px;
background-position: 25px 25px;
}
*/
.box{
width: 100px;
height: 100px;
background-image: linear-gradient(45deg,#bbb 25%,transparent 0),
linear-gradient(45deg,transparent 75%,#bbb 0),
linear-gradient(45deg,#bbb 25%,transparent 0),
linear-gradient(45deg,transparent 75%,#bbb 0);
background-size: 50px 50px;
background-position: 0 0,
0 0,
25px 25px,
25px 25px;
}
.box{
width: 100px;
height: 100px;
background-image: linear-gradient(45deg,#bbb 25%,transparent 0,transparent 75%,#bbb 0),
linear-gradient(45deg,#bbb 25%,transparent 0,transparent 75%,#bbb 0);
background-size: 50px 50px;
background-position: 0 0, 25px 25px;
}
@mixin board($size,$color){
background-image: linear-gradient(45deg,$color 25%,transparent 0,transparent 75%,$color 0),
linear-gradient(45deg,$color 25%,transparent 0,transparent 75%,$color 0);
background-size: $size $size;
background-position: 0 0, $size/2 $size/2;
}
.box{
width: 100px;
height: 100px;
@include board(50px,#bbb);
}
信封
<body>
<div class="box"></div>
</body>
.box{
width: 100px;
height: 100px;
/* background-image: linear-gradient(-45deg,white, white 12.5%,
red 0,red 25%,
white 0,white 37.5%,
blue 0,blue 50%,
white 0,white 62.5%,
red 0, red 75%,
white 0,white 87.5%,
blue 0,blue 100%
); */
background-image: repeating-linear-gradient(-45deg,white 0,white 12.5%,
red 0,red 25%,
white 0,white 37.5%,
blue 0,blue 50%);
}
多个linear-gradient
时,注意优先级,排在前面的优先级高,因此会覆盖后面的。
举例来讲,
.box{
width: 100px;
height: 100px;
background-image:repeating-linear-gradient(-45deg,transparent 0,transparent 12.5%,
red 0,red 25%,
transparent 0,transparent 37.5%,
blue 0,blue 50%),
linear-gradient(white,white);
}
.box{
width: 16em;
height: 8em;
border: 1em solid transparent;
background-image:linear-gradient(white,white),
repeating-linear-gradient(-45deg,transparent 0,transparent 12.5%,
red 0,red 25%,
transparent 0,transparent 37.5%,
blue 0,blue 50%);
background-size: 4em 4em;
/* background-size: 4em ; */
background-clip: padding-box,border-box;
}
background-size:4m 4m;
不等效于background-size:4em
。
background-size只有一个值时,该值将作为宽度值,但高度值将被设定为auto
;
background-size有两个值时,第一个值作为宽度值,第二个值作为高度值。
信封样式的实现和另外两个特性有关:background-clip
和background-origin
。
background-clip
决定了背景颜色,即background-color
的作用范围,其默认值是border-box
,这意味着背景颜色将从元素内容区域延伸至边框。
background-origin
决定了背景图像的左上角的放置位置,其默认值是padding-box
,即背景图像默认从padding-box的左上角开始平铺展开。了解更多,到这里。
蚂蚁行军线
.box{
width: 16em;
height: 8em;
border: 1px solid transparent;
background-image:linear-gradient(white,white),
repeating-linear-gradient(-45deg,transparent 0,transparent 12.5%,
black 0,black 25%);
background-size: 1em 1em;
background-clip: padding-box,border-box;
animation:ants 12s linear infinite;
}
@keyframes ants{
to{
background-position:100%;
}
}
动画怎么来的?看下面这个更好理解。
.box{
width: 16em;
height: 8em;
border: 1em solid transparent;
background-image: repeating-linear-gradient(-45deg,transparent 0,transparent 12.5%,
red 0,red 25%,
transparent 0,transparent 37.5%,
blue 0,blue 50%);
background-size: 4em 4em;
background-clip: padding-box,border-box;
animation:ants 12s linear infinite;
}
@keyframes ants{
to{
background-position:100%;
}
}
当然,重点还是要理解background-position,可到这里看看。