HTML + CSS + JS (结构 + 表现 + 交互)
CSS(Cascading Style Sheet)层叠级联样式表:表现(美化网页)
基本入门:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--规范,<style>可以编写css代码,每一个声明最好使用分号结尾
语法:
选择器{
声明1;
声明2;
...
}
-->
<style>
h1{
color:red;
}
</style>
</head>
<body>
<h1>我是标题</h1>
</body>
</html>
最好使用如下规范:
CSS的优势:
- 内容和表现分离
- 网页结构表现统一,可以实现复用
- 样式十分的丰富
- 建议使用独立于HTML的CSS文件
- 利用SEO,容易被搜索引擎记录
CSS的三种导入方式:行内样式、内部样式、外部样式
优先级:就近原则,那种样式离元素更近谁的优先级更高
拓展:外部样式两种写法
- 链接式
<link rel="stylesheet" href="CSS/style.css">
- 导入式:@import是CSS2.1特有的
<!--导入式 --> <style> @import url("CSS/style.css"); </style>
选择器
作用:选择页面上的某一个或者某一类元素
基本选择器
- 标签选择器:选择一类标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> /*标签选择器,会选择页面上所有的这个标签*/ h1{ color: #123131; } p{ font-size: 80px; } </style> </head> <body> <h1>java</h1> <p>hzx</p> </body> </html>
- 类选择器:选择所有class属性一致的标签,跨标签.类名{}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> /*类选择器的格式 .class的名称 好处:可以多个标签归类,同一个class可以复用 */ .hzx{ color: green; } .java{ color: antiquewhite; } </style> </head> <body> <h1 class="hzx">标题1</h1> <h1 class="java">标题2</h1> <h1>标题3</h1> </body> </html>
- ID选择器:全局唯一!#id名{}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> /*id选择器 #id名称{} : id必须保证全局唯一 不能复用 选择器优先级:不遵循就近原则,id选择器>class选择器>标签选择器 */ #hzx{ color: aqua; } .style1{ color: red; } h1{ color: blue; } </style> </head> <body> <h1 id="hzx">标题1</h1> <h1 class="style1">标题2</h1> <h1>标题3</h1> <h1>标题4</h1> <h1>标题5</h1> </body> </html>
选择器优先级:不遵循就近原则,id选择器>class选择器>标签选择器
层次选择器
1、后代选择器:在某个元素后面
/* 后代选择器 */
body p{
background: green;
}
2、子选择器:一代
/* 子选择器 */
body>p{
background: green;
}
3、相邻兄弟选择器:同辈
/* 相邻兄弟选择器 :只有一个,相邻(向下) */
.active + p{
background: green;
}
4、通用选择器
/* 通用选择器:当前选中元素向下的所有兄弟元素 */
.active~p{
background: green;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*p{*/
/* background: green;*/
/*}*/
/*!* 后代选择器 *!*/
/*body p{*/
/* background: green;*/
/*}*/
/*!* 子选择器 *!*/
/*body>p{*/
/* background: green;*/
/*}*/
/*!* 相邻兄弟选择器 :只有一个,相邻(向下) *!*/
/*.active + p{*/
/* background: green;*/
/*}*/
/* 通用选择器:当前选中元素向下的所有兄弟元素 */
.active~p{
background: green;
}
</style>
</head>
<body>
<p>p1</p>
<p class="active">p2</p>
<p>p3</p>
<ul>
<li>
<p>p4</p>
</li>
<li>
<p>p5</p>
</li>
<li>
<p>p6</p>
</li>
</ul>
</body>
</html>
结构伪类选择器
伪类:条件
/*ul的第一个子元素*/
ul li:first-child{
background: wheat;
}
/*ul的最后一个子元素*/
ul li:last-child{
background: aqua;
}
/*选中 p1:定位到父元素,选择当前第一个元素
p:nth-child(2)选择当前P元素的父级元素,选择父级元素的第一个,并且是当前元素才生效
*/
p:nth-child(2){
background: green;
}
/*选中父元素,下的p元素的第二个类型*/
p:nth-of-type(2){
background: yellow;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 避免使用 class id 选择器 -->
<style>
/*ul的第一个子元素*/
ul li:first-child{
background: wheat;
}
/*ul的最后一个子元素*/
ul li:last-child{
background: aqua;
}
/*选中 p1:定位到父元素,选择当前第一个元素
p:nth-child(2)选择当前P元素的父级元素,选择父级元素的第一个,并且是当前元素才生效
*/
p:nth-child(2){
background: green;
}
/*选中父元素,下的p元素的第二个类型*/
p:nth-of-type(2){
background: yellow;
}
</style>
</head>
<body>
<h1>h1</h1>
<p>p1</p>
<p>p2</p>
<p>p3</p>
<ul>
<li>
li1
</li>
<li>
li2
</li>
<li>
li3
</li>
</ul>
</body>
</html>
属性选择器(常用较好)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.demo a{
float: left;
display: block;
height: 50px;
width: 50px;
border-radius: 10px;
background: blue;
text-align: center;
color: gainsboro;
text-decoration: none;
margin-right: 5px;
font: bold 20px/50px Arial;
}
/*属性选择器格式:a[]{}
属性名 = 属性值(正则)
= 绝对等于
*= 通配 包含这个元素
^= 以这个开头
$= 以这个结尾
*/
/*存在id属性的元素 */
a[id]{
background: yellow;
}
a[id=first]{
background: greenyellow;
}
/*class中有links的元素*/
a[class*="links"]{
background: yellow;
}
/*选中href中以HTTP开头的元素*/
a[href^=http]{
background: red;
}
/*选中以pdf结尾*/
a[href$=jpg]{
background: aqua;
}
</style>
</head>
<body>
<p class="demo">
<a href="https://www.baidu.com" class="links item first" id="first">1</a>
<a href="" class="links item active" target="_blank" title="test">2</a>
<a href="images/123.html" class="links item">3</a>
<a href="images/123.png" class="links item">4</a>
<a href="images/123.jpg" class="links item">5</a>
<a href="ac" class="links item">6</a>
<a href="/a.pdf" class="links item">7</a>
<a href="/ad.pdf" class="links item">8</a>
<a href="ad.doc" class="links item">9</a>
<a href="aa.doc" class="links item" last>10</a>
</p>
</body>
</html>
/*属性选择器格式:a[]{}
属性名 = 属性值(正则)
= 绝对等于
*= 通配 包含这个元素
^= 以这个开头
$= 以这个结尾
*/
有很多 这就是正则表达式的通配符
美化网页元素
为什么要美化网页:
- 有效的传递页面信息
- 美化网页,页面漂亮才能吸引用户
- 凸显页面主题
- 提高用户的体验
span标签:重点要突出的字,使用span标签套起来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#title1{
font-size: 50px;
}
</style>
</head>
<body>
欢迎学习<span id="title1">Java</span>
</body>
</html>
字体样式:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
font: 字体的风格
font-family: 字体
font-size: 字体大小
font-weight: 字体的粗细
color: 字体颜色
-->
<style>
body{
font-family: 楷体;
}
h1{
font-size: 50px;
}
</style>
</head>
<body>
<h1>人物介绍</h1>
<p>
hzx
</p>
<p>
zs
</p>
</body>
</html>
文本样式:
1、颜色:color rgb rgba
2、文本对齐的方式:text-align=center
3、首行缩进:text-indent:2em;
4、行高:line-height;单行文字上下居中 line-height = height
5、装饰:text-decoration
6、文本图片水平对齐:verti-align:middle
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--
颜色:
单词
RGB 0~F
RGBA A:0~1 增加透明度
text-align: 排版
text-indent: 首行缩进 2em(两个字母)
line-height: 行高 (行高和块的高度一致 就可以实现上下居中)
text-decoration : 划线
vertical-align: 水平对齐
-->
<style>
h1{
color: #a13d30;
text-align: center;
}
.p1{
text-indent: 2em;
}
.p2{
background: blue;
height: 300px;
line-height: 300px;
}
/*下划线*/
.l1{
text-decoration: underline;
}
/*中划线*/
.l2{
text-decoration: line-through;
}
/*上划线*/
.l3{
text-decoration: overline;
}
/*
水平对齐 需要参照物 a,b
*/
img,span{
vertical-align: middle;
}
</style>
</head>
<body>
<p class="l1">123</p>
<p class="l2">123</p>
<p class="l3">123</p>
<h1>人物介绍</h1>
<p class="p1">
hzx
</p>
<p class="p2">
zs
</p>
<p>
<img src="images/img.png" alt="">
<span>asdsadas</span>
</p>
</body>
</html>
超链接伪类:a,a:hover 常用很重要
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*默认颜色*/
a{
text-decoration: none;
color: black;
}
/*鼠标悬浮颜色 只需要记住这个*/
a:hover{
color: orange;
font-size: 50px;
}
/*鼠标按住未释放*/
a:active{
color: greenyellow;
}
a:visited{
}
/*text-shadow: 阴影颜色 水平偏移 垂直偏移 阴影半径 */
#p1{
text-shadow: #3cc7f5 10px 10px 10px;
}
</style>
</head>
<body>
<a href="">
<img src="images/img.png" alt="">
</a>
<p>
<a href="#">hzx</a>
</p>
<p>
<a href="">zs</a>
</p>
<p id="p1">
666
</p>
</body>
</html>
阴影:
/*text-shadow: 阴影颜色 水平偏移 垂直偏移 阴影半径 */
#p1{
text-shadow: #3cc7f5 10px 10px 10px;
}
列表:
//html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div id="nav">
<h2 class="title">全部商品分类</h2>
<ul>
<li><a href="#">图书</a> <a href="#">音像</a> <a href="#">数字商品</a></li>
<li><a href="#">家用电器</a> <a href="#">手机</a> <a href="#">数码</a></li>
<li><a href="#">电脑</a> <a href="#">办公</a></li>
<li><a href="#">家居</a> <a href="#">家装</a> <a href="#">厨具</a></li><li><a href="#">服饰鞋帽</a> <a href="#">个护化妆</a></li>
<li><a href="#">礼品箱包</a> <a href=".#">钟表</a> <a href="">珠宝</a></li><li><a href="#">食品饮料</a> <a href="#">保健食品</a></li>
<li><a href="">彩票</a> <a href="#">旅行</a> <a href=#"">充值</a> <a href="#">票务</a></li>
</ul>
</div>
</body>
</html>
//css
#nav{
width: 300px;
background: #a0a0a0;
}
.title{
font-size: 18px;
font-weight: bold;
text-indent: 1em;
line-height: 35px;
background: red;
}
/*ul li
list-style: none;去掉圆点
circle;空心圆
decimal;数字
square;正方形
*/
/*ul{*/
/* background: #a0a0a0;*/
/*}*/
ul li{
height: 30px;
list-style: none;
text-indent: 1em;
}
a{
text-decoration: none;
font-size: 14px;
color: #000000;
}
a:hover{
color: orange;
text-decoration: underline;
}
背景:
背景颜色
背景图片:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
width: 1000px;
height: 700px;
border: 1px solid red;
/*默认全部平铺*/
background-image: url("images/img.png");
}
.div1{
background-repeat: repeat-x;
}
.div2{
background-repeat: repeat-y;
}
.div3{
background-repeat: no-repeat;
}
</style>
</head>
<body>
<div class="div1"></div>
<div class="div2"></div>
<div class="div3"></div>
</body>
</html>
渐变:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!-- 径向渐变,圆形渐变 -->
<style>
body{
background-image: linear-gradient(19deg,#21D4FD 0%,#B721FF 100%);
}
</style>
</head>
<body>
12321a
</body>
</html>
盒子模型
什么是盒子模型:
margin:外边距
padding:内边距
border:边框
边框:
1、边框的粗细
2、边框的样式
3、边框的颜色
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*body总有一个默认的外边距 常见操作*/
body{
margin: 0;
padding: 0;
}
/*
border: 粗细 样式 颜色
*/
#app{
width: 300px;
border: 1px solid red;
}
h2{
font-size: 16px;
background-color: #3cc7f5;
line-height: 30px;
color: white;
}
form{
background: forestgreen;
}
div:nth-of-type(1) input{
border: 3px solid black;
}
div:nth-of-type(2) input{
border: 3px dashed black;
}
div:nth-of-type(1) input{
border: 3px dashed darkblue;
}
</style>
</head>
<body>
<div id="app">
<h2>会员登陆</h2>
<form action="#">
<div>
<span>姓名:</span>
<input type="text">
</div>
<div>
<span>密码:</span>
<input type="text">
</div>
<div>
<span>邮箱:</span>
<input type="text">
</div>
</form>
</div>
</body>
</html>
内外边距:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*外边距妙用:居中元素
margin: 0 auto;
*/
/*
顺时针旋转
margin:0 上下左右都是0
margin:0 1px 上下是0左右是1px
margin:0 1px 2px 3px 上是0 右是1px 下是2px 左是3px
*/
#app{
width: 300px;
border: 1px solid red;
margin: 0 auto;
}
h2{
font-size: 16px;
background-color: #3cc7f5;
line-height: 30px;
color: white;
margin: 0;
}
form{
background: forestgreen;
}
input{
border: 1px solid black;
}
div:nth-of-type(1){
padding: 10px 2px;
}
</style>
</head>
<body>
<div id="app">
<h2>会员登陆</h2>
<form action="#">
<div>
<span>姓名:</span>
<input type="text">
</div>
<div>
<span>密码:</span>
<input type="text">
</div>
<div>
<span>邮箱:</span>
<input type="text">
</div>
</form>
</div>
</body>
</html>
盒子计算模型:margin+border+padding+内容宽度
圆角边框:
4个角
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*
左上 右上 右下 左下 顺时针方向
*/
/*
圆圈: 圆角 = 半径
*/
div{
width: 100px;
height: 100px;
border: 10px solid red;
border-radius: 50px;
}
</style>
</head>
<body>
<div>
</div>
</body>
</html>
盒子阴影:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*margin: 0 auto;居中
要求: 块元素,块元素有固定的高度
*/
div{
width: 100px;
height: 100px;
}
img{
width: 100px;
height: 100px;
border-radius: 50px;
box-shadow:10px 10px 100px yellow;
}
</style>
</head>
<body>
<div style="margin: 0 auto">
<img src="images/img.png" alt="">
</div>
</body>
</html>
浮动
标准文档流
块级元素:独占一行
行内元素:不独占一行
行内元素可以被包含在块级元素中,反之则不可以
display:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/*display
block 块元素
inline 行内元素
inline-block 即是行内元素也是块元素 是块元素,但可以内联在一行
none 消失
*/
div{
width: 100px;
height: 100px;
border: 1px solid red;
display: inline-block;
}
span{
width: 100px;
height: 100px;
border: 1px solid red;
display: inline-block;
}
</style>
</head>
<body>
<div>div元素块</div>
<span>span行内元素</span>
</body>
</html>
这也是实现行内元素排序的方式,但是我们很多情况都是用float
浮动:
float:left 左浮动
right 右浮动
clear:both 清除浮动
父级边框塌陷问题:
clear:
clear:left 左侧不允许浮动
right 右侧不允许浮动
both 两侧不允许浮动
解决方案:
- 增加父级元素的高度
#father{ border:1px solid #000; height: 800px; }
- 增加一个空的div标签,清除浮动
<div class="clear"></div> .clear{ clear:both; margin:0; padding:0; }
- overflow
在父级元素中增加一个overflow:hidden;
- 父类添加一个伪类:after
#content:after{ fater:''; display: block; clear: both; }
小结:
- 浮动元素后面增加空div简单,代码中尽量避免空div
- 设置父级元素的高度简单,元素假设有了固定高度,就会被限制
- overflow 简单 下拉的一些场景避免使用
- 在父类添加伪类:after推荐使用 写法稍微复杂 但是没有副作用
对比
- display 方向不可以控制
- float 浮动起来的话脱离标准文档流,所以要解决父级边框塌陷的问题
定位:
相对定位:position:relative;
相对于原来的位置,进行指定的偏移,相对定位的话,它仍然在标准文档流中,原来的位置会被保留
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--相对定位
相对于自己原来的位置进行偏移
-->
<style>
body{
padding: 20px;
}
div{
margin: 10px;
padding: 5px;
font-size: 12px;
line-height: 25px;
}
#father{
border: 1px solid #666;
}
#first{
background-color: #a13d30;
border: 1px dashed #f85f2c;
position: relative;/*相对定位:上下左右*/
top: -20px;
left: 20px;
}
#second{
background-color: #44b93a;
border: 1px dashed #13420f;
}
#third{
background-color: #3cc7f5;
border: 1px dashed #1e0f4b;
position: relative;
bottom: -10px;
right: 20px;
}
</style>
</head>
<body>
<div id="father">
<div id="first">第一个盒子</div>
<div id="second">第二个盒子</div>
<div id="third">第三个盒子</div>
</div>
</body>
</html>
绝对定位:
定位:基于XXX定位,上下左右
1、父级元素没有定位的情况下,相对于浏览器定位
2、假设父级元素存在定位,相对于父级元素进行偏移
3、在父级元素范围内移动
相对于父级或者浏览器的位置,进行指定的偏移,绝对行为的话,它不在在标准文档流中,原来的位置不会被保留
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
margin: 10px;
padding: 5px;
font-size: 12px;
line-height: 25px;
}
#father{
border: 1px solid #666;
position: relative;
}
#first{
background-color: #a13d30;
border: 1px dashed #f85f2c;
}
#second{
background-color: #44b93a;
border: 1px dashed #13420f;
position: absolute;
right: 30px;
top: -10px;
}
#third{
background-color: #3cc7f5;
border: 1px dashed #1e0f4b;
}
</style>
</head>
<body>
<div id="father">
<div id="first">第一个盒子</div>
<div id="second">第二个盒子</div>
<div id="third">第三个盒子</div>
</div>
</body>
</html>
固定定位:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
height: 1000px;
}
div:nth-of-type(1){/*绝对定位:相对于浏览器*/
width: 100px;
height: 100px;
background: red;
position: absolute;
right: 0;
bottom: 0;
}
div:nth-of-type(2){/*固定定位fixed*/
width: 50px;
height: 50px;
background: yellow;
position: fixed;
right: 0;
bottom: 0;
}
</style>
</head>
<body>
<div id="first">第一个盒子</div>
<div id="second">第二个盒子</div>
</body>
</html>
z-index:图层 默认是0 越大越先显示
#content{
width: 380px;
padding: 0;
margin: 0;
overflow: hidden;
font-size: 12px;
line-height: 25px;
border: 1px solid black;
}
ul,li{
padding: 0;
margin: 0;
list-style: none;
}
/*父级元素相对定位*/
#content ul{
position: relative;
}
.tipText,.tipBg{
position: absolute;
width: 380px;
height: 25px;
top: 90px;
}
.tipText{
color: white;
z-index: 0;
}
.tipBg{
background: #000;
/*opacity: 0.5; /*背景透明度*/
filter: alpha(opacity=50);/*IE8更早才支持 背景透明度*/
}
-----------------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div id="content">
<ul>
<li><img src="images/img.png" alt=""></li>
<li class="tipText">学习王者,看大仙</li>
<li class="tipBg"></li>
<li>时间:2099-01-01</li>
<li>地点:虎牙618</li>
</ul>
</div>
</body>
</html>
背景透明度:
opacity: 0.5; /*背景透明度*/
filter: alpha(opacity=50);/*IE8更早才支持 背景透明度*/
学Java关注狂神说Java