CSS笔记
- 水平垂直居中
- 伪元素::before,::after
- css选择器
- css动画
- css实现三角形
- flex布局
- box-sizing属性
- display:none, visibility:hidden, opacity:0
- 圣杯布局和双飞翼布局
- 三栏布局
- 纵向三栏布局
- BFC
- css加载动画
- 渐变颜色字体
- div充满父元素剩余空间
- jQuery
- transform
- [display grid](http://www.ruanyifeng.com/blog/2019/03/grid-layout-tutorial.html)
- position定位
- 锚点定位
- 图片无限滚动
- 父元素设置opacity对子元素产生影响
- 网络字体
- rem和em
- link和@import的区别
- Sass和Less对比
- position
- transition和animation
- [CSS3 -webkit属性](https://www.cnblogs.com/libin-1/p/5903350.html)
- SVG
- [Canvas]
水平垂直居中
方案1:position 元素已知宽度
父元素设置为:position: relative;
子元素设置为:position: absolute;
距上50%,据左50%,然后减去元素自身宽度一半的距离就可以实现
两种方法实现减去自身宽度的一半,第一种通过margin(height / 2, 0, 0, weight / 2),第二种通过transform:translate(-50%, -50%),可以用于inside宽高未知情况。
<div class="box">
<div class="inside"></div>
</div>
.box {
background-color: #FF8C00;
width: 300px;
height: 300px;
position: relative;
}
.inside {
background-color: #F00;
width: 100px;
height: 100px;
position: absolute;
left: 50%;
top: 50%;
margin: -50px 0 0 -50px; //margin或者transform两者都可以
transform:translate(-50%, -50%); //可以用于宽高未知情况
}
方案2:flex弹性布局
.box {
background-color: #FF8C00;
width: 300px;
height: 300px;
display: flex;//flex布局
justify-content: center;//使子项目水平居中
align-items: center;//使子项目垂直居中
}
.inside {
background-color: #F00;
width: 100px;
height: 100px;
}
方法3:display:table-cell
table-cell相当于td,是行内元素无法设置宽高,所以内部要嵌套一层设置为inline-block
<div class="box">
<div class="inside">
<div class="inner">
</div>
</div>
</div>
.box{
background-color: #FF8C00;//橘黄色
width: 300px;
height: 300px;
display: table;
}
.inside{
display: table-cell;
text-align: center;
vertical-align: middle;
background: #ccc;
}
#inner{
display: inline-block;
width: 20%;
height: 20%;
}
伪元素::before,::after
伪类和伪元素
css选择器
p:first-child
: 父元素的第一个子元素且是p
p:first-of-type
: 父元素所有为p
的子元素中的第一个p:nth-child(n)
: 父元素第n
个子元素,且该元素是p
其中n
可以是数字或公式odd
: 奇数even
: 偶数an + b
:a
是周期的长度,b
是偏移值
p:nth-of-type(n)
: 父元素所有为p
的子元素中的第n
个not(selector)
: 选中所有不是selector
的元素
选择器优先级
css属性选择器
优先级关系:内联样式 > ID 选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器
子元素选择器
<h1>
<div class="outer">
<div class="inner"></div>
</div>
</h1>
h1 > div {
background: white;
}
子元素选择器只会选择某个元素的子元素,不会选择’孙‘元素或更深层的元素
所以这里只有 class 为 outer 的 div 会被选择,而更深层的类名为 outer 的 div 不会被选择
css动画
css实现三角形
flex布局
box-sizing属性
box-sizing : content-box|border-box|inherit;
(1) content-box ,默认值,可以使设置的宽度和高度值应用到元素的内容框。盒子的width只包含内容。
总宽度 = margin+border+padding+width
(2) border-box , 设置的width值其实是除margin外的border+padding+element的总宽度。盒子的width包含border+padding+内容
width = border + padding + element
总宽度 = margin + width
很多CSS框架,都会对盒子模型的计算方法进行简化。
(3) inherit , 规定应从父元素继承 box-sizing 属性的值
background = padding + element
display:none, visibility:hidden, opacity:0
方式一、display: none
DOM结构:浏览器不会渲染display属性为none的元素,不占用空间;
事件监听:无法进行DOM事件监听,毕竟没有被渲染出来;
性能:动态改变此属性会引起重排,性能较差;
继承:不会被子元素继承,毕竟子元素也不会被渲染出来
transition(过渡):不支持display。
方式二、visibility: hidden
DOM结构:元素被隐藏,但会被渲染,占用空间;
事件监听:无法进行DOM事件监听;
性能:动态改变此属性会引起重绘,性能较高;
继承:会被子元素继承,子元素可以通过visibility: visible 来取消隐藏
transition(过渡):visibility会立即显示,隐藏时会延时。
方式三、opacity: 0
DOM结构:透明度为100%,元素隐藏,占用空间;
事件监听:可以进行DOM事件监听;
性能:不会引起重绘,性能较高;
继承:被子元素继承,但子元素不能通过opacity:1 来取消隐藏;
transition(过渡):可以延时显示可隐藏(做隐藏和显示网页特效时一般用opacity)。
圣杯布局和双飞翼布局
三栏布局
两边宽度固定,中间自适应
float实现
问题:
- 由于设置浮动会导致
center
被浮动元素遮挡
解决办法:
- 为
center
设置左右margin
- 为
center
设置overflow: hidden
创建bfc
<body>
<div class="left"></div>
<div class="right"></div>
<div class="center"></div>
</body>
<style>
div {
height: 100px;
}
.left {
width: 300px;
float: left;
background: red;
}
.right {
width: 300px;
float: right;
background: blue;
}
.center {
background: yellow;
margin: 0 300px;
overflow: hidden;
}
</style>
绝对定位
<body>
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
</body>
<style>
div {
height: 100px;
}
.left {
width: 300px;
position: absolute;
left: 0;
background: red;
}
.right {
width: 300px;
position: absolute;
right: 0;
background: blue;
}
.center {
position: absolute;
left: 300px;
right: 300px;
background: yellow;
}
</style>
flex布局
<div class="container">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
</div>
<style>
div {
height: 100px;
}
.container {
display: flex;
}
.left {
width: 300px;
background: red;
}
.right {
width: 300px;
background: blue;
}
.center {
background: yellow;
flex: 1;
}
</style>
table表格布局
<div class="container">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
</div>
<style>
div {
height: 100px;
}
.container {
display: table;
width: 100%;
}
.container >div {
display: table-cell;
}
.left {
width: 300px;
background: red;
}
.right {
width: 300px;
background: blue;
}
.center {
background: yellow;
}
</style>
grid网格布局
<div class="container">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
</div>
<style>
div {
height: 100px;
}
.container {
display: grid;
width: 100%;
grid-template-columns: 300px auto 300px;
grid-template-rows: 100px;
}
.left {
background: red;
}
.right {
background: blue;
}
.center {
background: yellow;
}
</style>
纵向三栏布局
BFC
- BFC的布局规则
内部的Box会在垂直方向,一个接一个地放置。
Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。
每个盒子(块盒与行盒)的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
BFC的区域不会与float box重叠。
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
计算BFC的高度时,浮动元素也参与计算。
- 如何创建BFC
1、float的值不是none。
2、position的值不是static或者relative。
3、display的值是inline-block、table-cell、flex、table-caption或者inline-flex
4、overflow的值不是visible
css加载动画
渐变颜色字体
div充满父元素剩余空间
通过flex实现,父元素设置flex布局,高度为100%
子元素bottom设置flex-grow: 1
从而自适应充满父元素剩余空间
<div class="container">
<div class="top"></div>
<div class="bottom"></div>
</div>
.container {
height: 100%;
display: flex;
flex-direction: column;
.top {
}
.bottom {
flex-grow: 1;
}
}
jQuery
jQuery获取元素位置信息
$(element).height() //获取元素高度
$(element).width() //获取元素宽度
$(window).height() //获取当前窗口视图高度
$(element).scrollTop() //获取元素滚动的距离,既向下滚动了多少
$(element).scrollLeft()
$(element).offset().top //offset() 方法设置或返回被选元素相对于文档的偏移坐标,两个属性top和left
$(element).offset().left
$(element).position() // 获取元素相对于父元素的偏移 { top, left }
jQuery选择器
:nth-last-child // 获得父元素倒数某个子节点,会出问题,不推荐使用
$(element).children() // 获得全部子元素的数组
jQuery事件
监听窗口尺寸变化
$(window).resize([data], fn)
// jQuery 写法
window.onresize(fn)
// js 写法
$(window).resize(() => {
console.log($(window).height())
})
transform
缩放字体小于12px并对齐
transform: scale(0.5);
transform-origin: 0 0;
display grid
position定位
锚点定位
- scrollIntoView
- window.scrollTo
在使用window.scrollTo
时需要注意避免将页面高度设置为小于当前浏览器视框高度(100vh
),这样会导致没有滚动空间,没有效果
图片无限滚动
当只有一张图片时可以通过将宽度设置为图片的整数倍,设置 background-repeat: repeat
实现图片重复
父元素设置opacity对子元素产生影响
网络字体
rem和em
link和@import的区别
-
link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。
-
link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。
-
link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
-
link支持使用Javascript控制DOM去改变样式;而@import不支持。
Sass和Less对比
position
transition和animation
CSS3 -webkit属性
-webkit-tap-highlight-color
解决iOS (iPhone和iPad)。当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就会出现一个半透明的灰色背景