src表示引用资源,表示替换当前元素,用在 img
、srcipt
、iframe
上,src是页面内容不可或缺少的一部分。
href表示超文本引用,用在 link 和 a 等元素上,href是引用和页面关联,是在当前元素和引用资源之间建立联系。
src是用于替代这个元素,href用于建立这个标签与外部资源之间的关系。
a标签里的href属性将img链接到了www.xxx.com这个网站,但并没有替换里面的img的内容,只是建立了一种联系;img中的src的属性值替换掉了img这个标签,以 1.jpg 图片的形式呈现。
浏览器知道这个是样式表文件,html的解析和渲染 不会暂停,css文件的加载是同时进行的,这不同于style标签里面的内置样式。用@import添加的样式是在页面载入之后再加载,这可能会导致页面因重新渲染而闪烁,所以 建议使用link而不是@import 。
浏览器解析到这句代码是,页面的加载和解析 都会暂停,直到浏览器拿到并执行完这个js文件。这就像是把js文件里的内容全部注入到这个script标签中,类似于img;img的标签是一个空标签,他的内容就是有src这个属性定义,浏览器会暂停加载直到这个图片加载完成。这也就是为什么 要将js文件的加载放在body最后的原因 。
BFC直译为“块级格式化上下文”,他是一个独立的渲染区域,只有Block-lever box参与,它规定了内部的Block-lever box如何布局,并且与这个区域外部毫不相干。
BFC可以简单地理解为某个元素的一个css属性,只不过这个属性不能被开发者显示的修改,拥有这个属性的元素对内部元素和外部元素都会表现出一些特性,这就是BFC。
标签上的title属性和alt属性的区别是什么?原因:浮动的元素是脱离文档标准流的,不清楚浮动会导致 父元素高度塌陷 ,影响页面布局。
为浮动元素后的元素添加clear属性
利用伪元素
.clearfix::before,
.clearfix::after {
content: '';
diaplsy: block;
clear: both;
}
修改 **父元素 **的overflow属性(BFC):overflow:hidden 等等触发BFC条件
直接设置父元素的高度
text-transform:
根本区别在于是否创建新的元素
语法 | 数量 | 位置 | 类与元素 | 使用场景 | |
---|---|---|---|---|---|
伪类 | : | 多个 | 前方或后方 | 修饰 | 多 |
伪元素 | :: | 单个 | 后方 | 创建对象 | 少 |
E [ att ]:选择具有 att 属性的 E 元素 -------- a[href]
E [ att = ‘val’ ]:选择具有 att 属性且属性值等于 val 的 E 元素 -----a[href=‘#nogo’]
E [ att ~= ‘val’ ]:选择具有 att 属性且属性值为一用空格分隔的字词列表,其中一个等于 val 的 E 元素
<style>
p[class ~= "ppp"] {
color: red;
}
style>
<p class="pp ppp">p1p>
E [ att ^= “val” ]:选择具有 att 属性且属性值以 val 开头的字符串的 E 元素
E [ att $= “val” ]:选择具有 att属性且属性值为以 val 结尾的字符串的 E 元素
E [ att *= “val” ]:选择具有 att 属性且属性值包含 val 的字符串的 E 元素
<style>
a[href *= "43399"]{
color: red;
}
style>
<a href="www.43399.com">43399a>
E [ att |= “val”]:选择具有 att 属性且属性值以 val 开头并用连接符 "-"分隔的字符串的 E 元素
<style>
a[class |= "text1"] {
color: red;
}
style>
<a href="www.43399.com" class="text1-one">43399a>
链接伪类选择符:E:link
描述超链接a在未被访问前的样式
链接伪类选择符:E:visitied
设置超链接a在其链接地址已被访问过时的样式
用户行为伪类选择符:E:hover
设置元素在其鼠标悬停时的样式(IE6只支持a元素的:hover,IE7支持其他元素)
用户行为伪类选择符:E:active
设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式
用户行为伪类选择符:E:focus
设置对象称为输入焦点(该对象的onfocus事件发生)时的样式,webkit内核浏览器中会默认给这个状态的元素加上 outline 的样式
语言伪类选择符:E:lang()
匹配使用特殊语言的E元素
<style>
/* 1.lang指定名称 2.传给lang(名称) */
h1:lang(en) {
color:red;
}
style>
<h1 lang="en">Englishh1>
<h1>中文h1>
否定伪类选择符:E:not()
匹配不符合一组选择器的元素,也被成为 反选伪类 。不能包含另外一个否定选择器。
<style>
/* 只要不是 .p 就选中这些元素 */
p:not(.p){
color:red;
}
style>
<p>content1p>
<p class="p">content2p>
<p>content3p>
结构性伪类选择符:E:root
匹配 E 元素在文档的根元素,在HTML中,根元素永远是HTML
<style>
/* 匹配 html 根元素,样式只能应用于 html */
:root{
background:green;
}
style>
<h1>在HTML中根元素始终是HTML元素h1>
<p>匹配文档的根元素p>
结构性为类选择符:E:first-child
匹配父元素的首个子元素E,要使该元素属性生效,E对象必须是某个对象的子元素
结构性为类选择符:E:last-child
匹配父元素的最后一个子元素E,要使该元素生效,E元素必须是某个对象的子元素
结构性为类选择符:E:only-child
匹配父元素仅有的一个子元素E,要使该元素生效,E元素必须是某个对象的子元素
<style>
/* 匹配父元素的仅有的一个子元素 li */
li:only-child{
color:red;
}
style>
<ul>
<li>oneli>
<li>twoli>
ul>
<ol>
<li>我是仅有的一个子元素li>
ol>
结构性为类选择符:E:nth-child(n)
匹配父元素的第n个子元素E,要使该元素生效,E元素必须是某个对象的子元素
结构性为类选择符:E:nth-last-child(n)
匹配父元素的倒数第n个子元素E,要使该元素生效,E元素必须是某个对象的子元素
结构性伪类选择符:E:first-of-type
匹配元素其父级是特定类型的第一个子元素E
<style>
/* 匹配同类型中的第一个同级兄弟元素 p */
p:first-of-type{
color:red;
}
style>
<div>
<span>我是spanspan>
<p>我是p1p>
<p>我是p2p>
<b>我是bb>
div>
结构性伪类选择符:E:last-of-type
匹配元素其父级是特定类型的最后一个子元素E
结构性伪类选择符:E:only-of-type
匹配同一类型中的唯一的一个同级兄弟元素E
结构性伪类选择符:E:nth-of-type(n)
匹配同类型中的第n个同级兄弟元素E
结构性伪类选择符:E:nth-last-of-type(n)
匹配同类型中的倒数第n个同级兄弟元素E
结构性伪类选择符:E:empty
匹配没有任何子元素(包括text节点)的元素E
我是有节点的P,我下面的P没有节点且不包含任何子元素,选择它↓
用户界面(UI)元素状态伪类选择符:E:checked
匹配用户界面上处于被选中状态的元素E(用于input type为radio与checkbox时)
<style>
/* 用户触发选中状态时降低透明度 */
input:checked{
opacity:0.2;
}
style>
<input type="checkbox">复选框<br>
<input type="radio" name="demo">单选框1<br>
<input type="radio" name="demo">单选框2<br>
用户界面(UI)元素状态伪类选择符:E:enabled
匹配用户界面上处于可用状态的元素E
<style>
/* 选择所有可用状态的 input 元素 */
input:enabled{
color:red;
}
style>
<input type="text" disabled value="不可用">
<input type="text" value="可用,选我!">
用户界面(UI)元素状态伪类选择符:E:disabled
匹配用户界面上处于禁止状态的元素
<style>
/* 选择所有不可用状态的 input 元素 */
input:disabled{
color:red;
}
style>
<input type="text" disabled value="不可用,选我!">
<input type="text" value="可用">
目标伪类选择符:E:target
#锚的名称是一个在文件中链接到某个元素的URL,元素被链接到目标元素,用于目前活动的target元素的样式
<style>
/* 用于 a 元素锚点被激活元素的样式 */
:target{
background:red;
}
style>
<a href="#p1">p1a>
<a href="#p2">p2a>
<h1>————————————h1>
<p id="p1">我是p1p>
<p id="p2">我是p2p>
打印伪类选择符:@page:first | @page:left | @page:right
设置页面容器第一页使用的样式,即元素打印的位置,仅用于 @page规则
行内样式 > ID > 属性选择器 / class类 / 伪类选择器 > 元素名 / 为对象选择器;关系选择器拆分为两个选择器计算权重
选择器 | 选择器权重 |
---|---|
继承 或者 * | 0,0,0,0 |
元素选择器,伪元素 | 0,0,0,1 |
类选择器,属性选择器,伪类选择器 | 0,0,1,0 |
ID选择器 | 0,1,0,0 |
行内样式 style=“” | 1,0,0,0 |
important 重要的 | 无穷大 |
px是相对长度单位,相对于显示器屏幕分辨率而言的
em是相对长度单位,是相对于当前对象父元素的文本的字体尺寸
px定义的字体,无法用浏览器放大功能;em的值并不固定,会继承父级元素的字体大小
1 / 父元素的 ( f o n t − s i z e ) ∗ 需要转换的像素值 = e m 值 1 / 父元素的(font-size) * 需要转换的像素值 = em值 1/父元素的(font−size)∗需要转换的像素值=em值
CSS sprite就是把网页中的一些背景图片整合到一张图片文件中,利用CSS 的background-image,bankground-repeat,bancground-position的组合进行背景定位。
浮动:float属性用于创建浮动框,可以向左向右移动直至碰到包含块或另一浮动框的边缘。
工作原理:浮动会脱离标准流,不占据空间。
特性:
常见的应用:
浮动引起的问题:
浮动元素的重叠问题:
:link > :visited > :hover > :active (love hate ------- lvha)
相邻的两个盒子(兄弟//祖先)(块级元素)的外边距可以结合成一个单独的外边距,这种合并称为折叠,从而导致外边距合并。垂直方向
行内元素
text-align: center
块级元素
2.1 宽高固定
margin: 0 auto
absolute + margin-left
absolute + calc
absolute + left + right + margin-left
2.2 宽高不定
transform
flex 布局
width : fit-content
如果一个元素的width已经设置过,再设置width:fit-content会冲突(C333)
行内元素
line-height(单行文本)
display: table-cell + vertical-align(多行文本)
isplay:inline-block + vertical-align 隐式幽灵节点
块级元素
2.1 宽高固定
2.2 宽高不定
盒子模型的组成:width、height、padding、border、margin
doctype 是一种标准通用标记语言的文档类型声明,目的是告诉标准通用标记语言解析器要使用什么样的文档类型定义DTD来解析文档。
主要分为渲染引擎 和 JS引擎
层叠上下文:"Stacking content"是HTML中的三位的概念。如果一个元素含有层叠上下文,就可以理解为这个元素在z轴上有优先级。层叠上下文即元素在z轴方向的排列关系。在层叠上下文这个盒子里,里边的元素会按照自身的层叠等级,在Z轴上进行排列。
层叠水平:“Stacking level”,决定了同一个层叠上下文中元素在z轴上的显示顺序。
层叠顺序在所有元素中都存在,而z-index只适用于定位元素以及flex盒子的子元素。
层叠顺序:“stacking order”,表示元素发生层叠时候有着特定的垂直显示顺序。上面的层叠上下文和层叠水平是概念,这个层叠顺序是规则。
CSS3之前,层叠顺序遵循的规则如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qlwDZGKU-1662461363936)(Q:\前端学习\前端学习总结\image\stacking-order.png)]
为什么内联元素的层叠顺序高于浮动元素和块级元素?
因为网页中最重要的是内容,浮动和块级元素一般用作布局,而内联元素中是内容。
满足以下条件之一就可以创建层叠上下文:
答:只有当元素的position为:relative,absolute,fixed等脱离了文档流的定位时,z-index才会生效
答:同一层叠上下文下,z-index的值时越大越靠前;
div
的堆栈级别。该框还建立了其堆栈级别的本地堆叠上下文。这意味着后代的z-index
不与此元素之外的元素的z-index
进行比较。div
的z-index
为整数时,它的子元素和外界元素进行比较时,采用父元素的z-index
进行比较, 和兄弟元素比较采用自身的z-index
。当一个div
的z-index
为auto
时,如果它和它的兄弟进行比较,采用它父元素的`z-index答:如果不设置z-index,则默认为auto,则不建立层叠上下文,设置为0则会脱离文档流,建立层叠上下文。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YcGUgt3r-1662461363937)(Q:\前端学习\前端学习总结\image\z-index.png)]
介绍:用于设置网页中的一些元数据(描述数据的数据,记录一些数据的信息),该标签处于网页的head内部。
常见属性 | 属性作用 |
---|---|
charset | 指定网页的字符集 |
name | 指定数据的名称 |
content | 指定数据的内容 |
name的属性值有keywords、description
author:定义网页作者
http-equiv:可以被称作http响应头、http文件头,当浏览器请求某个文件时,首先会加载此响应(文件)头内的设置。http-equiv和content属性名称/值对,当服务器向浏览器发送文档时,会先发送这些名称/值对
<head>
head>
content属性:设置描述的文字,也就是description红色框中的文字
网站中的logo是很重要的部分,为了更好的优化,会用h1标签进行包裹,在h1标签内去写a标签,给a添加logo背景图,然后再写上网站的标题。
<h1>
<a href="javascript:;">网站名称a>
<h1>
然后再将文本进行隐藏:
/*淘宝做法*/
text-ident:-99999px
overflow: hidden
/*京东做法*/
font-size: 0
“value” 是完整的单词类型的比较符号:~=、|=
"拼接字符串"类型的比较符号:*=、$=、^=
attribute 属性中包含 value:
[attribute ~= value] 属性中包含独立的单词为value
[title ~= flower]
<p title="flower tuple">p>
[attribute *= value]属性中做字符拆分,只要能拆出来value这个词就行
[title *= flower]
<p title="flowers">p>
attribute 属性以 value 开头:
[attribute ^= value] 属性中前几个字母是以 value 开头就可以
[lang ^= en]
<p lang="enen">p>
[attribute |= value] 属性中必须是完整且唯一的单词,或者以 - 分隔开
[lang |= en]
<p lang="en-us">p>
<p lang="en">p>
attribute 属性以 value 结尾:
[attribute $= value]属性中后几个字母是value就可以
[src $=".gif"]
<img src="123.gif">a>
letter-spacing:
对于英文,调节每个字母与每个字母的间距
对于汉字,调节每个汉字与每个汉字的间距
word-spacing:
这两个属性都是让文本倾斜;italic是文本的字体属性(斜体),oblique是让没有斜体属性的文本倾斜。效果显示一样,但是含义不一样。
行内元素有盒子模型吗?
行内元素跟块级元素一样拥有盒子模型
行内元素的 padding 和 margin 是否有效?
假设一个块级包含容器,宽1000px,高600px,块级子元素定义 margin:10% 5%;
大家说说 margin
的 top, right, bottom, left
计算值最终是多少?
答案: 100px 50px 100px 50px
原因: margin 的百分比是根据包含块的宽度进行计算的,这只发生在默认的 writing-mode: horizontal-tb;和direction: ltr;的情况下,当书写模式编程纵向时,参照将会编程包含块的高度。
选择宽度作为参照物:在CSS中,CSS的基础需求是排版,通常所见的横排文字的水平宽度一定,高度可以无限延伸。反观变纵向时也同理。
水平方向的 auto ,其计算值取决于可用空间(剩余空间)
想象这样一个场景,一个宽100px的p被包含在一个宽500px的div内,此时设置 p 的 margin-left 值为 auto,结果会怎样?
答案:p 会相对于 div 右对齐
原因:margin-left: auto 中的auto 是根据剩余空间计算的,也就是 400px(500-100),所以会右对齐。所以设置 margin: 0 auto 会居中显示,因为左右方向的auto平均分到了剩余空间,使得块元素得以在包含块中居中显示。margin-top:auto 相当于 margin-top: 0
答:table 表格中单元格最大的特点之一就是同一行列表元素都等高。display:table-cell 的属性类似于 td 标签,display:table 的属性类似于 table 标签
设置了 table-cell 的元素有以下的特点:
使用 display: table-cell 可以实线以下几种效果:
解决方法:
原因:
原因:
解决方案:
给select添加 box-sizing: border-box
p标签中的内容如果是一串没有空格的长字符串,则不会换行,系统会认为它是一个单词,不会自动换行,需要一段正常的带空格的文本才能换行。
若浏览器的默认字体大小是16px,
h1(32px == 2em)
h2(24px == 1.5em)
h3(18.72px == 1.17em)
h4(16px 没有font-size)
h5(13.28px == 0.83em)
h6(12px == 0.75em)
原理: 利用元素的边框来创建三角形,设置需要的方向对应的边框颜色,其余颜色设置为透明即可。
设置三个块级元素,分别设置宽高为一半
顶部设置水平居中,左右两个“浮动”或者“行内块”
自动变成 display: block
使用 偶数 字体。偶数字体相对更容易和 web 设计的其他部分构成比例关系。
background-position: center
word-break:break-all【CSS3】
值 | 描述 |
---|---|
normal | 使用浏览器默认的换行规则 |
break-all | 允许在单词内换行 |
keep-all | 只能在半角空格或连字符处换行 |
在实际开发中,一般使用的是无序列表,有序列表使用较少
在列表中只能嵌套,不能输入其他标签或者文字
在之后的开发中,通常使用和
来代替
和
;前面两种不仅仅是粗体斜体,更重要的是表示强调作用。
单行文本溢出,溢出部分用省略号代替
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis
多行文本溢出,溢出部分用省略号代替(只适合WebKit浏览器及移动端)
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;/*加不加这一行都会省略号结尾*/
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
设置 rel=“noopener” 的链接,window.opener 会为 null,这样新打开的页面便获取不到来源页面的 window 对象了。
设置 rel=“noreferrer” 的链接,新打开的页面也获取不到来源页面的 window 对象。 同时, 新打开页面中还无法获取 document.referrer 信息, 该信息包含了来源页面的地址。
通常 noopener 和 noreferrer 会同时设置,rel=“noopener noreferrer”。因为一些老旧浏览器不支持 noopener。
使用 target=“_blank” 在新标签页中打开第三方地址时, 必须设置 rel=“noopener noreferrer”。
普通文本添加 " autocomplete: off ",密码输入框添加 “autocomplete: new-password”
<input type="text" autocomplete="off">
如果是整个表单,可以设置如下代码:
<form method="post" autocomplete="off">
....
form>
<form>
<select>
<option selected disabled hidden style="display: none" value="">option>
<option value="volvo">Volvooption>
<option value="saab">Saaboption>
<option value="fiat">Fiatoption>
<option value="audi">Audioption>
select>
form>
selected:使此选项成为默认选项。
disabled:使此选项无法点击。
style=“display:none”:使此选项不在旧版浏览器中显示。
hidden:使此选项不显示在下拉列表中。
该属性只针对行内元素和行内块级元素才能生效