CSS总结和实战
一、css的简介:
1、css的定义:层叠样式表。属性和属性值用冒号分隔开,以分号结尾。
2、css的引入方式:
二、选择器
基本选择器:
1、通用元素选择器:
- 表示应用到所有的标签。
*{margin: 0; padding: 0;}
2、标签选择器
匹配所有使用div 标签的元素(可以匹配所有标签)
div {color: yellow}
3、类选择器
匹配所有class属性中包含Info的元素。
语法:.类名{样式} (类名不能以数字开头,类名要区分大小写)
.yanse{color: yellow}
<div class="yanse" >我的div</div>
4、id选择器
使用id属性来调用样式,在一个网页中id的值都是唯一的(是W3C规范而不是规则,所以不会报错)。
语法:#ID名{样式} (ID名不能以数字开头)
#MyColor{color: yellow}
<span id="MyColor">H3</span>
5、组合选择器:
5.1、多元素组合选择器
同时匹配两个或多个标签,用逗号隔开
p, a, div{color: yellow;}
<p>段落</p>
<a>link</a>
<div>你好啊</div>
5.2、后代元素选择器
匹配所有div标签里嵌套的p标签,之间用空格分隔。
div p {color: yellow;}
<div>
<p>ppppp</p>
<div>
<p>pppppp</p>
</div>
</div>
5.3、子代元素选择器
匹配所有div标签里嵌套的子p标签,之间用>分割
div > p {color: yellow;}
<div>
<p>div</p>
<p>div</p>
</div>
5.4、毗邻元素选择器
匹配所有紧随div标签之后的同级标签,之间用+分隔(只能匹配一个)。
div + p {color:yellow;}
<div>div</div>
<p>ppp</p>
6、伪类选择器:
6.1、link, hover, active, visited
a: link (未访问的链接状态),用于定义常规的链接状态。
a: hover (鼠标放在链接上的状态),用于产生视觉效果。
a: active (在链接上按下鼠标时的状态)。
a: visited (已访问过的链接状态),可以看出已经访问过的链接。
6.2、before, after
p:before 在每个
元素的内容之前插入内容;
p:after 在每个
元素的内容之后插入内容。
常用的属性:
7.1、颜色属性:
color:
HEX(十六进制色:color: #FFF000 --> 缩写:#FF0)
RGB (红绿蓝,使用方式:color:rgb(255,255,0)或者color:rgb(100%,100%,0%))
RGBA(红绿蓝透明度,A是透明度在0~1之间取值。使用方式:color:rgba(255,255,0,0.5))
HSL (CSS3有效,H表示饱和度,L表示亮度,使用方式:color:hsl(360,100%,50%))
HSLA (和HSL相似,A表示Alpha透明度,取值0~1之间)
取色器网址1:http://www.jiniannet.com/Page/allcolor
取色器网址2:https://c.runoob.com/front-end/5449
7.2 transpatent
全透明,使用方式:color:transparent
7.3 opacity
元素的透明度,语法:opacity:0.5;
属性值在0.0到1.0范围内,0表示透明,1表示不透明。
filter滤镜属性(只适用于早期的IE浏览器,语法:filter:alpha(opacity:20)😉
三、页面布局:
1、边框
border-style: 边框样式
solid 默认,实线
double 双线
dotted 点状线条
dashed 虚线
border-color: 边框颜色
border-width: 边框宽度
border-radius: 圆角
1个参数:四个角都应用
2个参数:第一个参数应用于 左上、右下;第二个参数应用于 左下、右上
3个参数:第一个参数应用于 左上;第二个参数应用于 左下、右上;第三个参数应用于右下
4个参数:左上、右上、右下、左下(顺时针)
border:简写
border: 2px yellow solid;
box-shadow: 边框阴影
box-shadow: -1px -1px 0 1px #0C2E6D, 1px -1px 0 1px #0C2E6D, -2px -2px 0 1.5px white, 2px -2px 0 1.5px white ;
第一个参数是左右位置
第二个参数是上下位置
第三个参数是虚化效果
第四个参数是外边框扩展宽度
第五个参数是颜色
盒子模型:
padding:用于控制内容与边框之间的距离;
margin:用于控制元素与元素之间的距离;
padding、margin | 表示上右下左都应用 |
---|---|
padding-top、margin-top | 上 |
padding-right、margin-right | 右 |
padding-bottom、margin-bottom | 下 |
padding-left、margin-left | 左 |
一个参数,应用于四边。
两个参数,第一个用于上、下,第二个用于左、右
三个参数,第一个用于上,第二个用于左、右,第三个用于下。
四个参数,分别应用于上、右、下、左。
渐变色填充:
background: linear-gradient(0deg, #00FF80, yellow, red);
多边阴影:
box-shadow: -1px -1px 0 1px #0C2E6D, 1px -1px 0 1px #0C2E6D, -2px -2px 0 1.5px white, 2px -2px 0 1.5px white ;
CSS3实现32种基本图形:https://blog.csdn.net/laokdidiao/article/details/51189476
四、实战:
设计图
css效果图
代码如下:
手机信号
<div>
<div class="signal-strengh" >
<span class="signalProgress1" [style.background]="signal > 0 ? 'white' : ''"></span>
<span class="signalProgress2" [style.background]="signal >= 6 ? 'white' : ''"></span>
<span class="signalProgress3" [style.background]="signal >= 12 ? 'white' : ''"></span>
<span class="signalProgress4" [style.background]="signal >= 18 ? 'white' : ''"></span>
<span class="signalProgress5" [style.background]="signal >= 24 ? 'white' : ''"></span>
<span class="signalProgress6" [style.background]="signal >= 30 ? 'white' : ''"></span>
</div>
<div class="inf-text-signal">{{signal}}</div>
<div class="inf-text-signal">信号强度</div>
</div>
//信号强度显示
.signal-strengh{
position: relative;
width: 80px;
height: 80px;
//border: 2px solid midnightblue;
background: black;
border-radius: 80px;
.signalProgress1{
position: absolute;
margin-left: 18px;
margin-top: 48px;
display: block;
width: 3px;
height: 5px;
background: gray;
border-radius: 2px;
}
.signalProgress2{
position: absolute;
margin-left: 26px;
margin-top: 43px;
display: block;
width: 3px;
height: 10px;
background: gray;
border-radius: 2px;
}
.signalProgress3{
position: absolute;
margin-left: 34px;
margin-top: 38px;
display: block;
width: 3px;
height: 15px;
background: gray;
border-radius: 2px;
}
.signalProgress4{
position: absolute;
margin-left: 42px;
margin-top: 33px;
display: block;
width: 3px;
height: 20px;
background: gray;
border-radius: 2px;
}
.signalProgress5{
position: absolute;
margin-left: 50px;
margin-top: 28px;
display: block;
width: 3px;
height: 25px;
background: gray;
border-radius: 2px;
}
.signalProgress6{
position: absolute;
margin-left: 58px;
margin-top: 23px;
display: block;
width: 3px;
height: 30px;
background: gray;
border-radius: 2px;
}
}
.left-style{
float: left;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
//text-align: center;
align-items: center;
}
.inf-text-signal{
width: 80px;
text-align: center;
font-size: 18px;
}
北斗信号
<div>
<div class="signal-strengh">
<div class="signal-1">
<app-separate-signal [signalNumber]="signalGroupNumber.length > 0 ? signalGroupNumber[0] : 0"></app-separate-signal>
</div>
<div class="signal-2">
<app-separate-signal [signalNumber]="signalGroupNumber.length > 0 ? signalGroupNumber[1] : 0"></app-separate-signal>
</div>
<div class="signal-3">
<app-separate-signal [signalNumber]="signalGroupNumber.length > 0 ? signalGroupNumber[2] : 0"></app-separate-signal>
</div>
<div class="signal-4">
<app-separate-signal [signalNumber]="signalGroupNumber.length > 0 ? signalGroupNumber[3] : 0"></app-separate-signal>
</div>
<div class="signal-5">
<app-separate-signal [signalNumber]="signalGroupNumber.length > 0 ? signalGroupNumber[4] : 0"></app-separate-signal>
</div>
<div class="signal-6">
<app-separate-signal [signalNumber]="signalGroupNumber.length > 0 ? signalGroupNumber[5] : 0"></app-separate-signal>
</div>
</div>
<div class="inf-text-signal">5</div>
<div class="inf-text-signal">北斗信号</div>
</div>
app-signal-group{
.signal-strengh {
position: relative;
width: 80px;
height: 80px;
background: black;
border-radius: 80px;
}
.signal-1{
position: absolute;
margin-top: 30px;
margin-left: 15px;
width: 4px;
}
.signal-2{
position: absolute;
margin-top: 30px;
margin-left: 24px;
width: 4px;
}
.signal-3{
position: absolute;
margin-top: 30px;
margin-left: 33px;
width: 4px;
}
.signal-4{
position: absolute;
margin-top: 30px;
margin-left: 42px;
width: 4px;
}
.signal-5{
position: absolute;
margin-top: 30px;
margin-left: 51px;
width: 4px;
}
.signal-6{
position: absolute;
margin-top: 30px;
margin-left: 60px;
width: 4px;
}
.text-signal{
width: 80px;
text-align: center;
font-size: 10px;
}
.inf-text-signal{
width: 80px;
text-align: center;
font-size: 18px;
}
}
<div id="f_1" [style.background]="signalNumber >= 24 ? 'ghostwhite' : ''"></div>
<div id="f_2" [style.background]="signalNumber >= 16 ? 'ghostwhite' : ''"></div>
<div id="f_3" [style.background]="signalNumber >= 8 ? 'ghostwhite' : ''"></div>
<div id="f_4" [style.background]="signalNumber > 0 ? 'ghostwhite' : ''"></div>
app-separate-signal{
#f_1{
width: 4px;
height: 4px;
background: rgba(255, 255, 255, .4);;
}
#f_2{
margin-top: 3px;
width: 4px;
height: 4px;
background: rgba(255, 255, 255, .4);;
}
#f_3{
margin-top: 3px;
width: 4px;
height: 4px;
background: rgba(255, 255, 255, .4);;
}
#f_4{
margin-top: 3px;
width: 4px;
height: 4px;
background: rgba(255, 255, 255, .4);;
}
}
温度计
<div>
<div class="temperature">
<div class="lefts-style">
<div class="background-box1">
<div class="background-box2">
<div *ngIf="temperature >= 70">
<div class="background-box3" [style.height]="temperature * 24 / 100 + 'px'"></div >
</div>
<div *ngIf="temperature >= 40 && temperature < 70">
<div class="background-box3" [style.height]="temperature * 24 / 100 + 'px'" [style.background]="'linear-gradient(0deg, #00FF80, yellow)'"></div >
</div>
<div *ngIf="temperature < 40 && temperature >= 0">
<div class="background-box3" [style.height]="temperature * 24 / 100 + 'px'" [style.background]="'#00FF80'"></div >
</div>
</div>
</div>
<div class="circle"></div>
</div>
</div>
<div class="temperature-style">{{temperature}}℃</div>
<div class="temperature-style">温度</div>
</div>
.temperature{
position: relative;
width: 80px;
height: 80px;
background: black;
border-radius: 80px;
.lefts-style{
position: absolute;
margin-top: 20px;
margin-left: 34px;
}
}
.temperature-style{
width: 80px;
text-align: center;
font-size: 18px;
}
.background-box1{
width: 11px;
height: 27px;
margin-left: 0.5px;
background: gainsboro;
position: relative;
border-radius: 6px 6px 0 0;
z-index: 1;
}
.background-box2{
width: 8px;
height: 26px;
left: 1.5px;
bottom: 0;
background: #0C2E6D;
position: absolute;
border-radius: 6px 6px 0 0;
}
.background-box3{
width: 4px;
height: 10.3px;
position: absolute;
left: 2px;
bottom: 0;
background: linear-gradient(0deg, #00FF80, yellow, red);
}
.circle{
width: 12px;
height: 12px;
border-radius: 100%;
background: #00FF80;
box-shadow: 0 0 0 2px #0C2E6D, 0 0 0 3.5px gainsboro;
z-index: 0;
}
湿度计
<div>
<div class="water">
<div class="waterBody">
<div *ngIf="i > 0 && i <= 25">
<div class="container1"></div>
</div>
<div *ngIf="i > 25 && i <= 50">
<div class="container2"></div>
</div>
<div *ngIf="i > 50 && i <= 75">
<div class="container3"></div>
</div>
<div *ngIf="i > 75 && i <= 100">
<div class="container4"></div>
</div>
<div class="littleWater"></div>
</div>
</div>
<div class="inf-text-water">{{i}}%</div>
<div class="inf-text-water">相对湿度</div>
</div>
//水滴
.water{
position: relative;
width: 80px;
height: 80px;
//border: 2px solid midnightblue;
background: black;
border-radius: 80px;
}
.waterBody{
position: absolute;
margin-top: 27px;
margin-left: 23px;
width: 30px;
height: 30px;
border:2px solid gainsboro;
border-radius: 80% 0 55% 50% / 55% 0 80% 50%;
background-color: transparent;
transform: rotate(-45deg);
}
.littleWater{
margin-top: 5px;
margin-left: 30px;
width: 10px;
height: 10px;
border:2px solid gainsboro;
border-radius: 80% 0 55% 50% / 55% 0 80% 50%;
background-color: transparent;
}
.inf-text-water{
width: 80px;
text-align: center;
font-size: 18px;
}
.container4 {
width: 20px;
height: 18px;
background: red;
border-radius: 100% 100% 100% 100% / 100% 100% 100% 100%;
transform: rotate(45deg);
position: fixed;
bottom: 2px;
left: 1px;
display: flex;
justify-content: center;
align-items: center;
}
.container4:after {
content: '';
width: 18px;
height: 8px;
background: black;
border-radius: 100% 100% 100% 100% / 100% 100% 100% 100%;
position: fixed;
bottom: 12px;
display: flex;
justify-content: center;
align-items: center;
}
.container3 {
width: 18px;
height: 16px;
background: #00FF80;
border-radius: 100% 100% 100% 100% / 100% 100% 100% 100%;
transform: rotate(45deg);
position: fixed;
bottom: 3px;
left: 2px;
display: flex;
justify-content: center;
align-items: center;
}
.container3:after {
content: '';
width: 16px;
height: 10px;
background: black;
border-radius: 100% 100% 100% 100% / 100% 100% 100% 100%;
position: fixed;
bottom: 10px;
display: flex;
justify-content: center;
align-items: center;
}
.container2 {
width: 18px;
height: 14px;
background: #00FF80;
border-radius: 100% 100% 100% 100% / 100% 100% 100% 100%;
transform: rotate(45deg);
position: fixed;
bottom: 3px;
left: 1px;
display: flex;
justify-content: center;
align-items: center;
}
.container2:after {
content: '';
width: 16px;
height: 9px;
background: black;
border-radius: 100% 100% 100% 100% / 100% 100% 100% 100%;
position: fixed;
bottom: 9px;
display: flex;
justify-content: center;
align-items: center;
}
.container1 {
width: 16px;
height: 12px;
background: #00FF80;
border-radius: 100% 100% 100% 100% / 100% 100% 100% 100%;
transform: rotate(45deg);
position: fixed;
bottom: 3px;
left: 1px;
display: flex;
justify-content: center;
align-items: center;
}
.container1:after {
content: '';
width: 16px;
height: 10px;
background: black;
border-radius: 100% 100% 100% 100% / 100% 100% 100% 100%;
position: fixed;
bottom: 8px;
display: flex;
justify-content: center;
align-items: center;
}
电池电量
<div>
<div class="battery-icon" >
<div class="battery-icon-body"></div>
<div class="batteryIconHead"></div>
<div class="batteryIconProgress" [style.width]=" battery * 32 / 100 + 'px'" [style.background]=" battery<= 10 ? 'red': ''"></div>
<div class="batteryIconProgress" [style.width]=" battery * 32 / 100 + 'px'" [style.background]=" battery> 10 && battery < 20 ? '#ffd800': ''"></div>
<div class="batteryIconProgress" [style.width]=" battery * 32 / 100 + 'px'" [style.background]=" battery> 20 ? '#00FF80': ''"></div>
</div>
<div class="battery-style">{{battery}}%</div>
<div class="battery-style">电池电量</div>
</div>
//电池电量显示
.battery-icon{
position: relative;
width: 80px;
height: 80px;
//border: 2px solid gray;
background: black;
border-radius: 80px;
}
.battery-icon-body{
position: absolute;
left: 20px;
top: 32px;
display: block;
width: 40px;
height: 18px;
border: 2px solid gainsboro;
border-radius: 5px;
}
.batteryIconHead{
float: right;
position: absolute;
height: 10px;
width: 4px;
//border: 2px solid gainsboro;
background: gainsboro;
border-radius: 2px;
top: 36px;
left: 61px;
}
.batteryIconProgress{
position: absolute;
display: block;
background: transparent;
height: 10px;
top: 36px;
left: 24px;
}
.left-style{
float: left;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
//text-align: center;
align-items: center;
}
.battery-style{
width: 80px;
text-align: center;
font-size: 18px;
}
连接次数
<div>
<div class="icon-body">
<div *ngIf="count > 0" class="icon-style">
<embed src="assets/images/share/connect.svg"/>
</div>
<div *ngIf="count <= 0" class="icon-style">
<embed src="assets/images/share/noconnect.svg"/>
</div>
</div>
<div class="label-style">{{count}}</div>
<div class="label-style">日连接数</div>
</div>
app-link-icon{
.icon-body{
width: 80px;
height: 80px;
//border: 2px solid midnightblue;
background: black;
border-radius: 80px;
}
}
.icon-style{
float: left;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.label-style{
width: 80px;
text-align: center;
font-size: 18px;
}
连接次数
<div>
<div class="icon-body">
<div *ngIf="count > 0" class="icon-style">
<embed src="assets/images/share/connect.svg"/>
</div>
<div *ngIf="count <= 0" class="icon-style">
<embed src="assets/images/share/noconnect.svg"/>
</div>
</div>
<div class="label-style">{{count}}</div>
<div class="label-style">日连接数</div>
</div>
app-link-icon{
.icon-body{
width: 80px;
height: 80px;
//border: 2px solid midnightblue;
background: black;
border-radius: 80px;
}
}
.icon-style{
float: left;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.label-style{
width: 80px;
text-align: center;
font-size: 18px;
}