css基础
css单位
css单位是必须要写的,因为它没有默认单位。
相对单位:
px:最常用
em:印刷单位相当于12个点,一般都是首行缩进使用em,无论字号怎么变,都使用的是2em,缩进两个字符
其中
1 | <div class="parent" style="font-size: 20px;"> |
%:百分比,相对周围的文字的大小

font字体属性:
1 | p{ |
行高line-height
行高、字号一般都是偶数。
对于单行文本想要实现居中,行高等于盒子高。
1 | heighit:100px; |
垂直方向对齐:
通过行高和容器高度相同来进行设置
1 | height: 58px; |
vertical-align:middle属性:
vertical-align属性可用于指定行内元素(inline)、行内块元素(inline-block)、表格的单元格(table-cell)的垂直对齐方式。主要是用于图片、表格、文本的对齐。
行内元素不能设置宽高,块级元素独占一行
而行内块元素既能设置宽高,也能并排.
字号、行高、字体三大属性,连起来写不常用,经常都是分开写
1 | font: 加粗 字号/行高/ 字体 |
字体加粗属性:
1 | .div { |
文本属性:
text-decoration: none;字体修饰:none 去掉下划线、underline 下划线、line-through 中划线、overline 上划线(只有none是常用的)可以给a标签去掉下划线使用color:red;字体颜色text-align: center;在当前容器中的对齐方式。属性值可以是:left、right、center(在当前容器的中间)、justify(两端对齐) 注意:如果我想让该元素使用这个属性,必须对它的父元素进行设置
那么就引出了如果想要给自己的元素设置,就是margin:0 auto;但是这个必须要设置宽度才能使用
overflow属性:(超出范围要怎么处理)只有hidden常用
visible:默认值。多余的内容不剪切也不添加滚动条,会全部显示出来。hidden:不显示超过对象尺寸的内容。//处理float浮动,父级元素出现高度塌陷
如图:
使用overflow:hidden; 就可以使用这个来进行:BFC,块级格式化上下文,解决塌陷问题
1 | <style> |

如果我给父元素加了overflow:hidden;就可以块级格式化上下文,清除浮动

auto:如果内容不超出,则不显示滚动条;如果内容超出,则显示滚动条。scroll:Windows 平台下,无论内容是否超出,总是显示滚动条。Mac 平台下,和auto属性相同。
background 的常见背景属性
1 | background-color:#ff99ff; 设置元素的背景颜色。 |
选择器:
- 标签选择器:例如下面有个div盒子,在style属性中,直接写div{}
- id选择器:规定用
#来定义

- 类选择器:用.来定义

对于id和类选择器:在css中,尽量选择类选择器,而id选择器是js使用的,js通过id属性获得标签,id选择器更加精确
后代选择器:
定义的时候用空格隔开,是父子级的关系,就比如
.class li a {
}这种
1 | //p.mlz |
并集选择器:

序选择器:
1 | ul li:last-child { |
伪类选择器:
根据不同的状态有着不同的表现形式
动态伪类:
:hover“悬停”:鼠标放到标签上的时候(最常用):active“激活”: 鼠标点击标签,但是不松手时。:focus是某个标签获得焦点时的样式(比如某个输入框获得焦点)
补充:scss嵌套写法,可以避免多次写同一个父级标签:如下
1 | .nav { |
超链接的四种状态:
要求背诵:
:link“链接”:超链接点击之前:visited“访问过的”:链接被点过之后:hover“悬停”:鼠标放在超链接上面的时候:active“激活”: 鼠标点击但不松手
结构伪类选择器:(比序选择器范围更广)
含义是:可以匹配父级元素下的第几个E,如果是E标签,属性就生成,反之。
E:first-child匹配父元素的第一个子元素E。E:last-child匹配父元素的最后一个子元素E。E:nth-child(n)匹配父元素的第n个子元素E。注意,盒子的编号是从1开始算起,不是从0开始算起。E:nth-child(odd)匹配奇数E:nth-child(even)匹配偶数E:nth-last-child(n)匹配父元素的倒数第n个子元素E。
css层叠性:
- 首先要计算权重:id选择器>类选择器(不仅仅是.操作符,动态伪类:hover,结构伪类E:first-child也是)>标签选择器(即就是范围越精确,权重越高)
权重高的会覆盖权重低的
- 当权重相同时候:就近原则,比如有上下两个,那么就按照第二个的属性来
开始时要比较选没选中,如下图,根本没有选中span标签
即使是选中了父级元素,但是因为没有直接选中子元素,那么子元素的权重直接为0,那么就是按照就近原则来(即使#box是id选择器,权重最高,但是我第一个选到了p标签,是离我的目标span标签更近的一个元素)

提升权重!important:(限制条件太多,一般不用,否则css会变得很乱)
适用选中的情况,虽然可以提升权重,但是涉及继承性,如果没有选中的话,即使添加,优先级也不是最高的
1 | //正确写法 |
同时,!important不影响就近原则,即使使用,离得远的话也是无济于事,所以这个很麻烦,干脆就不用它了
盒子模型:
padding:
1 | //顺时针,上右下左(top,right,bottom,left) |
一些元素,自带的有padding,所以需要清除默认样式
1 | * { |
margin:
1 | margin:0 auto; //让这个div自己在大容器中的水平方向上居中。 |
行内元素与块级元素的区别:
但是还有一种叫行内块元素,是特殊的,既有行内元素并排排列的性质,同时也可以设置宽高属性
例如
行内元素:等
- 与其他行内元素并排
- 不能设置宽高。默认的宽度,就是文字的宽度。
块级元素:
,有序无序列表
- 独占一行
- 可以设置宽高。默认的宽度为父级元素的100%。
我们可以通过
display属性将块级元素和行内元素进行相互转换。display即“显示模式”。相互转换:
1
2 display:inline;
display: block;浮动:
浮动不会重叠,如果大小超过当前容器,会靠在一起排列,宽度不够,竖向排列,长度不够,横向排列。
有高度的盒子,才能关注浮动
一种是给父级元素添加overflow:hidden;
1
2
3
4
5
6 /* 给父元素添加这个类名即可 */
.clearfix::after {
content: ""; /* 添加看不见的内容 */
display: block; /* 转成块级 */
clear: both; /* 清除浮动 */
}Flex布局:
- flex布局是对父级元素添加,子集元素生效,并且会去除元素之间的间隔,变成一个弹性盒子
- 使用
display:flex或display:inline-flex声明一个父容器为弹性盒子。
flex-direction:用于设置盒子中子元素的排列方向。属性值可以是:
属性值 描述 row 从左到右水平排列子元素(默认值) column 从上到下垂直排列子元素 row-reverse 从右向左排列子元素 column-reverse 从下到上垂直排列子元素 如果没有设置属性,那么默认值就是左右,上下。
主轴和侧轴方向是可以改变的,默认的话就是从左到右为主轴,从上到下为侧轴。
justify-content 属性
justify-content: flex-start;设置子元素在主轴(水平)上的对齐方式。属性值可以是:
flex-start从主轴的起点对齐(默认值)
flex-end从主轴的终点对齐
center居中对齐对于around和between来说
space-around在父盒子里平分//每个元素左右空隙,那也就意味着,任意两个相邻元素的间距等于第一个元素到第一个边框的距离的二倍
space-between两端对齐 平分//两端先对齐然后再平分align-items 属性
align-items:设置子元素在侧轴(竖直)上的对齐方式。属性值可以是:-
flex-start从侧轴开始的方向对齐-
flex-end从侧轴结束的方向对齐-
baseline基线 默认同flex-start -center中间对齐 -stretch拉伸//拉伸即就是拉长排满父级元素
flex属性:设置子盒子的权重父元素是ul
1
2
3
4
5
6
7
8
9
10
11 ul li:nth-child(1) {
flex: 1;
}
ul li:nth-child(2) {
flex: 2;
}
ul li:nth-child(3) {
flex: 4;
}其中:flex:1;是自动占满空间
定位属性:
相对定位:让元素相对于自己原来的位置,进行位置调整)。(既不是相对父元素,也不是相对于浏览器窗口)
1
2
3 position: relative;
left: 50px;
top: 50px;也就两个作用:
- (1)微调元素
- (2)做绝对定位的参考,子绝父相
对于子绝父相
要听已经定位过祖先元素,不一定是父级元素,即就是第一个设置定位属性的父类元素
1
2
3
4
5 <div class="box1"> 相对定位
<div class="box2"> 没有定位
<p></p> 绝对定位,将以box1为参考,因为box2没有定位,box1就是最近的父辈元素
</div>
</div>让绝对定位的盒子在父级居中:
总结公式:
1
2 left:50%;
margin-left:-宽度的一半(-代表向左移动position: fixed:
他的参考系是浏览器窗口,即就是是当前页面,不随滚动条改变(在实现一件返回页面最顶端的时候)
可以用来设置导航栏,加上top:0; left:0;等属性
z-index属性:
必须有定位,不能是浮动元素
默认属性值都是0,属性值大的在上面
css3选择器
属性选择器:
E[title]选中页面的E元素,并且E存在 title 属性即可。E[title="abc"]选中页面的E元素,并且E需要带有title属性,且属性值完全等于abc。E[title*="abc"]选中页面的E元素,并且E需要带有 title 属性,属性值任意位置包含abc。这个不常用,一是性能开销大,二是(0,1,0)的属性权重,容易不生效或者是属性被覆盖。
border:
- 设置边框属性
- border:1px solid black;属性依次为边框线大小,边框线类型,边框颜色
边框圆角:
border-radius属性
1
2
3
4
5
6 border-radius: 20px 60px 100px 140px; //从左上开始,顺时针赋值。如果当前角没有值,取对角的值
//如果值不够的话,就是对角补齐(左上补右下)
border-radius: 0 100px;//如下图的6
//最简洁:画圆
border-radius:50px;
css动画详解:
过渡动画:transition
transition-property: all;如果希望所有的属性都发生过渡,就使用all。transition-duration: 1s;过渡的持续时间。transition-timing-function: linear;运动曲线。属性值可以是:
linear线性ease减速ease-in加速ease-out减速ease-in-out先加速后减速transition-delay: 1s;过渡延迟。多长时间后再执行这个过渡动画。
1
2 transition: 让哪些属性进行过度 过渡的持续时间 运动曲线 延迟时间;
transition: all 3s linear 0s;缩放:scale
1
2 transform: scale(x, y);
transform: scale(2, 0.5);位移:translate
1
2
3
4
5
6
7
8
9
10 transform: translate(水平位移, 垂直位移);
transform: translate(-50%, -50%);
百分比写法是相对自身的移动
而像素写法就是字面意思,正值向右向下,负值向左向上
//而如果只提供一个值
transform: translate(-50%);//即就是水平方向有变化,竖直方向是默认值0
//对于Z属性,默认是2D平面
我们需要使用perspective属性,进行透视旋转:rotate
1
2 transform: rotate(角度);
transform: rotate(45deg);改变旋转坐标原点:
1
2
3 transform-origin: 水平坐标 垂直坐标;
transform-origin: 50px 50px;
transform-origin: center bottom; //旋转时,以盒子底部的中心为坐标原点旋转轴旋转:
1
2
3 transform: rotateX(360deg); //绕 X 轴旋转360度 水平为x轴,水平向右为正方向
transform: rotateY(360deg); //绕 Y 轴旋转360度 竖直为y轴,竖直向下为正方向
transform: rotateZ(360deg); //绕 Z 轴旋转360度 纸面向里为z轴,从屏幕里朝向我为正方向动画:
1
2
3
4
5
6
7
8
9
10
11
12 定义动画:
@keyframes 动画名称{
from{ 初始状态 }
to{ 结束状态 }}
//更常见的写法:
@keyframes 动画名{
0%{ 初始状态 }
//当然中间可以加很多%
100%{ 结束状态 }}
调用:
animation: 动画名称 持续时间;基本使用方法(这种一般都是复制粘贴的,看懂就行)
1
2
3
4 animation: 定义的动画名称(可以自定义) 持续时间 执行次数 是否反向 运动曲线 延迟执行。
(infinite 表示无限次,循环)
animation: move1 1s alternate linear 3;
linear表反向,而normal表正向steps()的效果:
steps(n,end/start)
其中第一个参数是几帧,也就是完整的精灵图一共需要几张照片渲染。(形象来说就是跳着走,而不是划着走)
第二个参数通常都是end,当一张图片完成后,才会跳到下一张,而start的话就会直接跳过第一帧,直接放第二帧。
参考资料
- qianguyihao: https://github.com/qianguyihao
- Web 教程: https://github.com/qianguyihao/Web
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 翔翔上的牙印!


