CSS学习

CSS ⭐⭐⭐

css定义

层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 或XML(包括如 SVG、MathML、XHTML 之类的 XML 分支语言)文档的呈现

CSS基本特性

统一性

使用统一的属性解决属性的样式问题,让不同的标签也可以使用统一的属性来

设置样式

便捷性

性主要指的是CSS提供丰富多样的选择器,它可以让我们批量或单个的去选取页面上面的元素去操作样式

分离性

分离性指提原本HTML代码与CSS代码应该是混合在一起写的,现在可以通过某些技术实现结构代码与样式代码的分离,以其实现样式代码的复用

CSS基础语法

CSS的代码大体上面可以写在三个地方

行内样式

<标签名 style="css属性名:css属性值;css属性名2:css属性值2"></标签名>

内部样式块

//内部样式块使用 <style> 标签来封闭构成
<style type="text/css">
	h2{ color: red; font-size: 40px; border: 2px solid red; } </style> 
<body>
	<h2 >这是一个二号标题</h2> 
	<p>这是一个段落</p>
</body>

外部样式表

些样式单独的构成 一个CSS文件,然后再通过一些特殊的方式去导入进去

\1. 使用 link 标签来进行引入

<link href="./css/07.css" rel="stylesheet" type="text/css"/> 

\2. 通过CSS命令 @import 的方式来导入。请注意,它是CSS的命令,只能在CSS的区域书写

<style> @import url("./css/07.css"); </style>

浮动与定位

float浮动

浮动的意思指的是元素脱流当前文档流,
float:left; /*向左浮动*/ 
float:right; /*向右浮动*/ 
float:none /*不浮动*/
浮动的影响

(1)脱流会造成父级的高度坍塌---不给父盒子设宽高,子浮动

(2)浮动会脱流当前布局的标准流---不占布局位置

float浮动的本质影响
1. 浮动会脱流,高于普通文档流一个Z轴层级,并且不再占用布局的位置
2. 浮动脱流的元素不再适用于标准流里面的任何居中规范
3. 浮动脱流以后元素无视元素类型,类型一律变成 block 类型
4. 浮动脱流以后的元素会造成宽度丢失,宽度就不再是默认的100%,而是由内容来撑开。但是仍然可以通过 width/height 来重新设置宽度与高度
5. 浮动脱流会形成一个 BFC(块级格式化上下文) ,这样就不会有 margin 的穿透与折叠现象
清除浮动

(1)使用 clear 来清除浮动,恢复父级高度(在浮动元素的后面添加一个块级元素,使用 clear 属性来清除)

<div class="box">
	<div class="div1">第一个盒子</div> 
	<div class="div2">第二个盒子</div>
    <div style="clear:both"></div> 
 </div>

(2)使用 ::after 伪元素去完成

.clearfix::after{
	content: "";
    display: block;
    clear: both;
 }

(3)使用 BFC 去清除浮动overflow:auto

position定位

5种定位方式
(1) 相对定位position:relative(相对定位没有脱流)
    1. 相对原来的位置在发生位置偏移
    2. 相对定位的元素即使位置发生了偏移,仍然占用原来的位置
    3. 相对定位的元素位置发生偏移以后不占用新位置,并且高于标准流一个层级
    4. 相对定位的元素无视元素类型, 上下左右以及Z轴都可以设置
(2) 绝对定位 position:absolute
    1. 绝对定位会造成脱流(它在当前位置直接脱流),不再占用当前位置,并且高于标准流一个层级
    2. 绝对定位默认以浏览器会标准来进行定位,但是如果外层发现了其它定位,则以这个外层元素为标准进行定位
(3)固定定位position:fixed
    1. 固定定位也会造成脱流(它在当前位置直接脱流),不再占当前位置,并且高于标准流一个层级
    2. 固定定位一定以浏览器为标准来定位,外边的任何因素都不能影响它
    3. 固定定位不会随着浏览器滚动条的滚动而发生位置变化
(4)静态定位position:static
	静态定位就是清除定位,让原本已经定位了的元素清除掉定位,让元素素回归正常文档流。
(5)粘性定位position:sticky

定位脱流的影响

1. 定位脱流以后元素不占用当前位置,高于Z轴一个层级【一定是在当前位置脱流】,但是可以通过z-index 去调整这个层级
2. 定位脱流以后的元素无视元素类型 ,所有的元素都会变成block块级元素
3. 定位脱流以后的元素会造成宽度丢失,宽度由里面的内容来撑开,但是仍然可以通过
width/height 重新设置
4. 定位脱流以后的元素大小不仅仅可以通过 width/height 来进行设置,还可以通过 left/right 去拉开宽度,可以通过 top/bottom 去拉开高度
5. 定位脱流以后的元素不适于标准流里面的任何居中规范【定位脱流有它自身的居中规范】
6. 定位脱流以后的元素是会形成BFC,所以它没有 margin 的穿透与折叠现象

CSS选择器

基本选择器

名称 描述 例子
标签选择器 最根本的选择器,以HTML的标签名为选择器 h2
ID选择器 通过ID去设置,原则上面不能重复 #p1
class选择器 一个标签可以使用多个class样式,一个class可以被多个标签使用 .aaa
分组选择器 将不同的选择器使用 , 来进行连接,这样就实现了一个分组 p,h2
后代选择器 后代选择器使用空格隔开,空格左右两边的选择器可以是任意类型后代选择器可以是儿子辈,也可以是孙子辈,内部的所有都可以 #bbb a
子代选择器 子代选择器使用 > 来表示,直接子q ul>li
通配符选择器 用*表示页面页面文档样式 *

复杂选择器

属性选择器
选择器 描述 用法
[属性名^="属性值"] 代表以什么开头的属性值 [src^="img"]{border: 10px solid black;}/src属性以img开头的/
[属性名$="属性值"] 代表以什么 结尾的属性值 [src$="png"]{ height: 200px; } /src属性以png结尾/
[属性名*="属性值"] 代表属性值包含特定的值的 [src="2"]{ width: 300px;} /src属性包含2的*/
伪类选择器
 :hover 鼠标放上去以后的特殊效果
 :active 鼠标点击下去不松开的特殊效果
	以上两个效果是网页上面任何元素都可以实现的效果
 :link 代表链接未访问之前的状态
 :visited 代表链接访问之后的状态
	上面的四个状态在链接标签a标签里面都是可以适用的,但是要注意使用顺序,必须按照 :link,:visited,:hover,:active 这个顺序,记得时候记 lv/ha (由爱love生恨hate)
 :first-child 第一个子元素
 :last-child 最后一个子元素
 :nth-child(xn+y) 选中特定位置的子元素,将元素按x个分成一组,取每个分组里面的第y项 
