DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>html教学title>
head>
<body>注释内容
页面内容
body>
html>
以上是html文件最基本的内容
用代码编辑器打开或者txt后缀文件打开
将后缀改为html,双击即可运行
注释代码如下,用包裹, 页面那里都可以填写
超文本标记头
DOCTYPE html>
html标签:用来包裹全部文件元素
<html>html>
head标签:用来包裹描述网页信息
<head>head>
body标签:用来包裹页面内容
<body>body>
以上为一个html必须拥有的标签
meta标签:用来描述页面信息,必须写在head标签里面
https://juejin.cn/post/6844903543766253575
<meta charest="utf-8">
<meta keyword="关键字">
<meta name="author" content="作者">
<meta name="description" content="desc">
<meta name="keywords" content="关键1, 关键2">
<meta name="robots" content="all">
<meta name="renderer" content="webkit">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width;initial-scale=1">
<meta name="viewport" content="width=device-width;initial-scale=1;user-scalable=no;shrink-to-fit=no">
<meta name="format-detection" content="email=no">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="refresh" content="" />
<title>浏览器tab内容title>
<link rel="" type="" href="" size="">
概念一
块元素:拥有宽度,高度,无法于其他元素同行存在
文字块元素(p,h1)不能包含块元素,否则会出现bug
行内元素:没有宽度,高度,如现在的字体,可以一行存在
行内元素不能包含块元素,否则行内元素会变成块元素
行内快元素:有宽度,有高度,还能和其他元素一行存在
概念二
正常块元素盒(标准盒模型)
拥有自身宽高,边框宽度,对边框外面其他元素的距离(margin),对边框内部内容的距离(padding)
内外边距
元素标签
<div>内容div>
<p>用来填写文字的元素p>
<span>行内文字标签span>
<img src="图片地址" alt="图片描述文字" title="提示文本">
<a href="链接地址/元素id" target="_self/blank" title="提示文本" download="下载文件的保存路径">点击跳转的链接文本a>
有序列表ol:例如
<ol type="1" start="1">
<li>有序列表1.....li>
<li>有序列表2.....li>
ol>
无序列表ol:例如
<ul type="">
<li>无序列表1......li>
<li>无序列表2......li>
ul>
级别列表dl, dt, dd
<dl>
<dt>名称dt>
<dd>蒲坝站dd>
<dt>级别dt>
<dd>四等车站dd>
<dt>业务dt>
<dd>办理旅客乘降dd>
<dd>办理行李,包裹托运dd>
<dd>办理整车货物发到dd>
dl>
<table border="2" rule="all">
<caption>表格标题caption>
<thead>
<tr>
<th>表头1th>
<th>表头2th>
<th>表头3th>
tr>
thead>
<tbody>
<tr>
<td rowspan="2">1,2行1列td>
<td colspan="2">2行2,3列td>
tr>
<tr>
<td>2行2列td>
<td>2行3列td>
tr>
tbody>
table>
<form name="表单名称" method="post/get" action="路径" enctype="multipart/form-data">form>
<fieldset>
<legend align="left">边框上文字legend>
<div>内部内容div>
fieldset>
<fieldset>
<legend>你的legend>
<label for="">namelabel>
<input type="text" placeholder="文字提示" disabled>
<label>passwordlabel>
<input type="password" placeholder="文字提示">
<input type="submit" value="登录">
<input type="reset" value="重置">
<input type="button" value="按钮">
<input type="checkbox">多选1
<input type="checkbox">多选2
<input type="radio" name="radio">单选1
<input type="radio" name="radio">单选2
<input type="file" multiple>
<input type="text" list="data">
<input type="hidden" name="id" value="id01" />
<datalist id="data">
<option value="1">option>
<option value="2">option>
datalist>
fieldset>
<select name="">
<option value="1">option>
<option value="2">option>
<option value="3" disabled>option>
select>
<textarea name="" id="" cols="30" rows="10">2134567textarea>
<video src="视频路径" controls poster="图片路径">
<source src="路径" type='video/mp4'>
<source src="路径" type='video/ogg'>
<source src="路径" type='video/webm'>
video>
<audio src="音频路径" controls poster="图片路径">
<source src="路径" type='video/mp3'>
<source src="路径" type='video/ogg'>
audio>
备注:
js获取video元素后控制:如 元素.play()
js
控制播放:play();js
控制暂停:pause();js
控制音量变量:volume
js
控制进度变量:currentTime
js
播放速度变量:playbackRate
js
播放器全屏/退出全屏:
e.webkitRequestFullScreen()/document.webkitCancelFullScreen()
e.mozRequestFullScreen()/document.mozCancelFullScreen()
e.requestFullscreen()/document.exitFullscreen()
<marquee behavior="" direction="">marquee>
- behavior:alternate(晃动)&scroll(滚动)&slide(到边停)
- direction:四个方向
- height
- width
hspace=''
设置水平边距。vspace=''
以像素或百分比值设置垂直边距。- loop=‘数’(次数)
scrollamount='数px'
(滚动长度,默认6)scrolldelay='数'
(滚动间隔,单位毫秒)
<iframe
src="网站"
frameborder="0/1" (周围边框)
scrolling="yes/no"(滚动条)
name=""
height=""
width=""
>
iframe>
<b>b>:加粗
<i>i>:斜线
<u>u>:下划线
<del>del>:删除线
<mark>mark>:高亮
<sup>sup>:上标
<sub>sub>:下标
<br/>:换行;
<hr/>:空标记,一条长长的横线;
:空格;
> :>右大于号
< :<左小于号
© :网页版权所有
:定义页面独立的内容区域。
:定义页面的侧边栏内容。
:规定独立的流内容(图像、图表、照片、代码等等)。
:定义
:定义页脚,就是
:定义页头,就是
:高亮
:进度条
:定义导航,就是
:任务进度条
:拼音注释
<ruby>
汉 <rp>(rp><rt>Hanrt><rp>)rp>
字 <rp>(rp><rt>zirt><rp>)rp>
ruby>
:就是一个
div
标签写完了,给标签添加样式
内敛写法
<body>
<div style="color: red; font-size: 12px">123div>
body>
在style标签里单独写
<style>
div {
color: red;
font-size: 12px;
}
/* css的注释 */
style>
<body>
<div>123div>
body>
写在.css后缀文件里面,用link标签引入使用
/* 这是index.css文件 */
div {
color: blue;
font-size: 20px;
}
<head>
<link rel="stylesheet" type="text/css" href="./index.css">
head>
<body>
<div>123div>
body>
此时就会出现问题,多个div怎么分辨,就需要打上标记,用过滤器筛选处理
*通配符选择器:* {}
:匹配所有元素
元素选择器:div {}
:选中所有div元素,其他元素也一样
交集选择器:p.one {}
:选择 类名位one的p元素
群组(并集)选择器:html, body { }
多个过滤器一起使用,用逗号隔开
后代选择器:h1 em {}
:选中h1下面全部的em
*父子选择器:ul > li { }
:选择ul下面的li,父>子>孙
,可以准确筛选
兄弟选择器:E+F
:选择E元素后面的第一个相邻的F元素
兄弟们选择器:E~F
:选择E元素后面的所有相邻的F元素
*id选择器:#id名 {}
:一个元素只能设置一个id,且id名不能重复
<style> #div { color: red } style>
<div id="div">123div>
*class选择器:.class名 {}
<style>
.box { color: red }
.div { font-size: 20px }
style>
<body>
<div class="box">123div>
<div class="box div">456div>
body>
*多个相同标签且相邻选择器—同一个父元素
E:first-child{}
E:last-child{}
E:nth-child(数字/odd/even/函数式){}
正向查询
E:nth-last-child(数字/odd/even/函数式){}
逆向查询
案例:
div:nth-child(1) {}
span:nth-child(odd) {} /* 选择所有奇数 */
p:nth-child(even) {} /* 选择所有偶数 */
s:nth-child(n) {} /* 选择所有元素 */
i:nth-child(2n) {} /* 选择2n元素 -- 函数式 */
a:nth-child(2n-1) {} /* 选择2n-1元素 -- 函数式 */
img:nth-child(3n) {} /* 选择3n元素 -- 函数式 */
*多个相同标签不相邻选择器—同一个父元素
将child换成of-type即可,of-type完全可替代child
*伪类选择器
1、a:link{}
:选择前
2、a:visited{}
:选择后
3、a:hover{}
:鼠标悬浮
4、a: hover 子元素{}
:通过父元素的hover效果控制子元素
4、a:active{}
:鼠标点击
5、div,a:hover{}
:div为默认点击的效果
6、a:focus
{}:被激活的选择器
7、input:focus-within
:它或者它子节点获取焦点后选择器
8、E:not(#id名)
{}:除自己外的所有元素
注:这是所有元素都能使用,不仅是a标签。
锚点选中标签:
:target {}
伪类选择器
E:enabled{}
:可选中的inputE:disabled{}
:不可选中的inputE:checked{}
:选则被点击的E::selection{}
:选择被选中的option或者文字E::first-letter {}
:选择第一个文字E::first-line {}
:选择第一行文字属性选择器
E[title] { color: red }
E[title='box'] { color: red }
E[title^="bo"] { color: red }
E[title$="ox"] { color: red }
E[title*='o'] { color: red }
权重,就是那个过滤器更厉害
内联>style>外联
内联>id选择器>class选择器>标签选择器>通配符选择器。
1000>0100>0010>0001>0000
大小:font-size:16px;
(一般默认16px)
字形:font-family:'微软雅黑';
外部引入字形
@font-face {
font-family: Lata;
src: url(字体路径)
}
/* 这样就可以是使用外部引入的字体了 */
div {
font-family: 'Lata';
}
倾斜:font-style:italic;
(italic/oblique为倾斜,normal为默认正常)
加粗:font-weight:500;
(bold为加粗,normal为正常,或100到900整百调整)
大写字母小型:font-variant:small-cap;
复合:font: [italic] [bold] 16px/16px ‘’;
颜色:color:red;
(或rgba/rgb
或#fff
)
行间距:ling-height:16px;
间距:中文:letter-spacing:1px;
英文:word-spacing:1px;
防止选取:user-select: auto|none|text|all
;跟随浏览器|不可选取|可选取|单击选取
unicode字体:font-family: '\5B8B\4F53'
字体名称 | 英文名称 | uniCode编码 |
---|---|---|
宋体 | SimSun | \5B8B\4F53 |
微软雅黑 | Micosoft YaHel | \5FAE\8F6F\96C5\9ED1 |
居中对齐:text-algin:center;
(center为居中,left为左对齐,right为右对齐,justify为两端对齐)
垂直居中:vertical-align: middle;
大小写:text-transform:none;
(uppercase为大写,lowercase为小写,capitalize为首大写,none为正常)
下划线:text-decoration:none;
(underline为下划线,overline
为上划线,line-line-through为删除线,none为正常)
缩进:text-indent: 1em;
(缩进,单位:1em = 1个字符,数值为负时隐藏)
省略:text-overflow:clip;
clip为不显示省略号,仅溢出隐藏;ellipsis为溢出且显示省略
文本阴影:text-shadow: 2px 2px 2px red;
水平 垂直 模糊度 阴影颜色
多阴影设置:凹凸文字
white-space
white-space: normal;
white-space: nowrap;
white-space: pre;
white-space: pre-wrap;
white-space: pre-line;
white-space: inherit;
word-break
粗暴换行:word-break:break-all;
直接按顺序排列内容,超出部分直接换行
智能换行:word-break:keep-all;
先尝试把内容放下一行,放不下时才换行
单行省略号
width: 100px; /* 必须由宽度 */
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
多行省略号
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 4; /* 设置显示行数 */
-webkit-box-orient: vertical;
图片比字体高:图片设置浮动
线上文字(线上元素同理):
<style>
.hrBox > hr {
width: 47%;
float: left;
}
.hrBox > span {
float: left;
}
style>
<div class="hrBox">
<hr/><span>123span><hr/>
div>
list-style-type: none;
(disc默认,circle空心圆,square方)list-style-image: url();
list-position: outside;
(outside在li外,inside在里)list-style: none;
border-collapse: collapse;
border-spacing: 0px
; (单值: 格间距,0px 0px
列间距 行间距)empty-cells: hide/show/inherit;
(隐藏/显示/继承)table/layout: auto/fixed;
(自动/固定)margin-left: 1px
; (只设置左margin,其他top, right, bottom, left)margin: 1px;
上下左右都设置margin 为1pxmaring: 1px 2px;
上下设置1px, 左右设置2pxmaring: 1px 2px 3px;
上1px 左右2px 下3pxmargin: 1px 2px 3px 4px;
上1px 右2px 下3px 左4pxpadding
: 同maringmargin: 0 auto;
: 上下0px,左右自动,实现水平居中(浮动元素无效)宽度设置:width: 100px;
(单位:px, %, 其他)
填充父元素宽度:width: fill-availabl;
行内块元素宽度填充元素,又能使用line-height
垂直居中
根据内容宽度变化:width: fit-content;
宽元素宽度由内容宽度撑开,但不浮动
高度设置:height: 100px;
(单位:px, %, 其他)
边宽设置:border-width: 1px;
边框颜色:border-color: red;
边框样式:border-style: solid;
(值:solid(实线),dashed(虚线),dotted(点线),double(双线))
取消边框:border: none;
边框复合设置:border: 1px solid #000;
(宽度 样式 颜色)
单个设置:border-bottom: 1px;
(其他:top, rigth, bottom, left)
单个复合设置:border-bottom: 1px solid red;
单个取消:border-bottom: none;
边框弧度设置:border-radius: 50% ;
(单位:px, %)
弧度多个设置:border-radius: 20px 10px 30px 40px;
1个值是4个角, 2个值: 第一(左上)(右下), 第二(右上)(左下)
3个值: 1(坐上), 2(右上)(左下), 3(右下), 4个值:四个角
单个边设置:border-top-width: 1px solid red;
单个角设置:border-top-left-radius: 5px;
相贴的两条边合并:border-collapse: collapse(合并)/separate(分开 默认)
表格table可以通过这个合并边框
border-image
:略
占据maring的位置,不会影响元素的布局位置
轮廓颜色:outline-color: red;
轮廓样式:outline-style: none;
值 | 描述 |
---|---|
none | 默认。定义无轮廓。 |
dotted | 定义点状的轮廓。 |
dashed | 定义虚线轮廓。 |
solid | 定义实线轮廓。 |
double | 定义双线轮廓。双线的宽度等同于 outline-width 的值。 |
groove | 定义 3D 凹槽轮廓。此效果取决于 outline-color 值。 |
ridge | 定义 3D 凸槽轮廓。此效果取决于 outline-color 值。 |
inset | 定义 3D 凹边轮廓。此效果取决于 outline-color 值。 |
outset | 定义 3D 凸边轮廓。此效果取决于 outline-color 值。 |
inherit | 规定应该从父元素继承轮廓样式的设置。 |
轮廓宽度:outline-width: 5px;
浮动由来:为了让图片或其他行内块元素和文字实现文字环绕效果
设置:float: left;
(left为左浮动,right为右浮动)
效果1:没有设置宽度的元素: 宽度=内容宽+padding+border
效果2:会覆盖未浮动和绝对定位元素上面
效果3:浮动元素父元素未设高:父元素高=未浮动元素高累加,高度塌陷
解决3:高度塌陷解决:父元素设置:overflow: hidden;
清除浮动:clear:left
(值:left/rigth/both)
父元素的浮动子元素后面添加一个空元素,空元素css设置clear: both;
/* 清除浮动,解决高度塌陷 */
.fatherDiv::after {
content: '';
display: 'table';
clear: both;
}
/* 封装统一的clearfix */
.clearfix::before, .clearfix::after {
content: '';
display: 'table';
}
.clearfix::after {
clear: both;
}
解决图片和文字行高问题:图片设置:float: left;
颜色:background-color: 颜色值;
背景图片:background-image: url(图片链接);
背景图片渲染:background-repeat: repeat;
repeat(平铺重复,默认),no-repeat,repeat-x(水平重复),repeat-y
背景图片位置:background-position: 0px 0px;
值1水平,值2垂直。单位:px, %。还可以为单词:center, left
背景固定:background-attachment: scroll;
值:scroll(背景图随其他子元素一起滚动), fixed(背景图不滚动)
背景图片大小:background-size: 100% 100%;
一个值:background-size: 最长边;
设置图片最长边宽度,等比例缩放,可以是100px;也可以是50% 收缩未图片本身的50%
两个值:background-size: 宽 高;
一个关键词:
background-size: cover;
图片等比例放大到填充满全部背景,放大多余的部分被裁剪掉。background-size: contain;
图片等比例放大到填充背景,图片保持完整的在背景部分。直接使用:background: red;
背景裁剪:background-clip
,可以设置不包含padding的背景
border-box,padding-box, content-box
复合使用:
background: 颜色 图片 平铺 背景固定 背景定位/图片大小
多背景设置
注:背景颜色必须在最后一个设置
backgrount: url(test1.jpg) no-repeat scroll 10px 20px/10px 10px,
url(test2.jpg) no-repeat scroll 20px 30px/10px 10px,
url(test3.jpg) no-repeat scroll 30px 40px/10px 10px #f3f3f3;
运用:特殊技巧
其他:还有其他的背景属性设置,略
rgba(0, 0, 0, 0.5);
opacity: 0.6;
值范围:[0, 1]border: transparent;
border颜色透明visibility: hidden;
效果和 opacity: 0;
一样,占位隐藏。box-shadow 的原理是:元素添加新的层(layer),这一层位于元素本身下,并且仅有阴影(没有内容)。它是一个半透明的,且可以调整大小及颜色的影子
效果:box-shadow: 0px 0px 0px 0px red inset/outset
水平 垂直 模糊度 阴影大小 阴影颜色 内外阴影
多个配置:box-shadow: 0px 0px 0px 0px red outset, 0px 0px 0px 0xp red outset;
多个配置和其他多个配置顺序一样。
月牙特性:
.box {
width: 400px;
height: 400px;
background-color: #456685;
box-shadow: -81px -53px 0px 0px yellow inset;
border-radius:50%;
}
loading动画
参考《html基础知识、核心技术与前沿案例》9.2.4章节
overflow: visible;
overflow: hidden;
overflow: scroll;
overflow: auto;
overflow-x: auto;
overflow-y: auto;
链接文档
链接文档2
相对定位:position: relative
; (占位)
绝对定位:position: absolute;
(不占位,类浮动)
固定定位:position: fixed;
(不占位)
粘性定位:position: sticky;
取消定位:position: static;
定位元素层级:z-index: 1;
默认为1, 图层级别大于其他元素。可为负数
定位位置:top: 1px; right: 1px; bottom: 1px; left: 1px
通过设置上下左右位置调整定位位置
问题:父元素不设置定位,子元素设置绝对定位的参考系= 从父元素向上寻找,直到body元素。由元素设置定位,则以此定位元素为参考系,没有找到则以body元素为参考系。
建议在网上观看视频教程理解
水平垂直居中:
div {
width: 100px;
height: 100px;
position: absolute;
left: 0; right: 0; top: 0; bottom: 0;
margin: auto;
}
/* 通过绝对定位,上下左右都设置为0,margin设置为auto */
设置宽度
div {
position: absolute;
left: 0; right: 0; top: 0; bottom: 50%;
}
/* 此时元素宽等于父元素宽,元素高为父元素一半,且在上半部分 */
inset简写
inset可以简写上下左右。
单值:表示设置四个值。双值:第一个上下,第二个左右。其他和margin一样
特别注意
当给一个元素加上transform属性的时候,这个元素就会具有relative的特性,所以若一个元素的父元素拥有tranform属性,那么子元素在使用定位属性的时候要注意。
cursor: url(链接);
cursor: default;
cursor: crosshair;
cursor:pointer;
cursor: move;
cursor: text;
cursor: wait;
cursor: help;
cursor: not-allowed;
分列数:column-count: 数字;
列之间距离:column-gap: 1px
列之间的线:column-rule: 1px solid red
每列高度是否一杨:column-fill: balance
值:balance(默认不一样),auto(一样)
列宽度:column-width: 20px
列宽度会与列数发生冲突
解释:就是div
或替他元素前后添加一个内容或者样式
值:before(盒前面),after(盒后面)
使用案例(after同理)
div::befort {
content: '内容';
/* content定义伪元素里面的内容 */
/* 然后就可以定义其他内容描述这个伪元素 */
display: inline-block;
color: red;
}
使用场景:
标准盒:盒宽 = margin + border-width + padding + 盒内容width
标准盒块元素:display: block;
标准盒行内元素:display: inline;
标准盒行内块元素:display: inline-block;
怪异盒:盒内容width会将padding和margin和border包含在内
设置:box-sizing: border-box;
恢复标准盒:box-sizing: content-box
display: flex;
灵活元素主排列方向:flex-direction: row;
值:row(左到右, 默认); row-reverse(右到左);
值:columns(上到下); columns-reverse(下到上)
影响: 灵活元素副排序方向不设置长度, 则默认填充100%
主排序方式:justify-content: flex-start;
值:flex-start(从头开始, 默认); flex-end(从尾开始)
值:center(居中); space-between(两端对齐); space-around(自动分配); space-evenly(均匀分布)
副排序方式:align-content: flex-start;
值:flex-start(从头开始, 默认); flex-end(从尾开始)
值:center(居中); space-between(两端对齐); space-around(自动分配)
主轴换行:flex-wrap: nowrap;
值:nowrap(不换行, 默认); wrap(自动换行);
值:wrap-reverse(换行, 换行后反序)
注意:灵活元素副排序方向需要设置长度
换行后副排序方式:align-items: flex-start;
值:flex-start(从头开始,); flex-end(从尾开始)
值:center(居中) ; stretch(拉神填充, 默认); baseline(中心线对齐)
复合设置:flex-flow: 主排列方向 是否换行
;
例:flex-flow: row nowrap;
某一项灵活元素单独主排序方式设置:align-self: auto;
值:auto(自动); flex-start(从头开始,); flex-end(从尾开始)
值:center(居中) ; stretch(拉神填充, 默认); baseline(中心线对齐)
填充:flex: 1;
排序:order: 1;
设置灵活元素排列顺序,值为数字
在移动端大量应用,以配合移动端适配
宽度或高度填充
填充
"topBox Box">
"top">
"bottom">
"rightBox Box">
"right">
"left">
"bottomBox Box">
"bottom">
"top">
"leftBox Box">
"left">
"right">
坑:填充元素内部再写子元素高100%,则无法让子元素滚动
滚动需要给子元素固定高
像表格一样的,把页面进行布局。简化flex/栅格布局 计算。可以随意合并行和列
dispaly: grid;
设置为网格布局已经知道,grid其实就是表格,所以表格的每列的宽度,每行的高度都是可以设置的
通过grid-template-columns: 100px 100px;
设置列数,列宽。
设置几个就是有几列的宽度被设置了,其他列宽度自动平分。
如:grid-template-columns: 100px 100px 100px;
设置3列宽度
通过grid-template-rows: 100px 100px;
设置行数,行高。
同上
特殊值:
grid-template-columns: 1fr 1fr;
1fr为一个比例占位
混合使用:grid-template-columns: 150px 1fr 2fr;
副作用:
固定的列宽和行高,超出不会自动换行
grid-auto-flow: column/row;
设置排序是行(左 > 右)/列(上 > 下),默认columngrid-auto-columns: 100px;
设置列宽,可以设置多个值,但会自动排除超出的列grid-auto-rows: 100px;
设置行高,可以设置多个值,但会自动排除超出的行可以通过grid-auto-rows: minmax(100px, 200px);
设置最小最大
此时行高最小为100px, 最大200px
通过grid-column-start: 1;
定义子元素从那条列边开始
通过grid-column-start: 3;
定义子元素从那条列边结束
此时就可以得到一个占位2列的子元素
通过grid-row-start: 1;
定义子元素从那条列边开始
通过grid-row-start: 3;
定义子元素从那条列边结束
原理同上
z-index
设置每个网关的层级通过grid-column-gap: 20px
:设置列间隔
通过grid-row-gap: 20px
:设置行间隔
通过grid-gap: 10px;
设置间隔
和margin、padding一样,设置多个值。规则也一样
可以通过grid: 1fr;
直接复合设置,教程跳转连接
grid-template-area: 'a a'
grid-area: ;
宽度自适应
两边设宽度,中间设flex: 1;
, 父设弹性盒
悬挂
第一个灵活元素加align-self: flex-start;
效果如定位,但比定位好。
流式布局:略。
解释:查询设备屏幕大小,进行页面文字大小适配
设置:@media all and () {}
示例:
@media all and (max-device-width: 320px){
/* 320px宽度的设备 */
html{ font-size: 12px; }
}
@media all and (min-device-width: 321px) and (max-device-width: 375px){
/* 321px-375px宽度的设备 */
html{ font-size: 14px; }
}
@media all and (min-device-width: 376px){
/* 375px以上宽度的设备 */
html{ font-size: 16px; }
}
其他:search(平板或电脑),print(打印机)
max-width: 指的是设备的最大宽度
max-device-width:指的是浏览器的最大宽度
解释:更加动态的适应不同屏幕的大小下文字的大小
dpr
概念:设计像素 / 物理像素 = dpr
1080px
设计像素的dpr=3750px
设计像素的dpr=2640px
设计像素的dpr=2vw
和vh
:相对于当前窗口的百分比 100vw为窗口的宽
rem
:em是相对于父元素的一个文字大小,rem是相对于html
使用示例:如果当前为750px;(设计像素)
750的dpr = 2
750px / 2 = 375px (实际物理像素)
也就是我们开发是,设计稿是750px的宽,我们设置是设置为375px
所以也得到 100vw = 375px
所以设置 html的font-size 为100px所占用的对应vw
即 font-size = 26.67vw
此时就优化的算法
假如有个全屏750px的设计稿元素,设置的时候就可以设置 width = 3.75rem;
整除100 * dpr就是我们设置的实际宽度了。
配合媒体查询,就完成了不同设备适配。
块级格式化上下文
1.浮动的元素,浮动元素的父元素没有设置高度时,高度为0,需要清除浮动或添加overflow
2.绝对定位元素, position 是 absolute 或 fixed, 父元素没有相对定位,定位元素就会以其他元素定位
6.两个相邻元素上下margin会重叠(给其中一个元素增加一个父级,然后让他的父级触发BFC)
1.float的值不为none
2.overflow的值不为visible(副作用最小)
3.display的值为table-cell、tabble-caption和inline-block之一
4.position的值不为static或则releative中的任何一个
5.根元素:html
圣杯
双飞燕
瀑布流布局:利用多列属性实现
从阿里icon图标库下载icon
或将icon添加到项目
注意的是,每个class名称前需要添加iconfont
类目,否则不生效
font, font-family, font-weight, font-size, font-style, font-variant, font-stretch, font-size-adjust
text-indent, text-align, text-shadow, line-height, word-spacing, letter-spacing, text-transform, direction, color
caption-side, border-collapse, empty-cells.
list-style-type, list-style-image, list-style-position, list-style
cursor
visiblity
这样就可以只设置父组件,子组件直接继承样式,减少代码量
可用样式:imput:enabled {}
不可用样式:imput:disabled {}
必填样式:input:required {}
选填样式:input:optional {}
验证不通过样式:input:valid {}
验证通过样式:input:invalid {}
valid,invalid和required比,权限required最高
混合使用:input:required:valid {}
文本框拖拽:resize: none;
值:none(禁止拖拽),both(可以拖拽修改宽高),
值:horizontal(仅修改宽), vertical(仅修改高)
attr()
函数用于获取标签属性值,如获取a标签的href
<style> a:after{ content: "("attr(href)")" } style>
<body> <a href="www.baidu.com">后面加hrefa> body>
calc()
函数用于设置宽度,如比100%少一100px
,用函数进行计算控制
支持加减乘除算法
div{width: calc(100vh - 100px)}
repeat
函数重复设置值
margin: repeat(4, 20px)
/* 等同 */
margin: 20px 20px 20px 20px;
/* 函数介绍 */
repeat(个数, 重复代码); repeat(3, 20px 30px)
/* 函数不知道个数, auto-fill自动填充 */
repeat(auto-fill, 100px);
cubic-bezier()
函数设置贝塞尔曲线用于控制css
动画
动态选取网站:https://cubic-bezier.com/#.08,.64,.97,.05
linear-gradient
实现背景颜色渐变,css3渐变
实用网站:http://tools.jb51.net/code/css_generator
radial-gradient
实现背景颜色渐变,css3渐变
实用网站:http://tools.jb51.net/code/css_generator
clip-path
实用网站:http://tools.jb51.net/code/css3path
画面裁剪
作用一:绘制斜线
.salary {
width: 100px;
height: 50px;
background-color: #bbb;
position: relative;
}
.salary::before {
content: '';
display: block;
width: 100%;
height: 100%;
background-color: #eee;
clip-path: polygon(0px 0.5px, 0px 100%, calc(100% - 0.5px) calc(100% + 0.5px));
position: absolute;
top: 0;
}
.salary::after {
content: '';
display: block;
width: 100%;
height: 100%;
background-color: #eee;
clip-path: polygon(100% calc(100% - 0.5px), 100% 0px, 0px -0.5px);
position: absolute;
top: 0;
}
案例:重大日期,全屏添加灰色滤镜
默认值:filter: none;
模糊度:filter: blur(px);
默认1px,数值越大越模糊
亮暗:filter: brightness(%);
默认100,数值越小越暗,越大越亮
蒙层:filter: contrast(%);
默认100,数值越小蒙层越暗,越大越亮
灰度:filter: grayscale(%);
默认0,数值越大,灰度颜色越灰
应用色相旋转:filter.hue-rotate(deg);
默认0,不是旋转页面,是颜色
反转输入:filter: invert(%);
默认0
透明度:filter: opacity(%)
默认100%
饱和度:filter: saturate(%)
默认100%
换为深褐色:filter: sepia(%)
默认0%
多个属性设置,用空格隔开:filtet: opacity(50%) sepia(50%);
动画过度:transition: all 0s 0s ease;
值1:all(全部属性),width(如宽度单一属性)
值2:动画时间,从原状态 =》变化到 =》指定状态 ==需要的时间
值3:延迟时间,延迟变化的时间
值4:变化的速度:ease(渐慢), ease-in(加速), ease-out(减速),
ease-in-out(先加后减),linear(匀速),贝塞尔曲线
常见使用案例:transiton: 2s;
设置2s动画
多个动画
transition: width 1s 1s ease, height 1s 2s ease;
通过linear-gradient
css3函数实现
background: linear-gradient( to+变化方向,颜色1,颜色2,。。);
通过radial-gradient
css3函数实现
background: radial-gradient( 渐变中心,形状,大小,颜色1,颜色2,。。。);
center:渐变中心(top left),或(15px 30px)
shape:circle 圆,ellipse 椭圆 ,
size:
closest-side;最近边;
closest-corner:最近角;
fathest-corner:最远角;
fathest-corner;最远边;
shape和size只能存在一个。
background:linear-gradient( to+变化方向,颜色1,颜色2 20%, 颜色3 %。。。);(不设置方向默认从上到下)
兼容的和线型一样。
background:-webkit-repeating-radial-gradient( 渐变中心,形状,大小,颜色1,颜色2 20%, 颜色3 30%,。。。);
background:linear-grandient(颜色1 50%,颜色2 50%);
breakground
+ linear-grandient
实现边框花纹等。
参考:https://blog.csdn.net/weixin_33919950/article/details/88584263
参考示例:
background: radial-gradient(circle at left bottom, transparent 20rpx, #fff 0) top left / 50% 75% no-repeat,
radial-gradient(circle at right bottom, transparent 20rpx, #fff 0) top right / 50% 75% no-repeat,
radial-gradient(circle at left top, transparent 20rpx, #fff 0) bottom left / 50% 25% no-repeat,
radial-gradient(circle at right top, transparent 20rpx, #fff 0) bottom right / 50% 25% no-repeat;
特别注意
当给一个元素加上transform属性的时候,这个元素就会具有relative的特性,所以若一个元素的父元素拥有tranform属性,那么子元素在使用定位属性的时候要注意。
translate(水平,垂直);移动,根据自己原来的位置移动
%为单位时是自己的宽度%,可配合定位的中心放大使用;
translate-X(水平);
translate-Y(垂直);
scale(水平,垂直) 自身倍数缩放(默认中心放大)0是隐藏,没有了
scale-X()
scale-Y()
rotate(0deg) 旋转,单位度(deg)
默认中心旋转
rotate-X()中心x轴旋转
rotate-Y()中心y轴旋转
skew(x轴deg,y轴deg)倾斜(长方形变平行四边形)
transform-origin:(左右,上下)设置(旋转的)中心点
可设置单词也可设置数值
旋转后背面是否显示,是否占位:backface-visibility: visible(默认) / hidden;
transform:{属性1 属性2 。。}用空格隔开
设置左边框和上边框,用transform:rotate(45deg),变成箭头
不设宽高,用边框宽度将div撑起来,给需要的方向的变上色,其他边设置透明属性:transparent;
/* 上三角 */
#triangle-up {
width: 0; height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;
}
/* 下三角 */
#triangle-down {
width: 0; height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-top: 100px solid red;
}
/* 左删减 */
#triangle-left {
width: 0;
height: 0;
border-top: 50px solid transparent;
border-right: 100px solid red;
border-bottom: 50px solid transparent;
}
/* 顶点三角 */
#triangle-topleft {
width: 0;
height: 0;
border-top: 100px solid red;
border-right: 100px solid transparent;
}
ie9以上才兼容
创建动画:@keyframes
触发动画:animation
1、@keyframes name{form{初始状态} ...to{结束状态}}
2、@keyframes name{0%{初始状态} ...100%{结束状态}}
name必须写,用于调用
animation-
name:动画的名字;
,必写
duration: 2s;
动画的执行时间 ,必写timing-function: linear; 过度速度 值同transition
delay: 2s;
延迟时间
iteration: 2;
执行次数:数字或infinite(无限循环)direction:运动的规律
normal;正常
alterbnate;交替运行
alterbnate-reverse;反交替
fill-mode:动画完成后效果
none;默认
both/forword;动画完成后,保留最后在最后一帧画面。
backwords;动画完成后,回到起点
play-state:动画时的状态,与hover配合使用。
runing;运动
paused;暂停
animation: run 9s ease 2s infinite normal both;
动画名称,动画时间,动画速度,动画延迟,动画次数,动画规律,动画完成后
指定了时间函数中的间隔数量(步长)。有两个参数,第一个参数指定函数的间隔数,该参数是一个正整数(大于 0)。 第二个参数是可选的,表示动画是从时间段的开头连续还是末尾连续。含义分别如下:
animation: run 9s steps(4, start) 2s infinite normal both;
动画分解为4步,直接从第一步开始。
/* 定义一个run动画 */
@keyframes run{
/* 0%{left: -200px;} */
0%{left: 0px;}
35%{left: 400px;}
50%{left: 400px;
transform: rotate(2deg);
}
55%{
left: 300px;
transform: rotate(0deg);
}
60%{
left:350px;
transform: rotate(-5deg)
}
/* 60%{left: 400px;} */
100%{left: 100%;}
/* 100%{left: 100%;} */
}
.xr{
width: 200px;
position: absolute;
left: -200px;
bottom: 0px;
/* 绑定触发动画 */
animation: run 4s;
}
/* 运动/暂停 */
.xr:hover{
animation-play-state: paused;
}
与3D一起使用才能出效果
perspective:1200px;每个子元素的效果不同
transform: perspective(1200px);每个子元素效果一样
perspective-origin:x轴, y轴;
默认为50%;
transform-style: preserve-3d;
必须写,不写不出效果
transform: translateZ(2px);
只改z轴,其他同理
transform: translate3d(x, y, z)
改变三个轴。
transform: rotate3d(x, y, z, a)
(x, y, z)为旋转中心点,a为旋转的角度。
transform:scale3d(x, y, z)
使用Animate.css
插件。这就是一个css文集,可以下载下来使用。
文档网站
文件链接:https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css
Animate.min.css
。然后引入使用使用方式:
环境:需要安装nodejs
安装命令:cnpm install -G less
,进行全局(您随意)安装
使用:lessc 文件名.less
此时就可以将less文件转换位css文件进行使用
css
一样语法使用div{
background: red;
p{
color: blue;
font: 18px/20px '';
}
}
@colorer: red; // 此时定义了一个color变量
@Name: 'Header';
div{
background-color: @colorer; // 使用color这个变量
}
@{Name} {// 使用变量命名
color: @colorer;
}
mixin
).test(@wd : 100px){ // 定义一个less函数
widget: @wd;
height: 120px;
}
div{
.test(20); // 调用上面的函数
background-color: red;
}
&:表示父元素
div{
p &{
background: red;
}
}
// 此时div和p都定义了背景为红色
div /deep/ p{ // 使用样式穿透
color: red;
}
.text{
background: red;
}
div:extend(.text){}
// 此时就是div继承了text, 注意text不能是函数
// text的hover效果继承需要加all
div:extend(.text all) {}
@import '文件路径'
.test(@wh) {
width: calc(100px - @wh);
height: calc(100vh - @wh);
padding: calc(100% - @wh);
}
// 通过calc函数进行变量样式计算,其中100vh为浏览器宽度
.test(@f) when (@f) { //if语句 f==true执行
background: red;
}
.test(@a) when (iscolor(@a)) { // 类型判断if
background: @a;
}
// isnumber() 数值类型检测
// ispixel(), px单位检测; ispercentage(), %单位检测;
.test(@num) when (@num > 50) and (@num = 50) {}
.test(@num) when not (@num < 50) {}
elementUi:https://element.eleme.cn/#/zh-CN
iview:https://www.iviewui.com/docs/introduce
antDesignUi:https://ant-design.gitee.io/index-cn
taroUi:https://taro-ui.jd.com/#/
NutUI:https://nutui.jd.com/#/
uni-ui:https://hellouniapp.dcloud.net.cn/pages/component/view/view
vuetify:https://vuetifyjs.com/zh-Hans/
使用nginx进行简单部署
下载nginx:http://nginx.org/en/download.html
选择nginx/window
的版本下载
解压下载文件,将文件夹放在纯英文路径下
进入解压的nginx
文件
将静态资源文件夹,(包含,html,css,less,js,图片等等),放入当前文件夹
vscode打开当前文件夹/conf/nginx.conf
找到server
配置,模板如下
server {
listen 8000; # 端口号
server_name somename alias another.alias;
location / {
root html; # nginx文件内,静态资源文件夹名称
index index.html index.htm; # 静态资源文件夹内,入口html文件
}
location /api/ { # 进行服务器代理,进行跨域请求
proxy_pass http://localhost:3001/;
}
}
server
可以多个配置,注意端口号不要被占用
腾讯大厂的样式初始化,尽量使不同浏览器显示样式大体一致
建议根据:https://guide.aotu.io/index.html 指定初始化样式
body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fieldset,legend,input,textarea,select{margin:0;padding:0}
body{font:12px"宋体","Arial Narrow",HELVETICA;background:#fff;-webkit-text-size-adjust:100%;}
a{color:#2d374b;text-decoration:none}
a:hover{color:#cd0200;text-decoration:underline}
em{font-style:normal}
li{list-style:none}
img{border:0;vertical-align:middle}
table{border-collapse:collapse;border-spacing:0}
p{word-wrap:break-word}
/* 去掉数字框上下键 */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button{
-webkit-appearance: none;
margin: 0;
}
/* 兼容火狐 */
input[type="number"]{
-moz-appearance: textfield;
}
background: radial-gradient(circle at left bottom, transparent 20rpx, #fff 0) top left / 50% 75% no-repeat,
radial-gradient(circle at right bottom, transparent 20rpx, #fff 0) top right / 50% 75% no-repeat,
radial-gradient(circle at left top, transparent 20rpx, #fff 0) bottom left / 50% 25% no-repeat,
radial-gradient(circle at right top, transparent 20rpx, #fff 0) bottom right / 50% 25% no-repeat;
<style>
body {
background: #ccc;
}
div {
color: #ccc;
}
div:first-child {
text-shadow: 1px 1px 1px #000, -1px -1px 1px #fff;
}
div:last-child {
text-shadow: -1px -1px 1px #000, 1px 1px 1px #fff;
}
style>
<body>
<div>凸起的文字div>
<div>凸陷的文字div>
body>
老版本浏览器会出现底部缝隙,主要是行内块元素,所有图片会有底部缝隙
vertical-align: baseline;
或vertical-align: top;
设置属性text-align: justify
同时还有给包裹文字的块元素里面添加一个行内块原素
<div style="width: 100px;text-align: justify;">
左右<span style="display: inline-block;padding-left: 100%">span>
<div>
行内块原素还需要添加paddingleft设置100%
span {
font-size: 24px;
background: linear-gradient(135deg, #14ffe9, #ffeb3b, #ff00e0);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
/* 还可以添加动画效果 */
animation: textAnimation 1s linear infinite;
}
/* 文字动画 */
@keyframes textAnimation {
to { filter: hue-rotate(360deg) }
}
效果一:
<div class="progress">
<div class="progress_bar">div>
div>
<style>
/* 文字动画 */
@keyframes textAnimation {
to { filter: hue-rotate(360deg) }
}
/* 进度条一
--------------------------------------- */
.progress {
width: 260px;
height: 6px;
border-radius: 3px;
background-color: #e1e4e8;
overflow: hidden;
}
.progress_bar {
height: 100%;
width: 0%;
background: linear-gradient(90deg,#ffd33d,#ea4aaa,#b34bff,#01feff);
animation-name: progressAnimation, textAnimation;
animation-duration: 1s;
animation-timing-function: linear;
animation-delay: 0s;
animation-iteration-count: 1, infinite;
animation-fill-mode: forwards, none;
}
@keyframes progressAnimation {
to { width: 100%; }
}
style>
效果二:
<div class="nprogress">
<div class="nprogress_bar">div>
div>
<style>
.nprogress {
width: 260px;
height: 6px;
border-radius: 3px;
background-color: #e1e4e8;
overflow: hidden;
}
.nprogress_bar {
height: 100%;
width: 0;
background-color: rgb(21, 176, 248);
background-image: linear-gradient(
135deg,
#ffd33d 0%,
#ffd33d 25%,
transparent 25%,
transparent 50%,
#ffd33d 50%,
#ffd33d 75%,
transparent 75%,
transparent
);
background-size: 20px 20px;
animation-name: progressAnimation, progressAnimation2;
animation-duration: 2s, 2s;
animation-timing-function: linear;
animation-delay: 0s, 2s;
animation-iteration-count: 1, infinite;
animation-fill-mode: forwards, none;
}
/* 进度条动画二 */
@keyframes progressAnimation2 {
to { background-position: 20px 0; }
}
style>
.shrink{
-webkit-transform:scale(0.8);
-o-transform:scale(1);
display:inline-block;
}
vertial-align: top
消除垂直间隙font-size: 0;
子元素设置字体大小消除间隙.salary {
width: 100px;
height: 50px;
background-color: #bbb;
position: relative;
}
.salary::before {
content: '';
display: block;
width: 100%;
height: 100%;
background-color: #eee;
clip-path: polygon(0px 0.5px, 0px 100%, calc(100% - 0.5px) calc(100% + 0.5px));
position: absolute;
top: 0;
}
.salary::after {
content: '';
display: block;
width: 100%;
height: 100%;
background-color: #eee;
clip-path: polygon(100% calc(100% - 0.5px), 100% 0px, 0px -0.5px);
position: absolute;
top: 0;
}
perspectivevisible