html
写在前面
页面是承载“素材”,并操纵“素材”,以使其成为网上的“印刷品”。把数据放在规定的盒子里打上相应的标记,才能通过选择器选择,通过 css 进行排版。HTML 只有两种:块级和内联。前者用来布局,后者用来存放内容。
关于布局,标签出现了语义化,关于 div 它还有些个很严重的事情,可以携带数据,可以成为苹果依然兼容的输入框
总体
- web 标准:结构,表现,行为
- 块级元素:自动占满父元素的宽度,独自占一行。
- 内联元素:不能定义宽高,宽度由内容撑起。
基本结构
<!DOCTYPE html>
<!-- 命名文档类型,不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。 -->
<html>
<!-- 说明写的是标记语言 -->
<head>
<meta charset="utf-8" />
<!-- 编码格式(乱码) -->
<meta
name="viewport"
content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
/>
<!-- 以最新翻译 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit" />
<title>状态栏里的名称</title>
<style type="text/css"></style>
<!-- 被浏览器加载时加载,快,支持旧版本,
当用js控制DOM去改变样式时只能用link标签-->
<link rel="stylesheet" type="text/css" href="" />
<!-- 这个结构里面不能有其他东西,旧版本浏览器不支持,DOM不可控制,
等页面全部下载完时再被加载,有时开始会无样式 -->
<style type="text/css">
@import url();
</style>
</head>
<!--常规标记,属性不分先后(空标记,如<img />)-->
<body></body>
</html>
段落
<!-- 标题 -->
<h1>标题</h1>
<!-- 水平线,块元素 -->
<hr />
<!-- 段落 -->
<p>
<b>加粗</b>
<strong>加粗,强调</strong>
<br />
<!-- 强制换行,文本专用 -->
<em>倾斜</em>
<i>倾斜</i>
<!-- 空格 -->
<span>一小段字</span>
<img src="../aa.jpg" alt="替换文本" title="鼠标放上的提示信息,大多数标签都有" />
<a href="目标文件路径及全称/链接地址" title="提示文本" target="_blank"></a>
</p>
列表
<ul type="1" type="a">
<li>转为有序</li>
<!-- 块级 -->
</ul>
<ol>
<li></li>
</ol>
<dl>
<dt>名词或图片</dt>
<dd>解释</dd>
</dl>
表格
<table rules="rows/cols/all/none/groups"> <!-- rules: 组分割线 -->
<caption>表格标题</caption>
<thead>仅一个</thead>
<tbody>多个</tbody>
<tfoot>仅一个</tfoot>
<colgroup span="指定相邻几列为一组">
决定表格内部分割线rules应该处于的位置</colgroup>
<col span="3">
<tr>
<th>表格列标题</th>
</tr>
<tr align="center"> <!-- 行 -->
<!-- 合并列,合并行 -->
<td colspan="2" rowspan="2">单元格</td>
</tr>
<!-- cellspacing="单元格之间的间距";
cellpadding="单元格,内容之间的间距"-->
</table>
表格的 css 属性
border-spacing: 单元格间距;
border-collapse: separate(边框分开)/collapse(边框合并);
empty-cells: show/hide;(无内容单元格);
table-layout: auto/fixed(固定宽高);
caption-side: top/right/bottom/left;(表格标题位置)
表单
<!-- 表单域(表单元素必须写在表单域中)-->
<form name="表单名称" method="post/get" action="index.jsp">
<fieldser>
<!-- 可以嵌套别fieldser -->
<legend>必须是fieldser的第一个元素,标题</legend>
</fieldser>
<label for="绑定控件的ID名"></label>
<input type="text" value="要输入内容的默认值" placeholder="" />
<input type="password" value="" />
<input type="submit" value="提交内容" />
<input type="reset" value="" />
<input type="radio" name="名字相同说明处在同一组,关联,不显示" checked="checked" checked="disabled" />
<input type="checdbox" disabled="disabled" />
<input type="button" value="跳转但不提交" />
<textarea name="" cols="字符宽度" rows="行数"></textarea>
<select name="下拉菜单">
<option>框上内容为第一个option上的内容</option>
</select>
</form>
css
选择器
css 权重: 行内样式(1000)> ID(100) > 类,属性,伪类(10)> 元素,伪元素(1)> *(0)
基本选择器: 通配符选择器,元素选择器,类选择器,ID 选择器,后代选择器(空格)
新增基本选择器:
子元素选择器:父元素 > 子元素(不包括孙子),
相邻兄弟选择器:元素 + 兄弟相邻元素(同一个父元素,紧邻在该元素后面),
通用兄弟选择器:元素 ~ 所有兄弟(选择有同一个父元素的后面的所有兄弟元素,前面的不选),
群组选择器:逗号(换行)
- 属性选择器:对带有指定属性的 HTML 元素设置样式
Element[attribute]:a[href] {选择有href属性的a标签};
Element[attribute = "value"]:a[href = "#"] {选择带有href属性且值为#的a标签}
Element[attribute ~= "value"]: a[class ~= "two"] {选择带有class属性且多个属性值中有一个是two的a标签}
<a class="one two"></a><a class="two three"></a>(含有two就会被选中)
Element[attribute ^= "value"]:a[href = "#"] {选择属性为href且值以value开头的所有元素}
<a href="#1"></a><a href="#2"></a><a href="#"></a>
Element[attribute $= "value"]:a[href = "#"] {选择属性为href且值以value结尾的所有元素}
Element[attribute *= "value"]:a[href = "#"] {选择属性为href且值含有#的所有元素}
Element[attribute |= "value"]:a[href = "#"] {选择属性为href且值以#或者“#-”开头的所有元素}
<a href="#" ></a><a href="#-1" ></a>
- 伪类选择器:
动态伪类:不存在于HTML中,只有当用户和网站交互时才体现出来
锚点伪类::link, :visited;
用户行为伪类::hover, :axtive, :focus(a:hover{} input:focus{})
UI元素状态伪类:
:enabled, :disabled, :checked(只有欧朋兼容);(input:enable{} input:disable{})
结构类::nth(被选的Element)
Element:first-child, {不管相对于那一级别,只要长子是,该长子就被选中,一般配合子元素选择器用:section > div:first-child;section下面的第一个div},
Element:last-child, {如果最后一个孩子不是指定的element,则不起作用。即,先找最后一个元素,在从中找element指定的元素匹配}
Element:nth-child(n), 同样先找孩子,如果是对应的标签则起作用。ul > li:nth(3){从1开始数}
n:具体的数字,或者一个表达式2n,2n+1,2n-1,3n+1(只能是加减),odd(奇数)even(偶数)
Element:nth-last-child(n), 同上,倒数
Element:nth-of-type(n),{匹配特定类型的第几个,也就是,先看类型再计数}
Element:nth-last-of-type(n),
Element:first-of-type,
Element:last-of-type,
Element:only-child,(匹配该独子)
Element:only-of-type,(匹配类型独子,即指定的元素是唯一的一个)
Element:empty(匹配没有子元素包括文本节点的每个元素)
否定选择器:
父元素:not(子元素):nav > a:not(:last-of-type) {border-right: 1px solid red}最后一个a标签没有边框
- 伪元素:两个冒号一个也行
element::first-line{对element元素的第一行文本进行格式,只能用于块级元素}
element::first-letter{对element元素的第一个字进行格式,只能用于块级元素}
element::before{在元素的内容前面插入新内容,常用content配合使用}
div::before{content: "ssss";任何CSS属性}(该伪元素是div的第一个子元素,且是行级元素,内容通过content写入)
element::after{element的最后一个元素,常清除浮动。父容器高度为0则是塌陷,要清除浮动。display: block;cntent: "";clear:both;}
element::selection{设置在浏览器中选择文本后的背景色和前景色。background: red;color: #fff;}
css 边框和圆角
* 圆角:border-radius:1-4个具体值或百分比;(4值:顺时针,左上;3值:左上,两个,右下;2值:对角)
```css
border-radius: 10px;
border-radius: 50%;
border-top-left-radius:;
border-top-right-radius:;
border-bottom-right-radius:;
border-bottom-left-radius:;
/* (案例:圆角+伪类,思考的形状) */
```
* 盒阴影:
```css
box-shadow:水平偏移量(右下为正) 竖直偏移量 模糊(无负值) 扩展 阴影颜色 内外阴影控制;
box-shadow: 50px 30px 0 0 yellow;
/* (默认外阴影,insert为内阴影)
叠加了一层div
内阴影里也会有字 */
```
* 边界图片:
```css
border-image:source slice width outset repeat;
border-image-source: url("./s.jpg");
border-image-slice: number|%|fill;/*(指定图像的边界向内偏移,把背景图片九宫切开,放大填充)*/
border-image-width: 30%;/*(和上面的相反)*/
border-image-outset: length|number(2);
border-image-repeat: repeat|stretched(拉伸)|rounded(铺满)|initial|inherit;
```
背景
background: color position size repeat origin clip attachment image;
/*(背景图像区域)*/
background-clip: border-box|padding-box|content-box;
/*(指定background-position属性应该是相对位置(左上))*/
background-origin: border-box|padding-box|content-box;
background-size: cover|contain|百分数|length;
/*(放在前面的图会覆盖后面的图)*/
background-image: url(), url();
渐变
在两个或者多个颜色之间显示平稳的过渡
* 线性渐变
/*(默认方向从上到下)*/
background: linear-gradient(direction, color-stop1,……);
background: linear-gradient(red, blue);
/* 各内核写法不同 */
background: -webkit-linear-gradient(begin-direction,color-stop1,color-stop2,..);
background: -moz-linear-gradient(end-direction,color-stop1,color-stop2,..);
background: -o-linear-gradient(end-direction,color-stop1,color-stop2,..);
background:linear-gradient(to end-direction, color-stop1, color-stop2,..);
background:linear-gradient(to right, color-stop1, color-stop2,..)(从左到右)
/* 对角写法(各核同上) */
background:linear-gradient(to right bottom, color-stop1, color-stop2,...)(从左上到右下)
/* 角度 */
background: linear-gradient(angle,color-stop1,color-stop2,..)
background: linear-gradient(45deg,red,blue)
/* 多个颜色,占比不同 */
background: linear-gradient(90deg, red 10%, yellow 30%, blue 20%, green)
/* 透明度渐变 */
background: linear-gradient(90deg, rgba(255,0,0,0),rgba(255,0,0,.9))
/* 重复渐变 */
background: repeating-linear-gradient(color1 length|percentage,color1 length|percentage,...)
background: repeating-linear-gradient(90deg, red 0%, blue 10%, red 20%)
* 径向渐变
background: radial-gradient(center,shape size,start-color,...,last-color)
shape: circle(圆) 椭圆(默认)
size: closest-side:最近边;farthest-side:最远边;closest-corner:最近角;farthest-corner:最远角
background: radial-gradient(red, yellow, blue);(默认,中心在原点)
background: radial-gradient(red 10%, yellow 50%, blue 70%);(默认椭圆,中心在原点)
background: radial-gradient(closest-corner circle, red, blue)
background: radial-gradient(30% 70%, closest-corner circle, red, blue)
background: repeating-radial-gradient(red 0%, blue 10%, red 20%)
/* 案例 */
background-color: #abcdef;
background-size: 100px 100px;
background: linear-gradient(45deg, red 25%, transparent 25%),
linear-gradient(-45deg, red 25%, transparent 25%),
linear-gradient(45deg, transparent 75%,red 75%),
linear-gradient(-45deg, transparent 75%, red 75%);
CSS3 转换 transform(静态摆放)
transform: none(默认) | transform-function [可以跟好几个]
- 2D 函数
rotate(角度正数顺时针,负数逆时针) :transform: rotate(-45deg);
translate(x,y)
transform(200px, 200px) 只有一个参数,第二个默认为0
translateX(200px)|(50%)正右
translateY(200px)|(50%)正下
scale(x, y) 缩放比例
scale(.5, .5)
scaleX(.5) 往中间缩
scaleY(.5) 中间的那一条线不变
skew(x, y)
skew(15deg, 15deg)
skewX(15deg) 平行四边形,正逆时针,负值顺时针
skewY(90deg) 90deg消失, 像指针一样转动
- 3D 函数
rotate3d(x,y,z,angle):参数不许省略,前三个分别代表旋转方向0不转1转。都不是0,可以是小数,代表角度是deg的多少倍
rotateX(90deg) 90deg消失
rotateY(45deg)
rotateZ(45deg) 正顺时针
translate3d(x, y, z)都不能省略
translateZ(200px)
scale3d(x, y, rotateZ)都不能省略
scaleZ(.5)
/* (可以是百分数)坐标原点 */
transform-origin:left top;
/* 指定嵌套元素怎样在三维空间中呈现,没有它3d无作用,设置在父元素上 */
transform-style:flat(默认) | preserve-3d;
/* 指定观察者距离[z=0]平面的距离,使具有三维位置变换的元素产生透视效果 */
perspective:none | number;
/* 指定透视点的位置,默认50% 50% */
perspective-origin:x-axis y-axis;
/* 元素背面面向用户时是否可见。 */
backface-visibility:visible | hidden;
transition 动画需要事件触发,animation 不需触发
CSS3 过渡
transition:允许 CSS 属性值在一定时间区间内平滑的过渡。在鼠标单击、获得焦点、被点击或对元素有任何改变时触发,并平滑的以动画效果改变 CSS 的属性值
transition-property: none|all(默认)|具体属性的名称;
指定参与过渡的属性transition-duration: time(20s);
过渡持续时间transition-timing-function: ease(平滑)|linear(线性) |ease-in(慢到快)|ease-out(快到慢)|ease-in-out(慢快慢)|step-start(步数)|step-end|steps(
)
|cubic-bezier(number, num, num, num);
过渡的动画类型,只可以选一个transition-delay: 0.4s;
延时transition: property duration timing-function delay;
transition: transform 2s ease-in-out 1s;
CSS3 动画
animation: 使元素从一种样式逐渐变化为另一种样式的效果. 顺序:优先判断 name,duration.其他不用按顺序
/* 设置对象所应用的动画名称 */
animation-name:none(指定有无动画,可用于覆盖从级联的动画)|keyframename(指定要绑定到选择器的关键帧的名字);
/* 用关键帧定义动画(指定属性和属性值),用animation-name来调用 */
div { animation-name: animation1;}
@keyframes animation1 {
/* 0-100%; from === 0%,to === 100% */
from { transform: rotateX(0deg);}
to { transform: rotateY(360deg);}
}
animation-duration:.5s;过渡持续时间
animation-timing-function:linear|ease|ease-in|ease-out|ease-in-out|step-start|step-end|
animation-delay: .5s;延时
animation-iteration-count:infinite(无限循环)|number(循环次数);
animation-direction: normal|reverse|alternate(先正常运行再反向运行持续交替,要循环,否则失效)|alternate-reverse(与3相反)|initial|inherit ;
animation-fill-mode:none(不设置动画之外的状态delay也算)|forwards(设置对象为动画结束状态)|backwards(开始状态)|both(开始或结束状态);动画不播放时的选值
animation-play-state:paused(动画暂停)|running(默认,指定正在运行的动画);
animation:name duration timing-function delay iteration-count direction fill-mode play-state;
- will-change 原理:提前通知浏览器元素要做什么动画,让浏览器提前准备合适的优化设置 优化: 1:position-fixed 代替 background-attachment 2:带图片的元素放在伪元素中 3:巧用 will-change. 3D 才会触发加速引擎。加上 translateZ(),占内存
will-change:
auto(无特别指定要将做什么动画,只是纯粹的请求)
|scroll-position(将要改变元素的滚动位置)
|contents(将要改变元素的内容)
|<custom-ident>(明确指定将要改变的属性与给定的名称,如transiton)
|<animateable-feature>(可动画的一些特征值,如left,top,margin)
will-change: transform;
will-change: top;
will-change: margin;
要remove掉。