前端之CSS
CSS简介
CSS(层叠样式表:Cascading Style Sheets),就是给html语言写的前端加样式的,用于美化前端页面。
注释
同前,学习一种语言其注释很重要!
css文件注释格式为/*单行注释*/
/*
多行注释1
多行注释2
多行注释3
*/
语法结构
选择器 {
属性1:值1;
属性2:值2;
属性3:值3;
}
css的美化方式是选择某个标签后针对要美化的属性进行赋值,并以分号结束!
常用属性
常用属性有颜色color、背景色background-color、高度height、宽度width、字体大小font-size等。
前面先涉及这些,后面有深入的更多
引入方式
-
head内书写
<style> h1 {color:red;} </style>
-
link引入外部css文件
<link rel="stylesheet" href="cssStudy.css">
-
直接在标签内书写
<h1 style="color:red;">CSS学习</h1>
ps:一般写项目时采用第二种,不建议采用第三种(因为不好检查),在学习时采用第一种的方式比较方便(以下示例均采用第一种)
选择器
基本选择器
-
id选择器
用“#+id名”进行选择#ddd {color:blue;} /*对id=ddd的标签内容的颜色变为蓝色*/
-
类选择器
用“.+类名”进行选择.ccc {color:orange;} /*对'class=ccc'的标签内容的颜色变为橙色*/
-
标签选择器
直接选择标签名p {background-color:red;} /*对所有p标签将其背景色改为红色*/
-
通用选择器
用*表示选中所有标签* {color:blue;} /*将html页面的所有标签全部变为蓝色*/
ps:一般不使用标签选择器和通用选择器,因为范围太大,而一个页面不可能那么简单。
组合选择器
-
后代选择器
用“空格”,表示选中父标签里任意后代(即嵌一层套或多层套)<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> div span {color:red;} </style> </head> <body> <div> <p> <span>孙子层</span> </p> <span>儿子层</span> </div> </body> </html>
结果为“儿子层”和“孙子层“都变为了蓝色
-
儿子选择器
用“>”选择,只选中父标签的儿子层
同后代选择器的例子,若改为div>span {color:red;}
则只有“儿子层”变为红色 -
邻近选择器
用“+”号选择,表示选择标签的紧邻的下一个同级标签<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>css blog</title> <style> div+p {color:red;} </style> </head> <body> <div>host</div> <p>邻居</p> <p> <span>弟弟</span> </p> </body> </html>
结果为“邻居”变为红色
-
弟弟选择器
用“~”选择,表示选择标签所有下面的同级标签
同邻居选择器例子,若为div~p {color:greenyellow;}
则“邻居”和“弟弟”都变为荧光色
属性选择器
属性选择器是用[]来选择的
- [username]:表示选择有属性username的标签
- [username=‘bob’]:表示选择有属性username且属性值等于bob的标签
- input[username=‘bob’]:表示选择有属性username且属性值为’bob’的input标签
/*找到所有title属性以hello开头的元素*/
[title^="hello"] {
color: red;
}
/*找到所有title属性以hello结尾的元素*/
[title$="hello"] {
color: yellow;
}
/*找到所有title属性中包含(字符串包含)hello的元素*/
[title*="hello"] {
color: red;
}
/*找到所有title属性(有多个值或值以空格分割)中有一个值为hello的元素:*/
[title~="hello"] {
color: green;
}
伪类选择器
常用于a标签和input标签,比如a标签(链接标签):当鼠标放上去是不是会换颜色啊
-
link:初始态,未点击时的状态
-
hover:鼠标悬浮在上面的状态
-
active:鼠标点中不放的状态
-
visited:鼠标点击后的状态
<style> a:link{color:darkgrey;} a:hover{color:black;} a:active{color:red;} a:visited{color:green;} </style> <a href="https://www.jd.com"click me</a>
伪元素选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>css blog</title> <style> /*设置首字大头*/ p:first-letter {font-size:32px;} /*在文本开头添加内容 但不能选中复制*/ p:before {content:'python';color:red;} /*在文本末尾添加内容 但不能选中复制*/ p:after {content:'hahaha';color:blue;} </style> </head> <body> <p>人生苦短,我用Python</p> </body> </html>
选择器优先级
这里只针对id选择器、类选择器、行内选择器、标签选择器四种选择器进行比较。
- 选择器相同 但顺序不同
“就近原则”即离标签越近就用它(越向下的css代码) - 选择器不同(匹配精度越高越有效)
行内选择器>id选择器>类选择器>标签选择器
基本属性
字体属性
- font-size:字体大小
- font-family:字体格式,如Times New Roman
- font-weight:bolder为加粗,lighter为细字体,inherit为继承父标签字体粗细
- color:字体颜色,有四种书写方法
- 颜色英文,如red,blue
- 颜色编号,如#4e4e4e,#eeeeee等
- rgb(0,0,0) 三基色,数字范围为0~255
- rgba(0,0,0,0.5) 第四个数字为透明度,范围0~1
透明度
与rgba()不同,opacity同时改变字体和颜色的透明度
如opacity:0.5;
文字属性
- text-align:center表示居中,right右对齐,left左对齐,justify两端对齐
- text-indent:用于缩近(设置为字体font-size的两倍—指缩近两格)
- text-decoration:overline顶头线,underline下划线,line-through删除线,none表示无格式(用来去除a标签的下划线)
边框
-
border-width:边框厚度,单位px
-
border-style:边框样式,solid为实现,dotted为圆点,dashed为虚线
除了可以统一设置边框外还可以单独为某一个边框设置样式,如下所示 #d1 { border-top-style:dotted; border-top-color: red; border-right-style:solid; border-bottom-style:dotted; border-left-style:none; }
-
border-color:边框颜色
以上三个支持简写:
border:3px dashed blue;
也可单独对上下左右加边框,如border-top:2px solid red;
-
border-radius:50%;
——画圆(在height=width是为圆,不等时为椭圆)
display属性
- display:none;隐藏标签内容且占用位置也没了
- display:inline;将标签转为行内标签的特点
- display:block;将标签转为块级标签的特点
- display:inline-block;同时具有块级和行内标签的特点 常用来写一行多个标签内容
盒子模型
可以将前端页面看成是装有物品的盒子,盒子与盒子之间有距离(margin),盒子本身有厚度(border),盒子里的物品距离盒子有距离(padding),物品有内容(content)
盒子模型
-
margin:标签与标签之间的距离(可以通过margin-top,margin-bottom,margin-left,margin-right单独设置标签之间上下左右之间的距离)
有以下书写方式:- margin:0;表示上下左右都是0px;
- margin:10px 20px;上下为10 左右为20
- margin:10px 20px 30px;上为10 左右为20 下为30
- margin:10px 20px 30px 40px;上为10 右为20 下为30 左为40(顺时针转)
- margin:0 auto;上下距为0 左右自动居中
ps: body在每个浏览器都自带margin值,应提前设置为零
-
padding(同样有上下左右之分):表示标签内部内容到标签的距离
!书写规律同margin一样
盒子阴影
类似给边框加上阴影显示。格式为:如box-shadow:5px 5px 5px rgba(0,0,0,0.8);
浮动
浮动
设置标签浮在页面之上脱离页面,脱离了文档流
如float:right;/float:left;
但会造成父标签塌陷的问题:即已被子标签撑起的父标签,在子标签浮动出页面之后脱离了父标签的怀抱,父标签中就没有内容充起,就会蔫儿了
解决浮动的影响
- 另加内容充起父标签
- clear属性如
clear:left;
消除左边的浮动 - 通用公式:
.clearfix { content:''; display:block; clear:both; } /*只要哪个标签需要清除浮动的影响,就给它的类属性加一个clearfix值(class='clearfix')*/
溢出
当标签的内容大于标签的大小时就会造成内容溢出到标签外的现象
默认是溢出内容可见的即overflow:visible;
overflow:hidden;
溢出内容不显示- overflow:scroll;右侧加上下滚动条查看
- overflow:auto;自动 依据内容设置上下/水平滚动条
定位
-
静态(position:static;)默认标签都是静态的 即不可改变位置
-
相对定位(position:relative;):相对于自己原来标签位置移动
ps:加了relative的标签不管有没有定位,标签性质都变为定位过了
-
绝对定位(
position:absolute;
):相对于已经定位过的父标签进行移动(若没有父标签则以body为参照) -
固定定位(
position:fixed;
):相对于浏览器窗口做定位移动 eg:“回到顶部”
脱离文档流
标签是否脱离文档流指标签原来占用的位置是否还在
- 不脱离文档流:相对定位
- 脱离文档流:浮动 固定定位 绝对定位
z-index模态框
如百度的登录界面:将页面分为三层 底层 中间黑层 最顶层
指z轴离用户的距离相对大小 用z-index大小(任意数字)来区分 越大表示越在上层
#ddd {
z-index: 999; <!-- 数值大的在上,浮动元素不能使用z-index,默认z-index值为0 -->
}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style> body{margin:0px} #cover {background-color:rgba(0,0,0,0.5);top:0;bottom:0; right:0;left:0;position:fixed; z-index:99;} #modal {background-color:white;position:fixed; left:50%;top:50%;width:400px;height:200px; margin-left:-200px;margin-top:-100px; z-index:100;} </style> </head> <body> <div>这是最底层</div> <div id="cover"></div> <div id="modal"> <h1>登录界面</h1> <p>username:<input></p> <p>password:<input></p> <button>点我点我~</button> </div> </body> </html>