CSS是指层叠样式表(Cascading Style Sheets),样式定义如何显示HTML元素,样式通常又会存在于样式表中。
使用css的目的是控制html各种元素使网页展示美观精致
<p style="background-color:red">hello world</p>
<head> <meta charset="utf-8"> <title>title</title> <style> div{ background-color:red; } </style> </head>
将一个.css文件引入到html文件中
<link href="mystyle.css" rel="stylesheet" type="text/css"/>
@import url(other.css)
*: 通用元素选择器,匹配任何元素 * { margin 0; padding 0;}
E: 便签选择器,匹配所有使用E标签的元素 p{color:green;}
.info和E.info: class选择器,匹配所有class属性中包含info的元素
#info和E#info: id选择器, 匹配所有id属性等于info的元素
E,F 多元素选择器(群组选择器),同时匹配所有E元素或F元素,E和F直接用逗号分隔 div,p { color:red; } E F 后代元素选择器,匹配所有属于E元素后代的F元素,E和F之间用空格分隔 li a { font-weight:bodf; } E > F 子元素选择器,匹配所有E元素的子元素F,与后代选择器的区别是不会选中孙子辈元素 div > p { color:green; } E + F 毗邻选择器,匹配所有紧随E元素之后的同级元素F
E[att] 匹配所有具有att属性的E元素,不考虑他的值 p[title] { color:red; } E[att=val] 匹配所有att属性等于"val"的E元素 E[att~=val] 匹配所有att属性具有多个空格分隔的值,其中一个值属于val的E元素 td[class~="name"] {color:#f00;} E[att^=val] 匹配属性值以指定开头的每个元素 div[class^="test"] { background:red; } E[att$=val] 匹配属性值以指定结尾的每个元素 E[att*=val] 匹配属性值中包含指定值的每个元素 p:before 在每个<p>元素的内容之前插入内容 p:before{ content:"hello";color:red;} p:after 在每个<p>元素的内容之后插入内容
先看有没有选中,如果选中了就数数(id,class,标签的数量)谁的权重大就显示谁的属性
a:link 未单击访问时的超链接样式
a:visited 单击访问后超链接样式
a:hover 鼠标悬浮其上的超链接样式
a:active 鼠标单机未释放的超链接样式
input:focus 当专注到输入框的样式
div ul li:first-child 选中li标签的第一个元素
div ul li:nth-child(3) 选中当前指定的元素 数值从1开始
div ul li:nth-child(n) n表示选中索引从0开始 0的时候表示没有选中
div ul li:nth-child(2n) 所有偶数
div ul li:nth-child(2n-1) 所有基数
first-lette 用于为文本首字母设置特殊样式
before 用于在元素内容前面插入新内容
after 用于在元素内容后面插入新内容,在布局时可以用来清除浮动
盒模型:在网页中基本都会显示一些方方正正的盒子,这种盒子被称为盒子模型。
重要属性:width height padding border margin
weight,height: 指的是内容宽高 而不是整个盒子真实的宽高
盒子模型的计算: 如果想保证盒子的真实宽度, 加width应该减少padding, 减width应该加padding
padding控制的是盒子内容到盒子border之间的距离,设置了padding值是额外加载原来大小之上的width+padding,如果不想给不实现大小,那么就在width减去padding方向对应的值
外边距控制的是元素与元素之间的距离,margin也有四个方向,会改变实际大小背景色不会渲染到marigin区域,但是这个区域也属于盒子一部分
margin垂直方向上会出现外边距合并
使用margin: 0 auto 水平居中盒子。使用条件:
# 也可以引入rest css body,p,ul,ol,dl,dt{ margin:0; padding:0; } ul,ol{ list-style:none } input{ border:none; outline:none }
border-radius: 50% 圆形
box-shadow: 0 0 15px // 阴影效果x y 阴影模糊程度 阴影颜色
display: table-cell;
vertical-align: middls;
(1) 方式一
.box{ width:200px; height:200px; position:relative; background-color:red; } .child{ width:100px; height:100px; background-color:green; position:absolute margin: auto; left:0; right:0; top:0; bottom:0; }
(2) 方式二
.box{ width:200px; height:200px; background-color:red; display:table-cell; vertical-align: middle text-align:center } .child{ width:100px; height:100px; background-color:green; display:inline-block; line-height:100px }
(3) 方式三
.box{ width:200px; height:200px; background-color:red; position:relative; } .child{ width:100px; height:100px; background-color:green; position:absolute; top:50% left:50% margin-left:-50px margin-top:-50px }
文档流:可见元素在文档中显示位置
父元素不设置高度,子元素设置浮动之后,不会撑开父元素的高度,那么此时父盒子没有高度了。如果在次父盒子下面还有一个标准流的盒子,那么就会影响页面的布局。
所以我们要解决浮动带来的页面布局错乱问题------清除浮动。
left 元素向左浮动 /*左浮动 左侧为起始,从左往右依次排列*/ right 元素向右浮动 /*右浮动 右侧为起始,从左往右依次排列*/
控制元素的显示和隐藏
块级元素与行内元素的转变
static 默认值,没有定位
relative 相对定位
特点:1 不脱标准文档流 2 形影分离 3 老家流坑 用处:1微调页面信息 2 做绝对定位的参考位置
相对自身原来位置进行偏移,设置相对定位的盒子会相对它原来的位置,通过指定偏移到达新的位置
设置了相对定位的网页元素,无论是在标准流还是在浮动流中,都不会对它的父级元素和相邻元素有任何影响,它只只对自身原来的位置进行偏移
absolute 绝对定位
在没有父级元素定位时,以浏览器的左上角为基准,有父级的情况下,父级设置相对定位,子级设置绝对定位,是以父盒子为基准进行定位
可以提升层级关系
脱离文档流
fixed 固定定位
特性:1 脱离标准流 2 提升层级 3 固定不变 不会随着页面滚动而滚动
参考点: 设置固定定位用top描述,那么是以浏览器左上角为参考点, 如果用bottom描述那么是以浏览器的左下角为参考点
绝对定位居中的办法: 设置子元素的绝对定位,left:50%, margin-left等于元素宽度的一半实现绝对定位盒子居中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> *{margin: 0;padding: 0} .page-header{ height: 48px; background-color: #303a40; color: white; line-height: 48px; } .page-body .body-menu{ position: absolute; top: 48px; bottom: 0; left: 0; width: 200px; border: 1px solid; } .page-body .body-content{ position: absolute; top: 50px; bottom: 0; left: 205px; right: 0; border: 1px solid rebeccapurple; } .page-header .logo{ float: left; width: 200px; text-align: center; } .page-header .user{ float: right; padding: 0 40px; height: 48px; position: relative; } .page-header .user:hover{ background-color: #EBA702; } .page-header .user:hover .more{ display: block; } .page-header .user .more{ position: absolute; top: 48px; right: 0; width: 200px; border: 1px solid green; background-color: grey; display: none; z-index: 999; } .page-header .user .more a{ display: block; } .page-header .picture img{ width: 30px; height: 30px; margin-top: 7px; border-radius: 50%; } </style> </head> <body> <div class="page-header"> <div class="logo">python</div> <div class="user"> <a href="javascript:" class="picture"> <img src="二维码.png"> </a> <div class="more" style=""> <a>注销</a> <a>我的信息</a> </div> </div> </div> <div class="page-body"> <div class="body-menu"></div> <div class="body-content"></div> </div> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> *{margin: 0; padding: 0} .menu{ position:absolute; left: 200px; width: 220px; top: 48px; bottom: 0; border: 1px solid red; } .fixed{ position:fixed; top:0; } .menu a{ display: block; } .menu a.active{ background-color: #1eb1af; } </style> </head> <body> <div style="height: 48px;background-color: #303a40"></div> <div class="menu"> <a num="menu1" class="">菜单一</a> <a num="menu2">菜单二</a> <a num="menu3">菜单三</a> <a num="menu4">菜单四</a> </div> <div id="content" style="position:absolute;left: 430px; top: 48px;bottom: 0; right:200px; border: 1px solid green"> <div id="menu1" class="level1" style="height: 500px;background-color: rebeccapurple"></div> <div id="menu2" class="level1" style="height: 900px;background-color: #303a40"></div> <div id="menu3" class="level1" style="height: 1000px;background-color: #84a42b;"></div> <div id="menu4" class="level1" style="height: 800px;background-color: blue;"></div> </div> </body> <script src="jquery-3.3.1.js"></script> <script type="text/javascript"> $(function () { $(document).scroll(function () { var scrollTop = $(document).scrollTop(); if(scrollTop>48){ $(‘.menu‘).addClass(‘fixed‘) }else { $(‘.menu‘).removeClass(‘fixed‘); $(‘.menu a‘).eq(0).removeClass(‘active‘) } $(‘#content‘).children().each(function () { var eleTop = $(this).offset().top; var winTop = eleTop -scrollTop; var winBottomTop = eleTop + $(this).height() - scrollTop; // 滚动高度 // 文档高度 // 窗口的高度 // 最底部 = 文档高度-窗口高度 var docHeight = $(document).height(); var winHeight = $(window).height(); if(docHeight - winHeight == scrollTop){ $(‘.menu a:last‘).addClass(‘active‘).siblings().removeClass(‘active‘) }else if (winTop<=0 && winBottomTop>=0){ var id = $(this).attr(‘id‘); $(‘.menu a[num=‘+$(this).attr(‘id‘)+‘]‘).addClass(‘active‘).siblings().removeClass(‘active‘) } }) }) }); </script> </html>
原文:https://www.cnblogs.com/harryblog/p/11507714.html