​	当x>1时,将元素按x个分成一组,取每个分组里面的第y项,如 nth-child(3n+2) 
​	当x=1时,则可以理解为第y项开始一直到最后,如 nth-child(n+3) 
​	当x=0时,则相当于第所有元素的第y项,如 nth-child(3) 
​	当x=-1时,相当于取前y项,如 nth-child(-n+3) 就是取前3项 
​	nth-child(odd)/nth-child(even) 分别代表偶数项与奇数项
​	以 *-child 结尾的选择器是先找个数,再判断选择器是否符合要求,如 p:nth-child(3) ,则是找到3个子元素,并且第3个元素是p元素
:first-of-type 指定类型第一个子元素

:last-of-type 指定类型最后一个子元素

:nth-of-type(xn+y) 指定类型的分组的子元素,用法与 nt-child(xn+y) 类似以 *-of-type 结尾的选择器是先根据类型查找一遍结果,然后再到这个结果里面去找指定的个数

:checked 代表表单元素里面的单选按钮或复选按钮选中以后的状态

:focus 代表表单元素里面获取焦点的元素的状态

:read-only 用于设置表单元素的只读状态

:disabled 用于设置表单元素被禁用的时候的效果

:root:匹配文档根元素

:not(选择器) 排除指定的选择器

:target:匹配当前活动的target对应的锚点

:enabled:匹配被启用的元素

:in-range:匹配值在指定范围内的元素

:invalid:匹配具有无效值的元素

