CSS
盒子模型
盒模型本质上是一个盒子,封装周围的HTML元素,它包括:margin、border、padding、content(width、height)
盒子模型分两种:标准盒子模型、怪异盒子模型。
标准盒子模型
# 模型成员
margin、border、padding、content
# content不包含其他成员
怪异盒子模型(IE盒子模型)
# 模型成员
margin、border、padding、content
# content不包含(设置的宽高不会被border和padding所影响)
border、padding
改变元素的盒子模型类型
标准盒子模型:box-sizing:content-box;
怪异盒子模型:box-sizing:border-box;
盒子模型演示
<!DOCTYPE html>
<html>
<head>
<title>盒子模型演示</title>
<style type="text/css">
.content{
width: 100px;
height: 100px;
background: red;
color: #fff;
padding: 10px;
}
#tim{
box-sizing: border-box;
}
</style>
</head>
<body>
<div class="content" id="tim">怪异盒子模型</div>
<hr/>
<div class="content" id="xiaod">标准盒子模型</div>
</body>
</html>
css选择器的权重计算
谁优先级高用谁的样式
第一优先级:无条件优先的属性只需要在属性后面使用!important。它会覆盖页面内任何位置定义的元素样式。
第二优先级:在html中给元素标签加style,即内联样式。该方法会造成css难以管理,尽量少用。
第三优先级:由一个或多个id选择器来定义。例如,#id{margin:0;}会覆盖.classname{margin:3px}
第四优先级:由一个或多个类选择器、属性选择器、伪类选择器定义。如.classname{margin:3px}会覆盖div{margin:6px;}
第五优先级:由一个或多个类型选择器定义。如div{marigin:6px;}覆盖*{margin:10px;}
第六优先级:通配选择器,如*{marigin:6px;}
权重计算值分级
如果遇到样式冲突了,你想设置的样式不起作用时可以利用上述知识提高优先级,增加其权重。
第一等级:代表内联样式,如style="",权值为 1000
第二等级:代表id选择器,如#content,权值为100
第三等级:代表类,伪类和属性选择器,如.content,权值为10
第四等级:代表标签选择器和伪元素选择器,如div p,权值为1
选择器权重演示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>样式权重计算</title>
<style type="text/css">
/*通配符选择器,优先级最低*/
*{
width: 100px;
height: 100px;
background: red;
}
/*标签选择器,优先级比通配符选择器高,比类选择器优先级低*/
body,html{
background: #fff;
}
div{
background: black!important;
}
/*类选择器,优先级比标签选择器高,比id选择器低*/
.tim{
background: yellow;
}
#xiaod{
background: green;
}
</style>
</head>
<body>
<div class="tim" id="xiaod" style="background:blue;"></div>
</body>
</html>
css常见样式属性
* height 设置高度
* width 设置宽度
* padding 设置内边距(可以设置1~4个值)
padding:10px; 所有四个填充都是 10px
padding:10px 5px; 上下填充10px;左右填充5px
padding:10px 5px 15px; 上填充10px,左右填充5px,下填充15px。
padding:10px 5px 15px 20px; 上填充10px,右填充5px,下填充15px,左填充20px。
* margin 设置外边距
* border 设置边框
* color 设置字体颜色
* background 设置背景颜色
* font-size 设置字体大小
css常见属性演示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>讲解css常用属性</title>
<!-- style标签是写样式的 -->
<style type="text/css">
.tim{
width: 200px;/*width是设置宽度的*/
height: 200px;/*height是设置高度的*/
background:red;/*background是设置背景颜色的*/
color: #fff;/*color是设置字体颜色的*/
font-size: 24px;/*font-size是设置字体大小的*/
font-weight: 700;/*font-weight是设置字体加粗*/
border: 5px solid blue;/*border有三个参数,第一个设置边框的宽度,第二个设置是实线、虚线等,第三设置边框颜色*/
margin: 10px 20px 30px 40px;/*margin设置四个值,分别是上右下左,顺时针*/
/*上面一行的设置等同于下面的四行
margin-top:10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px;*/
padding: 10px 20px 30px 40px;/*同上*/
}
</style>
</head>
<body>
<div class="tim">我是tim</div>
</body>
</html>
浮动布局、清除浮动布局
脱离文档流
浮动布局是脱离文档流的。
为什么要设置浮动布局?
块级元素独占一行,如果想要多个块级元素在同一行中展示则可以通过使用浮动布局来实现。
设置浮动布局
# float的属性有
left 元素向左浮动
right 元素向右浮动
none 默认值。元素不浮动,并会显示在其在文本中出现的位置
inherit 规定应该从父元素继承 float 属性的值(这种情况一般可忽略)
为什么要清除浮动?
如果不清除浮动,尾随在带有浮动样式的元素后面的块级元素也会和前者在一行显示。
清除浮动的方法
* 在父元素上设置overflow:hidden;
* 在父元素上设置伪类,属性设置为content: "";display: block;clear: both;
* 使用空标签设置 clear:both
设置浮动样式、清除浮动演示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>浮动布局</title>
<style type="text/css">
/*第一种清楚浮动的方法,父元素上设置overflow:hidden;*/
/* ul{
overflow: hidden;
}*/
/*第二种清楚浮动的方法,在父元素上设置伪类 这是最好的清楚浮动方法*/
ul:after{
content: "";
display: block;
clear: both;
}
/*第三种清楚浮动的方法,写一个空的元素,设置样式为clear:both;*/
/*.clear{
clear: both;
}*/
ul li{
float: left;/*元素向左浮动*/
list-style: none;/*去掉li前面的小圆点*/
margin-right: 20px;
}
</style>
</head>
<body>
<ul>
<li>新闻列表1</li>
<li>新闻列表2</li>
<li>新闻列表3</li>
<div class="clear"></div>
</ul>
<div>我并没有设置浮动,我是块级元素我要自己一行</div>
</body>
</html>
定位布局
相对定位
relative 生成相对定位的元素,相对于自身正常位置进行定位。
绝对定位(脱离文档流)
absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。(祖上元素都没定位就相对第一个即最外层的祖先元素进行定位(和固定定位效果一样),如果有祖上元素设置了position:relative、absolute、fixed就相对此祖上元素定位) 元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
固定定位(脱离文档流)
fixed 生成固定定位的元素,相对于浏览器窗口进行定位。
没有定位(默认值)
static 默认值。没有定位,元素出现在正常的流中
继承定位
inherit 规定应该从父元素继承 position 属性的值(这种情况一般可忽略)。
定位演示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>定位布局</title>
<style type="text/css">
/*浏览器兼容处理:不同浏览器的margin、padding不一样,使用通配符统一归零*/
*{
margin: 0;
padding: 0;
}
.parent{
width: 100px;
height: 100px;
border:1px solid red;
}
.child{
position: relative;/*相对定位,相对于自身定位*/
left: 50px;
top: 50px;
width: 100px;
height: 100px;
border:1px solid black;
}
.o1{
width: 100px;
height: 100px;
border: 1px solid blue;
}
.o2{
position: relative;
left: 25px;
width: 50px;
height: 50px;
border: 1px solid red;
}
.o3{
position: absolute;
top: 25px;
left: 25px;
width: 25px;
height: 25px;
border: 1px solid green;
}
.fixedbox{
position: fixed;
top: calc(50% - 25px);
left: 0;
width: 50px;
height: 50px;
border: 1px solid black;
}
</style>
</head>
<body>
<!-- 相对定位 -->
<!-- <div class="parent">
<div class="child"></div>
</div> -->
<!-- 绝对定位 -->
<div class="o1">
<div class="o2">
<div class="o3"></div>
</div>
</div>
<!-- 固定定位,相对于浏览器窗口进行定位 -->
<!-- <div class="fixedbox">
</div> -->
</body>
</html>
两栏自适应布局
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>常见两栏自适应布局</title>
<style type="text/css">
/*浮动布局实现两栏自适应*/
.parent{
overflow: hidden;/*清楚浮动*/
color: #fff;
}
.leftchild{
float: left;/*设置左浮动*/
width: 100px;
height: 100px;
background: red;
}
.rightchild{
height: 100px;
margin-left: 100px;
background: green;
}
/*定位布局实现两栏自适应*/
.positionparent{
position: relative;
}
.posileft{
position: absolute;
left: 0;
width: 100px;
height: 100px;
background:grey;
}
.posiright{
height: 100px;
margin-left: 100px;
background: red;
}
</style>
</head>
<body>
<!-- 浮动布局实现两栏自适应 -->
<div class="parent">
<div class="leftchild">222</div>
<div class="rightchild">我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局</div>
</div>
<!-- 定位布局实现两栏自适应 -->
<div class="positionparent">
<div class="posileft">222</div>
<div class="posiright">我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局</div>
</div>
</body>
</html>
三栏自适应布局
左右盒子设置固定宽度并浮动,中间盒子设置100%宽度,需要注意,如果设置浮动,需要中间盒子和右边盒子调位,否则右边盒子会掉落
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>常见两栏自适应布局</title>
<style type="text/css">
/*浮动布局实现两栏自适应*/
.parent{
overflow: hidden;/*清楚浮动*/
color: #fff;
}
.leftchild{
float: left;/*设置左浮动*/
width: 100px;
height: 100px;
background: red;
}
.midle{
height: 100px;
margin-left: 100px;
margin-right: 100px;
background: green;
}
.rightchild{
float: right;/*设置右浮动*/
width: 100px;
height: 100px;
background: black;
}
</style>
</head>
<body>
<!-- 这堂课的作业,根据学到的知识实现三栏自适应布局,左右固定尺寸,中间为自适应 -->
<!-- 浮动布局实现两栏自适应 -->
<div class="parent">
<div class="leftchild">222</div>
<div class="rightchild">222</div>
<div class="midle">我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局我是自适应布局</div>
</div>
</body>
</html>
水平居中、垂直居中
文字的水平垂直居中
text-align:center;height与line-height设置同高
.fenye li{
height: 30px;
line-height: 30px;
text-align: center;
}
图片的水平垂直居中
text-align:center;height与line-height设置同高,然后图片设置 vertical-align: middle;
<style type="text/css">
.imgbox{
width: 200px;
height: 200px;
line-height: 200px;
text-align: center;
border:1px solid red;
}
.imgbox img{
width: 20px;
height: 20px;
border: 1px solid black;
vertical-align: middle;
}
</style>
<body>
<div class="imgbox">
<img src="1.jpeg">
</div>
</body>
利用position实现水平垂直居中
<style type="text/css">
.imgbox{
position: relative;
width: 200px;
height: 200px;
border: 1px solid red;
}
.imgbox img{
position: absolute;
left: 0;
top: 0;
right: 0;
bottom:0;
margin: auto;
width: 30px;
height: 30px;
}
</style>
<body>
<div class="imgbox">
<img src="1.jpeg">
</div>
</body>
经典图形实现方式
三角形实现方式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>三角形的实现</title>
<style type="text/css">
.square{
width: 0;
height: 0;
border-top: 50px solid red;
border-right: 50px solid transparent;
border-bottom: 0 solid transparent;
border-left: 50px solid transparent;
}
.tim{
width: 0;
height: 0;
border-top:0 solid transparent;
border-right:50px solid transparent;
border-bottom:50px solid red;
border-left:0 solid transparent;
}
</style>
</head>
<body>
<!-- 等边三角形 -->
<div class="square"></div>
<!-- 等腰三角形 -->
<div class="tim"></div>
</body>
</html>
圆的实现方式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>圆的实现</title>
<link rel="stylesheet" type="text/css" href="yuan.css">
<style type="text/css">
.circle{
width: 200px;
height: 200px;
border:1px solid red;
border-radius: 50%;
}
</style>
</head>
<body>
<div class="circle" style="background:red;"></div>
</body>
</html>
样式引入方法
内联样式表
<p style="background:red;font-size:15px"></p>
嵌入样式表
<head>
<title></title>
<style type="text/css">
p{
background-color:yellow;
font-size:xx-small;
}
</style>
</head>
外部样式表
在head标签里面写link标签引入外部css文件。
<head>
<meta charset="utf-8">
<title>圆的实现</title>
<link rel="stylesheet" type="text/css" href="yuan.css">
</head>
练习
编写时移动端页面时加入这行信息配置:<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0" />
以上这行信息配置作用如下:
* width=device-width--宽度为设备宽度,如果你的页面宽度小于设备宽度,就需要修改一下这个属性,不然的话会出现可以页面左右滑动,如ipad ios7中客户端页面。
* initial-scale - 初始的缩放比例
* minimum-scale - 允许用户缩放到的最小比例
* maximum-scale - 允许用户缩放到的最大比例
* user-scalable - 用户是否可以手动缩放
<!DOCTYPE html>
<html>
<head>
<title>我的第一个项目实战页面</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0" />
<style type="text/css">
*{
margin:0;
padding: 0;
}
li{
list-style: none;
}
body{
background: #f6f6f6;
}
.header{
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 50px;
line-height: 50px;
background: #fff;
padding-left: 5%;
}
.header img{
vertical-align: middle;
}
.logo{
width: 82px;
height: 24px;
margin-right: 45%;
}
.search,.userimg{
width: 24px;
height: 24px;
margin-left: 10px;
}
.bannerwrap{
margin-top: 50px;
}
.bannerwrap img{
width: 100%;
}
.classifywrap{
margin-top: 10px;
background: #fff;
padding-bottom: 5px;
}
.classify{
overflow: hidden;
}
.classify li{
float: left;
width: 25%;
text-align: center;
}
.classify .list{
color: #7e8c8d;
}
.classify .icon{
display: inline-block;
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
border-radius: 50%;
background: #4a95dc;
font-size: 18px;
color: #fff;
margin: 10px 0;
}
.coursewrap{
width: 100%;
background: #fff;
padding: 0 5%;
box-sizing: border-box;
margin: 10px 0;
}
.hotwrap{
height: 50px;
line-height: 50px;
}
.hotwrap img{
width: 25px;
height: 25px;
vertical-align: text-bottom;
}
.courselist{
overflow: hidden;
margin-bottom: 92px;
}
.courselist li{
float: left;
width: 48%;
margin-bottom:10px;
}
.courseposter{
width: 100%;
height: 120px;
}
.courseposter img{
width: 100%;
height: 100%;
border-radius: 5px;
}
.coursetitle{
font-size: 13px;
color: #333;
margin-top: 5px;
}
.levelprice{
overflow: hidden;
margin-top: 5px;
}
.level{
float: left;
font-size: 12px;
color: #333;
}
.price{
float: right;
color: red;
font-size: 13px;
}
/*设置商品的基数行li*/
.courselist li:nth-of-type(odd){
margin-right: 4%;
}
#bottomnav{
position: fixed;
bottom: 0;
left: 0;
width: 100%;
}
.nav{
width: 100%;
height: 100%;
border-radius: 50%;
}
</style>
</head>
<body>
<!-- 页面头部 -->
<div class="header">
<img class="logo" src="./img/logo.png">
<img class="search" src="./img/search.png">
<img class="userimg" src="./img/userimg.png">
</div>
<!-- 轮播图 -->
<div class="bannerwrap">
<img src="./img/banner.jpeg">
</div>
<!-- 分类 -->
<div class="classifywrap">
<ul class="classify">
<li>
<div class="icon">后</div>
<p class="list">后端</p>
</li>
<li>
<div class="icon">前</div>
<p class="list">前端</p>
</li>
<li>
<div class="icon">测</div>
<p class="list">测试</p>
</li>
<li>
<div class="icon">维</div>
<p class="list">运维</p>
</li>
</ul>
</div>
<!-- 课程模块 -->
<div class="coursewrap">
<div class="hotwrap">
<img src="./img/hot.png">
热门视频
</div>
<ul class="courselist">
<li>
<div class="courseposter">
<img src="./img/1.png">
</div>
<p class="coursetitle">Spring Boot 2.x零基础入门到高级实战教程</p>
<div class="levelprice">
<p class="level">级别:中级</p>
<p class="price">价钱:$29.8</p>
</div>
</li>
<li>
<div class="courseposter">
<img src="./img/2.png">
</div>
<p class="coursetitle">vue2019全新单页面应用仿京东电商项目</p>
<div class="levelprice">
<p class="level">级别:中级</p>
<p class="price">价钱:$39.8</p>
</div>
</li>
<li>
<div class="courseposter">
<img src="./img/2.png">
</div>
<p class="coursetitle">vue2019全新单页面应用仿京东电商项目</p>
<div class="levelprice">
<p class="level">级别:中级</p>
<p class="price">价钱:$29.8</p>
</div>
</li>
<li>
<div class="courseposter">
<img src="./img/1.png">
</div>
<p class="coursetitle">Spring Boot 2.x零基础入门到高级实战教程</p>
<div class="levelprice">
<p class="level">级别:中级</p>
<p class="price">价钱:$29.8</p>
</div>
</li>
</ul>
</div>
<!-- 底部导航 -->
<div class="classifywrap" id="bottomnav">
<ul class="classify">
<li>
<div class="icon"><img class="nav" src="./img/1.png"></div>
<p class="list">首页</p>
</li>
<li>
<div class="icon"><img class="nav" src="./img/2.png"></div>
<p class="list">课程</p>
</li>
<li>
<div class="icon"><img class="nav" src="./img/1.png"></div>
<p class="list">购物车</p>
</li>
<li>
<div class="icon"><img class="nav" src="./img/2.png"></div>
<p class="list">我的</p>
</li>
</ul>
</div>
</body>
</html>