css sprite 是精灵图,有叫雪碧图,是将多个小图片拼合到一整张大图中,使用时通过 background-image
、background-position
以及图片大小配合使用
优点:
缺点:
两者都是让元素消失,但原理不一样:
display: none;
<style>
div {
width: 100px;
height: 100px;
}
.red {
background-color: red;
}
.green {
display: none;
background-color: green;
}
.blue {
background-color: blue;
}
style>
<body>
<div class="red">div>
<div class="green">div>
<div class="blue">div>
body>
display: none;
的内容visibility: hidden;
<style>
div {
width: 100px;
height: 100px;
}
.red {
background-color: red;
}
.green {
visibility: hidden;
background-color: green;
}
.blue {
background-color: blue;
}
style>
<body>
<div class="red">div>
<div class="green">div>
<div class="blue">div>
body>
visibility: hidden;
visibility: hidden;
的内容
首先,link 和 @import 都是为了引入外部样式
差别:
link
是 HTML 提供的方法,除了引入外部样式之外,还可以引入一些其他的东西;@import
是 CSS 提供的方法,只能引入样式link
引入的样式会和 HTML 同时加载,@import
引入的 CSS 会等页面加载完成后再加载link
兼容所有浏览器,@import
只兼容新版本的浏览器link
不能使用 @import
,因为 @import
不是 DOM 可以控制的@import
可以从样式表里引入其他样式表总之,用 link
就完事了
创建规则:
float
不为 none
)position
取值为 absolute
或 fixed
)overflow: hidden;
的元素display: inline-block | table-cell | table-caption | flex | inline-flex;
的元素作用:
margin
陷落
div
并且 clear: both;
::after
和 zoom
overflow: hidden;
(将父级元素转为 BFC)
因为不同浏览器的渲染引擎不同,对标签的默认样式会有不同的理解,所以渲染出来的样式不同,需要用样式初始化统一浏览器渲染引擎的理解
margin
设置为负值font-size: 0;
letter-spacing
word-spacing
block
!important
的权重最高,大于行内样式
依靠三个属性:transition 、transform 、animation;其中 transform 的 3d 必须依赖两个属性:transform-style 和 perspective
transition: property duration timing-function delay
transform:
transform-origin: x y z;
transform-style:
perspective: number | none
animation: name duration timing-function delay iteration-count direction
流体布局
<style>
div {
height: 100px;
}
.left {
width: 100px;
float: left;
background-color: red;
}
.right {
width: 100px;
float: right;
background-color: green;
}
.main {
margin: 0 100px;
background-color: blue;
}
style>
<body>
<div class="left">leftdiv>
<div class="right">rightdiv>
<div class="main">maindiv>
body>
圣杯布局
<style>
.db {
padding: 0 100px;
height: 100px;
}
.left {
float: left;
width: 100px;
height: 100px;
margin-left: -100%;
position: relative;
left: -100px;
background-color: red;
}
.right {
float: left;
width: 100px;
height: 100px;
margin-left: -100px;
position: relative;
left: 100px;
background-color: green;
}
.main {
float: left;
width: 100%;
height: 100px;
background-color: blue;
}
style>
<body>
<div class="db">
<div class="main">maindiv>
<div class="left">leftdiv>
<div class="right">rightdiv>
div>
body>
双飞翼布局
<style>
.left {
float: left;
width: 100px;
height: 100px;
margin-left: -100%;
background-color: red;
}
.right {
float: left;
width: 100px;
height: 100px;
margin-left: -100px;
background-color: green;
}
.content {
float: left;
width: 100%;
}
.main {
margin: 0 100px;
height: 100px;
background-color: blue;
}
style>
<body>
<div class="content">
<div class="main">maindiv>
div>
<div class="left">leftdiv>
<div class="right">rightdiv>
body>
flex 布局
<style>
.db {
display: flex;
}
.left {
background-color: red;
height: 100px;
width: 100px;
}
.right {
background-color: green;
height: 100px;
width: 100px;
}
.main {
background-color: blue;
height: 100px;
flex-grow: 1;
}
style>
<body>
<div class="db">
<div class="left">leftdiv>
<div class="main">maindiv>
<div class="right">rightdiv>
div>
body>
定位布局
<style>
.left {
background-color: red;
height: 100px;
width: 100px;
position: absolute;
top: 0;
left: 0;
}
.right {
background-color: green;
height: 100px;
width: 100px;
position: absolute;
top: 0;
right: 0;
}
.content {
padding: 0 100px;
}
.main {
background-color: blue;
height: 100px;
}
style>
<body>
<div class="left">leftdiv>
<div class="content">
<div class="main">maindiv>
div>
<div class="right">rightdiv>
body>
两列布局:左侧宽度固定,右侧自适应
<style>
div {
height: 500px;
}
.left {
background-color: red;
width: 200px;
}
.right {
background-color: green;
}
// 方案一:左侧浮动,右侧自适应
.left {
float: left;
}
// 方案二:右侧绝对定位,配合right: 0
.right {
position: absolute;
top: 0;
left: 200px;
right: 0;
}
// 方案三:左侧绝对定位,右侧设置 margin
.left {
position: absolute;
top: 0;
left: 0;
}
.right {
margin-left: 200px;
}
// 方案四:flex 布局
.outer {
display: flex;
}
.right {
flex: 1;
}
style>
<body>
<div class="outer">
<div class="left">leftdiv>
<div class="right">rightdiv>
div>
body>
rgba()
和 opacity
都能实现透明效果,不同的是 rgba()
作用的是元素的颜色,opacity
是元素以及元素内部所有内容的透明度。另外,rgba()
不会被继承。
/* 思路一:父、子容器(块级)宽高都已知,可以利用 margin */
.box1 {
width: 400px;
height: 400px;
background-color: rgb(129, 2, 2);
overflow: hidden; /* 父容器要格式化上下文,防止塌陷 */
}
.box1_son {
width: 200px;
height: 200px;
background-color: rgb(6, 88, 6);
margin: 100px auto;
}
/* 思路二:父容器宽高未知、子容器宽高已知,子绝父相 + margin */
.box1 {
position: relative;
background-color: rgb(129, 2, 2);
}
.box1_son {
width: 200px;
height: 200px;
background-color: rgb(6, 88, 6);
position: absolute;
top: 50%;
left: 50%;
margin-top: -100px;
margin-left: -100px;
}
/* 思路三:父、子容器宽高都未知,子绝父相 + 过渡 */
.box1 {
position: relative;
background-color: rgb(129, 2, 2);
}
.box1_son {
background-color: rgb(6, 88, 6);
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%)
}
/* 思路四:伸缩盒子 */
.box1 {
width: 400px;
height: 400px;
background-color: rgb(129, 2, 2);
display: flex;
justify-content: center;
align-items: center;
}