:valid`:匹配具有有效值的元素

:optional:匹配没有"required"属性的元素

:read-only:匹配具有"readonly"属性的元素

:read-write:匹配没有"readonly"属性的元素

​ :not 是可以叠加使用的,如下所示

<style> 
/* fieldset下面除了p与a之外,所有的标签都变红 */ 
	fieldset *:not(p):not(a){ color: red; } 
</style> 
<fieldset>
	<p>第一个段落</p> 
	<h2>无题</h2>
    <a href="#">我在人间凑数的日子</a> <h1>皮皮虾出品</h1>
    <font>这是字体标签</font>
</fieldset>
伪元素选择器
::first-line 选中段落文字的第一行,它是一个伪元素选择器

::first-letter 选中第一个文字,它是一个伪元素选择器

::before 在当前元素内部的最前面去插入内容

::after 在当前元素内部的最后面去插入内容

::placeholder 表单元素输入框里面的 placeholder 属性所生成的样式

::selection 设置段落里面文本选中以后的样式,它也是一个伪元素,它也是一个伪元素

伪类与伪元素选择器的区别

1,在一次选择上面,可以出现多个伪类选择器,但只能出现一次伪元素选择器
2,一个选择器里面,伪元素只出现一次,并且只能在结尾【这句话的意思就是在一个选择器里面,伪类与伪元素可以同时存在,如果同时存在,则伪元素必定在选择器的结尾】
3,伪类使用`:`来进行,而伪元素则可以使用`:`或`::`(低版本的IE必须使用双冒号)

CSS常用样式

宽度和高度

(1). width/height 用于设置元素的固定宽度与固定高度,它们一般使用像素px为单位
(2). min-width/min-heihgt 用于设置元素的最小宽度与最小高度,元素的实际大小是可以大于这个值的,但是不能小于这个值
(3). max-width/max-height 用于设置元素的最大宽度与最大高度,元素的实际大小是可以小于这个值的,但是不能大于这个值的
	max-width/max-height/min-width/min-height 它们是有兼容性的,只能在IE9及以上使用

背景样式

(1). background-color 设置背景颜色
(2). background-image 用于设置背景图片
(3). background-repeat 当图片小于容器的时候,背景图片默认会出现一个平铺的行为,我们可以通过这个属性来设置重复平铺行为,它的属性有以下几个
				repeat-x 仅仅只在X轴(水平方向)去重复平铺
				repeat-y 仅仅只在Y轴(垂直方向)去重复平铺
				repeat 在水平方向与垂直方向都去重复平铺,默认就是这个值
				no-repeat 不重复平铺
(4). background-position 设置背景图片的位置,它在水平方向可以设置 left/center/right ,在垂直方向可以设置为 top/center/bottom 
		background-position-x 设置水平方向
		background-position-y 设置垂直方向
(5). background-size 用于设置背景图片的大小,它可以设置1~2个值
		cover **与** contain 
		cover 覆盖的意思,背景图片会完全的覆盖容器,但是某一个边可能会发生裁剪而显示不全
		contain 包含的意思,容器会完全包含这个背景图片,但是某一人边可能会显示不全
(6)background-origin规定背景图片相对于什么位置来定位,有三个属性值
        padding-box:背景图像相对于内边距框来定位。	
        border-box   :背景图像相对于边框盒来定位。	
        content-box  : 背景图像相对于内容框来定位。

倒影box-reflect

三个属性值

direction 定义方向
    above:指定倒影在对象的上边
    below:指定倒影在对象的下边
    left:指定倒影在对象的左边
    right:指定倒影在对象的右边

offset定义反射偏移的距离
	用长度值来定义倒影与对象之间的间隔。可以为负值。用百分比来定义倒影与对象之间的间隔。可以为负值

 mask-box-image定义遮罩图像
	取值:
        none:无遮罩图像:
        使用绝对或相对地址指定遮罩图像。
        使用线性渐变创建遮罩图像。
        使用径向(放射性)渐变创建遮罩图像。
        使用重复的线性渐变创建背遮罩像。
        使用重复的径向(放射性)渐变创建遮罩图像。

eg:
img{
      -webkit-box-reflect:below 10px -webkit-linear-gradient(transparent,transparent 50%,rgba(0,0,0,.8));
}

文本效果

(1)text-shadow文字阴影(可以允许多值)
描述:
	text-shadow 可向文本应用阴影,规定水平阴影、垂直阴影、模糊距离,以及阴影的颜色
语法:
	 text-shadow: h-shadow v-shadow blur color;
	 h-shadow:必需。水平阴影的位置。允许负值。
	 v-shadow:必需。垂直阴影的位置。允许负值。
	 blur  :可选。模糊的距离。
	 color:可选。阴影的颜色	

(2)text-stroke(文字描边)
描述:
	设置或检索对象中的文字的描边。
语法:
	 text-stroke: text-stroke-width   text-stroke-color 
	 text-stroke-width 设置或检索对象中的文字的描边厚度
	 text-stroke-color 设置或检索对象中的文字的描边颜色

(3)direction文本描绘
描述:
	属性规定文本的方向 / 书写方向
语法:
	 direction:rtl/ltr
	 ltr:默认。文本方向从左到右。
	 rtl:文本方向从右到左
(4)text-align 
描述:
	指定元素文本的水平对齐方式。
属性值:
	left:把文本排列到左边。默认值:由浏览器决定。
	right:把文本排列到右边.
	center:把文本排列到中间。
	justify:实现两端对齐文本效果(补充:最后一行要写:text-align-last:justify;
	inherit:规定应该从父元素继承 text-align 属性的值

文字与字体

1. font-size 设置字体的大小
	单位像素单位 px,px 像素单位,网页默认的字体大小是16px 
	pt 字号,网页默认的字号大小是12pt
	vw 响应式字体大小,以当前屏幕宽度的百分比为大小。 vw 的全称叫viewport width ,2vw代表当前屏幕宽度的百分之2 
	vh 响应式字体单位,以当前屏幕的高度百分比在大小,1vh相当于屏幕高度百分之1 
	rem 它也是一个响应式单位。rem的全称叫root element也就是根元素,网
页根元素就是 html 元素,所以我们可以使用它来做标准1rem相当于一个网页字体,
个网页字体默认就是16px 

2. font-family 用于设置字体的样式,这个字体一定是你当前系统里面存在的字体

3. @font-face 自定义定体。它的使用步骤如下
			/*第一步:先定义字体*/ 
		@font-face{ font-family:biaogege; /*这个字体的名称我们定义为biaogege*/ src:url(./font/biaogege.ttc); }
			/*第二步:使用刚刚定义好的字体*/ 
		.div1{font-family:biaogege; }

4. font-weight 设置字体的粗细
                normal 正常
                bold 加粗
                bolder 更粗(要看当前的字体是否支持)
               	lighter 变细
				字100~900,默认400

5. font-style 设置字体的样式风格
            normal 正常
            italic 斜体字
            oblique 倾斜

6. text-decoration 文字描述样式,后面接收三个属性值,分别在表线条位置,颜色,类型
    text-decoration-line underline 下划线
    overline 上划线
    line-through 中划线
    text-decoration-color text-decoration-style solid 实线
    dotted 点线
    dashed 虚线
    double 双线
    groove 线槽
    wavy 波浪线

7. text-align 用于设置文字的水平排列
	常用的属性值有			      left/center/right

8. text-transform 文字大小写进行转换
        uppercase 大写字母
        lowercase 小写字线
        capitalize 首字母大写

9. text-indent 首行缩进
	一般中文会首行缩进2个字体

10. text-shadow 文字阴影,它有4个属性值设置如下
        text-shadow:水平偏移 垂直偏移 阴影模糊度 阴影颜色; 
        text-shadow: 80px 60px 11px #b41d1d;
        水平偏移与垂直偏移的数值遵守规则“上负下正,左负右正”,阴影模糊度数值越大,阴影则越模糊

11.letter-spacing 文字间距

12.word-spacing 英文单词的间距

13.line-height 用于设置行高,行文字上下居中

14.text-align:justify  文字分散对齐

文字溢出省略

单行溢出省略(一定要写宽度width)
/* 第一步:文字不换行 */ white-space: nowrap;
/* 第二步:溢出隐藏 */ overflow: hidden; 
/* 第三步:如果是文字则添加省略号 */ text-overflow: ellipsis;
多行文字省略(一定要写宽度width)
/* 多溢文字溢出省略 */
/* 第一步:把当前元素转换成一个-webkit-box */ display: -webkit-box;
/* 第二步:你要在第多少行的时候省略 */
-webkit-line-clamp: 3; 
/* 第三步:设置文字的书写方式是自上向下,也就是垂直 */ 
-webkit-box-orient: vertical; 
/* 第四步:溢出隐藏 */ text-overflow: ellipsis;
overflow: hidden;

writing-mode 排列

writing-mode 不仅仅适用于文字,还适用于行内块级元素(与弹性盒子相似)

/*l:left
r:right
t:top
b:bottom 
vertical:垂直的 */
writing-mode: lr-tb; 从左到右,从上到下
writing-mode: vertical-lr;垂直,从左往右
writing-mode: vertical-rl;垂直,从右往左

列表样式

1. list-style-type 设置每一项前面的符号 ,常见的属性值有以下几个
			none 取消列表项前面的符号
			decimal 数字
			decimal-leading-zero 以0开始的数字,如 01,02,03 				disc/circle/square 这三个属性值以之前保持一致,分别是实心圆,空心圆以及实心矩形
			cjk-heavenly-stem 采取古代十天干记表示“甲、乙、丙、丁、戊、己、庚、辛、壬、癸” cjk-earthly-branch 采取古代十二地支表示“子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥” 
			lower-alpha 小写字母
			upper-alpha 大写字母
2. list-style-position 设置列表样式符号的位置,它有两个属性值
		outside 列表样式符号在盒子模型 content 的内部外边
		inside 列表样式符号在盒子模型 content 的内容里边
3. list-style-image 使用图片去代表列表项前面的符号
4. list-style 它是一个综合属性,是上面三个属性的结合

表格样式

1. 设置表格及单元格的边框
	直接在表格上面设置 border=1
2. 单元格与单元格之间的缝隙
	cellspaicng="10"
3. 单元格内容的水平与垂直排列
	用 align 来实现水平对齐,使用 valign 来实现垂直对齐	

CSS计数器

1. counter-reset:计数器名 起始值 ,这个起始值默认可以不写,不写就是0 
2. counter-increment:计数器名 自增长值 ,这个自增长值可以不写,不写就是1 3. counter(计数器名) ,将计数的结果通过 ::before/::after 插入到某个元素上面去

边框与轮廓

border边框:
(1). border 它是一个综合属性,后面接三个属性值,分别代表边框粗细,类型,以及颜色,如果要去掉边框,只需要设置 none 属性即可
(2). border-color 设置边框的颜色
(3). border-width 设置边框的粗细
(4). border-style 设置边框的类型
                    solid 实线
                    dotted 点线
                    dashed 虚线
                    double 双线
                    groove 线槽
(5)border-left 左边框
(6)border-right 右边框
(7)border-top 上边框
(8)border-bottom 下边框

边框—border-radius(圆角):
语法:
	border-radius: 10px; 
	上下左右四个方向圆角均为10像素
	border-radius: 10px 30px; 
	上左下右为10像素 上右下左为30像素
	border-radius: 10px 30px 40px;
	上左方向10像素 下右方向为40像素
	上右下左方向为30像素
	border-radius: 10px 30px 40px 50px;(顺时针)
	上左方向为10像素  上右方向为30像素
	下右方向为40像素  下左方向为50像素

边框— box-shadow(边框阴影)
描述:
	box-shadow 属性向框添加一个或多个阴影
语法:
	box-shadow: h-shadow v-shadow blur spread color inset;
	h-shadow:必需。水平阴影的位置。允许负值。
	v-shadow:必需。垂直阴影的位置。允许负值。	
	blur :可选。模糊的距离。	
    spread:可选。阴影的尺寸。
	color:可选。阴影的颜色
	inset:可选。将外部阴影 (outset) 改为内部阴影。

边框— border-image(图片)
描述:
	box-image 属性向框添加图片
语法:
	border-image: source slice width outset repeat;
	source:用于指定要用于绘制边框的图像的位置
	slice :图像边界向内偏移
	width:图像边界的宽度	
	outset:边框图像区域超出边框的量。	
	repeat:图像边框是否应平铺(repeated)、铺满(rounded)或拉伸(stretched)


outline:轮廓
    outline-color 颜色
    outline-width 宽度
    outline-style 类型
    outline-offset 轮廓的偏移。执行内负外正

鼠标光标 cursor

属性值
	1. pointer 鼠标变成一个手的形
	2. help 鼠标光标变成一个问号
	3. wait 鼠标光标变成等待状态
	4. text 文本状态
	5. move 鼠标光标变成可移动状态
	6. no-drop 鼠标光标变成禁用状态
	7. *-resize ,其中 * 代表方位,方位遵守上北(north)下南(south),左西(west)右东(east),如ns-resize 就代表南方向可以调整大小,而南北方向就是上下,所以是上下可以调整大小的光标样式
	8. progress 光标进度条的状
	9. zoom-in 鼠标光标变成放大状态
	10. zoom-out 鼠标光标变成缩小状态
	11. none 隐藏鼠标的光标

溢出overflow

1. overflow:hidden 溢出的部分隐藏掉
2. overflow: visible; 溢出的部分直接显示,默认就是这个属性值
3. overflow: scroll; 产生滚动条
4. overflow:auto 根据盒子的溢出情况自动决定是否有滚动条
	overflow 还可以拆分成x与y轴来进行分开设置,它们如下
	overflow-x:scroll  
	overflow-y:hidden

显示与隐藏

display属性
1. display:none 隐藏元素
2. display:block 块级元素
3. display:inline 行内元素
4. display:inline-block 行内块级元素
visibility属性
1. visibility:visible 设置当前元素可见
2. visibility:hidden 设置当前元素不可见
display与visibility
(1)display:none 隐藏元素以后不再占用位置,而 visibility:hidden 隐藏元素以后仍然占用这个位置
(2)display:none 的隐藏具备一个“株连性”,父级元素如果设置display:none 子级元素是无论如何也不可能再显示的;如果是父级元素设置 visibility:hidden 隐藏子级元素还可以重新设置 visibility:visible 来显示

透明度设置

第一种情况:颜色的透明
	rgba颜色模式
第二种情况:让元素透明(opcity具有继承性)
    1. opacity:0.5 这样透明度设置为了0.5,如果设置为1代表全不透明,0则代表全透明【 这个属性是有兼容性的,在低版本的IE里面需要参照第二种设置方式】
    2. filter: alpha(opacity=50); 后面的50就相当于 50% 的意思【这一个是在低版本的IE里面设置】

滤镜设置

1. 高斯模糊
filter:blur(10px) 后面的像素越大,模糊越明显
2. 透明度设置
filter:alpha(opacity=50); 后面的50就相当于 50% 的意思【这一个是在低版本的IE里面设置】
3. 色相饱和度旋转
filter:hue-rotate(30deg) 这样代表当前颜色在色盘里面旋转30度

4.filter函数
常用函数:grayscale(0%-100%):将图像转换为灰度图像,100%为全灰
        sepia(0%-100%):将图像转换为深褐色		
		saturate():设置图像饱和度
        opacity():设置透明度
        blur():设置模糊度,不接受百分比值

盒子阴影

box-shadow:水平依稀 垂直依稀 阴影模糊度 阴影扩散 阴影颜色 inset(内阴影)

裁剪clip-path

1.矩形裁剪inset
clip-path:inset(上边 右边 下边 左边 round 圆角); 
/*如下所示*/
clip-path: inset(20px 30px 50px 10px round 30px);

2.圆形裁剪circle
clip-path:circle(半径 at 圆心横坐标 圆心纵坐标);
/*如下所示*/
clip-path: circle(100px at 300px 100px);

3.椭圆裁剪ellipse
clip-path:ellipse(横轴半径 纵轴半径 at 圆心横坐标 圆心纵坐标);
/*如下所示*/
clip-path: ellipse(200px 100px at 200px 200px); 

4.多边形裁剪polygon
clip-path:polygon(x1 y1,x2 y2,x3 y3....);
/*如下所示*/ 
clip-path: polygon(200px 0,400px 200px,200px 400px,0px 200px);

CSS表单

基础表单

文本输入框text
<input type="text" placeholder="请输入账号" value="biaogege" readonly="readonly" disabled="disabled" />
    type="text" 代表文本输入框
    value 用于设置表单的默认值
    placeholder 是占位符的意思,如果内容为空则显示占位符的内容,如果值不为空则占位
    符内容隐藏
    readonly 设置只读
    disabled 设置禁用
   
密码输入框password
<input type="password" />

文件选择框file
<input type="file" multiple accept="application/pdf">
    multiple 代表多选
    accept 代表可选择的文件类型,这个类型是MIME类型
    
单选框radio
<input type="radio" name="aaa" />男 <input type="radio" name="aaa" checked>女 
	checked 属性用于默认选中
	多个单选框如果要构成一组,它们的 name 属性就必须相同

复选框checkbox
<label><input type="checkbox" name="hobby">看书</label> 
<label><input type="checkbox" name="hobby">睡觉</label> 
<label><input type="checkbox" name="hobby" checked>玩游戏</label>

下拉选择框select
<select multiple size="7"> 
    <optgroup label="南方"> 
        <option>湖北省</option>
        <option>湖南省</option>
        <option selected>广东省</option>
        <option>福建省</option> 
    </optgroup>
    <optgroup label="北方"> 
        <option>吉林省</option>
        <option>黑龙江省</option>
        <option>山东省</option> 
        <option>内蒙古</option> 
    </optgroup>
</select>
	multiple 用于设置多选
	size 属性用于设置每次展示多少个选项
	optgroup 用于对选项进行分组, label 就是设置这个分组的名称
	selected 属性用于设置默认选中项

提交按钮submit
将当前的表单(form)的内容提交到后台服务器
<input type="submit" value="我要注册">

重置按钮reset
<input type="reset" value="我要重来" />

普通按钮button
<input type="button" value="按钮1" />

文本域textarea
实现多行文本输入
<textarea rows="5" cols="30" placeholder="请输入你想说的话"></textarea>

控件组标签fieldset
<fieldset>
    <legend><b><font color="red">请填写信息</font></b></legend> 
    账号:<input type="text"> <br> 密码:<input type="password"> <br>
    性别:<input type="radio">男 <input type="radio">女 </fieldset>
/*legend标签可以在横线上写文字*/

预格式化标签pre
<pre>床前明月光 疑是地上霜 举着望明月 低头思故乡 </pre>

CSS3新增表单

email 电子邮件地址输入框 IE不支持,FireFox4.0,Chrome10.0
表单类型 描述 兼容性
url 网址输入框,输入的网址要加上协议前缀;如http://、https:// 等 IE不支持,FireFox4.0,Chrome10.0
number 数值输入框,只能输入数值相关字符,如数字、.(小数点)、-(负号)等 IE不支持,FireFox不支持,Chrome10.0
range 滑动条,默认区间是0~100,可以通过max min 属性设定滑动范围 IE不支持,FireFox不支持,Chrome10.0
data 日期控件value {string} :设置或获取日期控件的值,值的格式要为:"yyyy-MM-dd"。 IE不支持,FireFox不支持,Chrome10.0

| month | 年月控件,代码示例:
value {string} :设置或获取控件的值,值的格式要为:"yyyy-MM" | IE不支持,FireFox不支持,Chrome10.0 |
| week | 周数控件,代码示例:
value {string} :设置或获取周数控件的值,值的格式要为:"yyyy-Www"。(格式中的W字符不能省略,并且ww周数要为2位数) | IE不支持,FireFox不支持,Chrome10.0 |
| time | 代码示例: value {string} :设置或获取时间控件的值,值的格式要为:"HH:mm",、"HH:mm:ss"或"HH:mm:ss.SSS" | IE不支持,FireFox不支持,Chrome10.0 |
| search | 搜索框,代码示例: | IE不支持,FireFox4.0,Chrome10.0 |
| color | 颜色控件,代码示例: value {string} :设置或获取颜色控件的值,值的格式要为:"#rrggbb"。 | IE不支持,FireFox不支持,Chrome10.0 |

表单属性

form标签属性
属性 描述
novalidate 规定当提交表单时不对其进行验证 novalidate

| autocomplete | 自动填充 | on :默认。规定启用自动完成功能。
off :规定禁用自动完成功能。 |
| autofocus | 属性规定当页面加载时 ,input 元素应该自动获得焦点。 | autofocus |
| height/width | 规定 元素的宽度和高度。只适用于 | px,%,em |
| list | list 属性引用 元素,其中包含 元素的预定义选项。 |
规定绑定到 元素的 datalist 的 id |
| min/max | max 属性规定 元素的最大值。 min 属性规定 元素的最小值。 min 属性与 max 属性配合使用,可创建合法值范围。 | number |
| step | step 属性规定 元素的合法数字间隔 | number |
| multiple | multiple 属性规定输入字段可选择多个值。 | multiple 属性适用于以下 input 类型:email 和 file |
| pattern(regexp) | pattern 属性规定用于验证 元素的值的正则表达式 | |
| placeholder | placeholder 属性提供可描述输入字段预期值的提示信息 | |
| required | required 属性规定必需在提交之前填写输入字段 | |

CSS高级特性

继承性

CSS的继承性指的是父级元素的样式会被后代元素所继承

默认的
    可以被继承的样式
    color/font-*/text-*/line-height/visibility/letter-spacing
    不可以被继承的样式  width/height/display/float/position/border/margin/padding/background-*
    能够被继承的多半与样式有关,而不能被继承的多半与布局有关

强制的
设置属性值 inherit(所有属性都具备)

层叠性

层叠性规范当样式发生冲突的时候应该怎么计算。

继承样式<默认样式<内部样式 或 外部样式<行内样式

优先级

选择器 权重值
* 星号选择器 0
标签选择器 1
class 类选择器,伪类选择器,属性选择器 10
id选择器 100
style行内样式 1000
!important 10000

注: 选择器的优先级不是能越位的,eg:十个class选择器比一个ID选择器无法比较

盒子模型

​ 在网页设计中经常用到的CSS技术所使用的一种思维模型。它主要用于布局思维,网 页设计中常听的属性名:内容(content)、内边距(padding)、边框(border)、外边距(margin), CSS盒子模型都具备这些属性。也就是说学习盒子模型就是学习这几个属性

margin外边距

(一)margin定义 
	指的是两个元素(也叫两个盒子)四周的外边距,它有四个方向分别通过四个属性来表示
	默认是以左上为参照---上负下正,左负右正
        margin-left 左边距
        margin-right 右边距
        margin-top 上边距
        margin-bottom 下边距
margin 可以拆分成四个方向分开来设置,同时也可以直接通过一个综合属性 margin 来设置。 margin如果在直接设置四个方法的时候,它可以接收1~4个属性值
        如果只有1个属性值,则代表4个方向都相同
        如果有2个属性值,则第1个值代表上下,第2个值代表左右
        如果有3个属性值,则第1个值代表上,第2个值代表左右,第3个值代表下
        如果有4个属性值,则按“上,右,下,左”(12点方向顺时针转1圈)四个方向依次赋值

(二)margin居中
	块级元素水平居中使用的就是 margin:auto
	四个边都应该是 auto 代表,上下的 auto 默认是0

(三)margin的穿透与折叠
	穿透现象还是折叠现象都只发生在上下两个方向,左右是不存在的
	margin穿透(父子穿透) 指的是本来作用于子元素的 margin 效果却展示在了外层元素上面
	margin穿透解决方案
		1. 在外层的盒子上面加上一个透明上边框 border-top:1px solid 	transparent 【这个时候有个隐患,盒子的大小会多1个像素,后期使用 box-sizing 来解决】
		2. 使用 BFC 解决,最常见的解决方法就是添加 overflow:auto overflow:auto 本意是溢出处理,但是在这里作为 css hack 用于处理了 margin 穿透
	
	margin折叠(兄弟折叠)指两个兄弟元素之间的上边距与下边距发生了重合
	margin的折叠现象(上下边距发生了折叠)。在折叠的时候上下边距谁的值大就表示为谁的效果
	margin折叠解决方案
			BFC

padding内边距

padding 也可以分别设置四个方向
    padding-left 左内边距
    padding-right 右内边距
    padding-top 上内边距
    padding-bottom 下内边距
    在设置盒子的内边距的时候,默认情况下盒子是会被内边距撑大的,如果想保证盒子的大小不变,这个时候我们应该添加 box-sizing:border-box

box-sizing属性

​ 用于设置盒子模型大小的标准

	1. content-box 这是默认值,它代表当前元素的 width/height 是以内容content为标准,盒子的实际占用空间大小为content+padding*2+border*2 
	
	2. border-box 它代表当前元素的 width/height 以边框为标准,这个时候盒子实际占用的大小就是所设置的 widht/height

元素类型

块级元素block
	块级元素是网页当中最常见的一种标签元素,如 div,p,h1~h6,ul,li,table 等。
	块级元素特点
    1. 块级元素独占一行,宽度默认是外层元素的100%,高度由内部的内容撑开
    2. 块级元素是可以通过 width/height 来设置宽度与高度的
    3. 块级元素遵守标准的盒子模型,它的 margin 与 padding 都是正常的
    4. 块级元素通过 margin:auto 实现水平居中

过渡transition

/*第一点*/
属性:
1. transition-property 要执行过渡的CSS属性
2. transition-duration 要执行过渡的持续时间
3. transition-timing-function 要执行过渡的时间函数(过渡效果)它主要有以下几个属性值
        ease-in 先慢后快
        ease-out 先快后慢
        ease-in-out 开始和结束比较慢,中间快
        linear 匀速进行
4. transition-delay 过渡的延时等待,默认是0s

综合属性:
transition: CSS属性 过渡持续时间 运动曲线 过渡等待时间;

/*第二点*/
过渡的注意事项:
不能执行过渡的属性有以下几个
        1. float 
        2. position 
        3. z-index 
        4. display 
        5. visibility 
        6. font-* 除了 font-size 以外
        7. text-align/text-indent/text-transform 
        8. cursor

/*第三点*/
过渡的兼容性
1. 以谷歌为核心的浏览器它们有一个共同的特征,它们的兼容性都是在属性前面加 -webkit- 
2. 以微软的IE为核心的浏览器它们的兼容性是在属性的前面添加 -ms-
3. 以火狐浏览器为核心的它们的兼容性是在属性前面添加 -moz- 
4. 以欧朋为核心的浏览器兼容性是在前面添加 -o

变换transform

变换的时候有2D变换与3D变换,变换主要的行为有位移,缩放,旋转以及变形

位移translate

指元素的位置发生了变化
1. translateX(大小) 在水平方向发生位置移动
2. translateY(大小) 在垂直方向发生位置移动
3. translateZ(大小) 在Z轴上面发生位置移动(前提条件是要开启3D转换模式)
4. translate(X轴方向,Y轴方向) 同时在水平方向与垂直方向发生位置移动

缩放scale

元素的大小发生了变化
1. scaleX(倍数) 在X轴方向发生缩放。默认值是1,大于1则放大,小于1则缩小,等于0则缩放为0 
2. scaleY(倍数) 在Y轴方向发生缩放
3. scale(X轴缩放,Y轴缩放) 这个括号里面可以设置1个或2个值,如果设置1个,则水平方向与垂直方向相同,如果设置2个则分别代表水平方向与垂直方向各1个 4. scale3d(X轴缩放,Y轴缩放,Z轴缩放) 同时设置3根轴的缩放

旋转rotate

元素的角度发生变化
1. rotateX(30deg) 沿着X轴发生30度的旋转
2. rotateY(30deg) 沿着Y轴去发生30度的旋转
3. rotateZ(30deg) 沿着Z轴去发生30度的旋转
旋转一般以度 deg 为单位,但是也可以圈 turn 为单位进行, 1turn=360deg

变形skew

1. skewX(度数) 没X轴倾斜变形
2. skewY(度数) 在Y轴上面发生倾斜变形
3. skew(X轴度数,Y轴度数) 同时在X轴的角度或Y轴的角度发生斜体

开启3D变换

3D变换是一种特殊的变换效果,主要是通过以下两种方式来完成的
1. 通过添加视据(透视)来进行3d变换 [透视(perspective)]透视的单位是像素
	.box{
        width: 400px;
        height: 400px; 
        border: 2px solid black;
        perspective: 400px;
	}

2. 自身开启3D效果(开启Z轴效果)
	tranform-style:flat 保持2D平台空间,默认是这个值
	transform-style:preserve-3d 开启3D空间,这样自身就会形成一个Z轴空间

变换的其它属性

1. transform-origin 设置变换起点
	trasnform-orign:left;
    transform-origin:right top;
一旦设置了变换的起点位置,则在开始变的时候就会沿着这个点来进行

2. backface-visibility 设置当元素经过变换以后如果是背对着用户的时候是否显示
    visible 元素背对用户的时候显示,默认是这个属性值
    hidden 元素背对用户的时候隐藏

渐变gradient

CSS3里面的渐变指的是背景色的渐变,主要有三种渐变方式,分别是线性渐变径向渐变以及圆锥渐变 注意:渐变虽然是一个背景色,但是它不能够设置在 background-color 这个属性上面,要设置在background-image 这个属性上面(CSS3里面它把背景渐变色当成一个背景图片来处理)

线性渐变linear-gradient

语法格式如下
/* 标准写法 */
background-image: linear-gradient(to right,blue,green,red);
/* 兼容性写法 */
background-image: -webkit-linear-gradient(right,blue,green,red); 
注意:标准写法与兼容写法有区别,兼容性写法里面是没有 to 的关键字,同时它们的颜色相反

linear-gradient 代表线性渐变
	to 方向 代表沿着某一个方向发生渐变,它可以使用left/right/top/bottom 来设置方向。
	如 to right , to left top , to right bottom 等方向的后面跟不同的颜色值,不同的颜色值之间使用逗号进行隔开

渐变色的位置
/*基本写法*/
background-image:linear-gradient(to 方向,颜色1 [位置1],颜色2 [位置2],颜色3 [位置3]....);
background-image: linear-gradient(to right,red 50%,blue 70%,green 100%);

重复线性渐变
background-image: repeating-linear-gradient(to right,red 10%,blue 30%);

径向渐变radial-gradient

/*标准写法*/
background-image:radial-gradient([渐变形状],颜色1 [位置1],颜色2 [位置2]...); 
/*兼容性写法*/ 
background-image:-webkit-radial-gradient([渐变形状],颜色1 [位置1],颜色2 [位置 2]...);
渐变的形状可以设置为椭圆 ellipse 与圆形 circle

径向渐变的起点位置at
background-image: 
radial-gradient(circle at 100px 100px,red,blue,yellow)

重复的径向渐变
background: repeating-radial-gradient(red 0% 10%,blue 10% 20%,lightseagreen 20% 30%);

圆锥渐变conic-gradient

语法格式如下:
background-image:conic-gradient(颜色1 [位置1],颜色2 [位置2]......);

重复圆锥渐变
background: repeating-conic-gradient(red 0% 10%,blue 10% 20%,lightseagreen 20% 30%);
在圆锥渐变里面,如果将开始渐变的颜色与结束渐变的颜色设置为同一个颜色,这样就会形成一个无缝衔接

动画

定义动画

语法格式
/*第一种*/
@keyframes 动画名称{
    from{
        /*动画开始时候的CSS代码*/ 
    }
    to{
        /*动画结束时候的CSS代码*/ 
    } 
}
/*第二种*/
@keyframes 动画名称{
    0%{ /*动画开始*/ }
    25%{} 
    50%{/*动画执行一半的时候*/ }
    75%{}
    100%{/*动画结束*/ } 
}

调用动画

animation:动画名称 动画时间 [等待] [运动曲线] [动画方向] [次数] [暂停/播放] [停止状态]

1. animation-name 设置动画的名称

2. animation-duration 设置动画播放一次的持续时间

3. animation-iteration-count 设置动画播放的次数,它的【默认值是1】。如果希望动画一直执行下去,我们要使用 infinite 这个属性值,它代表无穷大

4. animation-timing-function 动画播放的时间函数,也叫动画的动去曲线,它的属性值与过渡的值一样,其中 linear 代表匀速,它的【默认值是ease】

5. animation-delay 动画的延时等待,它的【默认值是0】这里的动画的延时设置不仅可以设置为正数,还可以设置为负数。正数代表延时,负数代表提前

6. animation-play-state 代表动画的播放状态,它有两个属性值
        running 动画的运行状态,【默认值是这一个】
        paused 暂停状态
        
7. animation-direction 设置动画的播放方向,它有以下几个属性值
        normal 默认方向【默认值】
        reverse 逆反方向
        alternate 正反交替运行
        alternate-reverse 先反再正交替运行
        
8. animation-fill-mode 设置动画结束时候停留在哪个状态,它有三个属性值
        forwards 让动画结束的时候停留在结束状态
        backwards 让动画结束的时候停留在开始状态【默认值】
        both 开始或结束状态都可以

Animate.css动画网

使用:
	1.引入animate.css文件
<link rel="stylesheet" href="animate.min.css">
//或者href="http://www.bootcdn.cn/animate.css/"
	2. 给指定的元素加上指定的动画样式名
<div class="animated fadeInUp"></div>

弹性盒子

弹性盒子的属性

1. display:flex 当一个盒一旦设置这个属性以后它就变成了一个盒子。一个元素一旦变成弹性盒子以后,内部就会多出两根轴,分别是横轴 row 与纵轴 column

2. flex-direction 设置弹性的方向【官方的说法叫设置主轴的方向】,它的属性值有4个,默认值是 row
        row 横轴
        row-reverse 反转的横轴
        column 纵轴
        column-revrese 反转的纵轴

3. justify-content 设置内部元素在主轴上面的排列行为,它的属性值有下面几个
        flex-start 弹性开始的地方
        flex-end 弹性结束的地方
        center 居中
        space-between 使用空间撑开元素到两边
        space-around 空间环绕
        space-evenly 每个元素的空间均匀分布

4. align-items 设置内部元素在副轴上面的排列行为,它的属性值有以下几个
        flex-start 弹性开始的地方
        flex-end 弹性结束的地方
        center 居中
        baseline 文字基线对齐
        stretch 拉伸【默认值】

5. flex-wrap 当内部的元素在主轴上面排列不下的时候,通过这个属性可以设置是否换行
        nowrap 不换行【默认值】
        wrap 换行
        wrap-reverse 换行,但是要翻转方向

6. flex-flow 它是一个综合属性,结合了 flex-direction 与 flex-wrap 两个属性
    flex-flow:row wrap; /*主轴为row 并且换行*/ 
	flex-flow:column nowrap; /*主轴为column 并且不换行*/

7. align-content 多主轴设置。当弹性盒子内部的元素如果出现了换行以后,则会多出几根主轴,这个属性就是用于设置多个主轴的排列,所以这个属性也叫副轴上面的主轴排列
		flex-start 
		flex-end
		center
		space-between
		space-around 
		space-evenly 

8. align-self 设置自身元素在父级的副轴上面的排列,它的属性值与 align-items 保持一致

9. flex:数值 代表当前元素占弹性盒子剩下主轴空间的百分比,我们经常会使用它进行弹性切割

10. order 用于弹性盒子内部元素的排序,默认值都是0,值越大,越在弹性的结束的地方

弹性盒子的影响

对自身的影响
    1. 一个盒子变成弹性盒子以后, 内部会多两根轴,元素沿主轴方向排列
    2. 内部的 <br> 是不能实现的换行,即使在主轴上面排列不下了,也不换行,它会压缩内部的子元素
    3. 弹性盒子在主轴方向设置 overflow 是没有效果的
    4. 弹性盒子自身会形成一个 BFC ,它会不有 margin 穿透的现象存在

对子元素的影响
    1. 弹性盒子内部子级元素无视元素类型,所以元素都变成了 block 块级元素
    2. 弹性盒子内部的子级元素宽度主轴大小会丢失(宽度丢失),副轴会拉伸,但是仍然可以通过width/height 去设置宽度与高度
    3. 弹性盒子内部的子元素仍然可以使用定位,但是就是不能使用浮动

移动端布局

1. 视口的设置
视口指的是网的展示窗口叫 viewport ,我们在进行移动端的网页开发之前,我们一定要设置视口。视口设置如下
<meta name="viewport" content="width=device-width, initial- scale=1.0,user-scalable=no,minimum-scale=1.0,maximum=1.0">
        width=device-width 设置视口的宽度与设备的宽度相同
        initial-scale=1.0 设置初始缩放1.0
        user-scalable=no 设置不允许用户缩放
        minimum-scale 设置最小缩放
        maximum-scale 设置最大缩放
		initial-scale 缩放

2. 全屏盒子的设置
		(1) 使用固定定位
		固定定位一定以浏览器为标准,设置宽度与高度的时候就以浏览器为参照。而这个时候的浏览器就因为设置了 viewport 所以就与设备保持一致了
		(2) 设置html,body的方式(使用较多)
		html,body{ height: 100%; }
		#app{
            width: 100%;
            height: 100%;
            background-color: deeppink;
		}
		(3)使用CSS3的新单位vw、vh来进行(常用)
		(4)采用非标准模式开发(不推荐使用)
		去掉了头部声明 <!DOCTYPE html> 这个时候就采用了非标准模式,而非标准模式下面HTML的高度就是100%

3.移动端尺寸
  		320px           375px            	414px      768px
Motro/iphone5         iphone 6/7/8
(1)物理分辨率:横向像素个数*垂直像素个数
(2)DOR:设备像素比,由厂商设置,一般都为2,也有3,1.5
(3)PPI:屏幕像素密度
(4)device-width(逻辑分辨率):物理分辨率/(DPR*scale)
(5)scale:屏幕缩放比例。默认为1
(6)移动端设计稿尺寸一般为640px或者750px

移动端布局解决方案

(1)流式布局(百分比布局)
	将heigth,width,padding,margin不用固定数值,改用百分比
(2)rem布局
	1.rem:font size of the root elment简写---相对根元素的font-size大小 本质:1rem默认为16px,将宽高等用rem替代
一般将1rem换算为100px or 10px
	2.换算:device-width/ 设计稿尺寸 *100 or 10(移动端设计稿一般为640或750)
	3.设置rem:
 		/1.通过js设置rem
	    var srceenW=window.getComputedStyle(document.body,null).width.replace("px","");
document.docuemntElememt.style.fontSize=screenW/750*100+'px';
			//750为设计搞宽度
		/2.通过calc设置rem
	font-size:calc(100vw /750 *100);//1rem=100px
		/3.media媒体查询

App布局规范

1. App的titleBar与tabBar应该都是固定的
2. 在布局之前最好弄清楚页成结构,如果需要实现页面或盒子切割可以直接使用弹性切割
3. App布局优先使用弹性布局
4. 移动端尽量不要设置固定宽度,使用元素的特性让它自动展开宽度【块级元素的宽度默认就是父级的100%】 5. 移动端尽量不要设置盒子宽度为 100% ,如果不设置这个固定宽度则我们可以通过 margin 去压缩这个盒子的宽度

媒体查询和响应式布局

媒体查询

​ 媒体查询可以通过css实现响应式布局中最重要的一步,它可以根据屏幕的大小自动的做出样式调整

内部引入
@media only 媒体类型 and (min-width:最小宽度) and (max-width:最大宽度){ /*这里写CSS代码*/ }

	媒体类型mediatype;all 所有媒体类型
			printer 打印机或打印机预览
			speech 屏幕阅读器等设备
			screen 电脑 平板 手机...
外部引入
<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="xxx.css">
	media feature参数:device-width/height:设备宽高
						width/height:浏览器可视宽高
						orientation:portrait---竖屏
						orientation:landscape---横屏
/*设备屏幕在0~768px之间*/ 
@media only screen and (min-width:0px) and (max-width:768px){ .box{background-color:red; } }
/**设备屏幕大于或等于769px*/ 
@media only screen and (min-width:769px){ .box{background-color:blue; } }

响应式布局

优点:
	面对不同分辨率设备灵活性强
	能够快捷解决多设备显示适应问题
缺点:
	兼容各种设备工作量大,效率低下
	代码累赘,会出现隐藏无用的元素,加载时间过长
	
posted @ 2022-03-24 21:10  残星落影  阅读(147)  评论(0)    收藏  举报