CSS基础

本博客是在MDN的知识基础上,结合了自己的开发经验所做出的总结
MDN地址:https://developer.mozilla.org/zh-CN/



基础知识

什么是CSS?

css的英文全称是Cascading Style Sheets,它的含义是层叠样式表。它可以为HTML文档增加样式,使HTML有更合理的布局,更美观的画面。
浏览器根据HTML文档生成了DOM树,CSS会寻找DOM树上的节点,将样式一一对应到节点上,生成渲染树,得到渲染树之后,浏览器就会将页面绘制出来了。

CSS的结构

大部分CSS语句是由 一个选择器 + 一组属性 组成的。下面是例子:

h1 {
  color: blue;
  background-color: yellow;
  border: 1px solid black;
}

其中 h1 是选择器, { } 是用来包裹属性的容器,里面的内容是 属性名:属性值,每一个属性后面都需要加分号。

CSS语句

语句作用
@charset规定css文件所使用的字符集;
@import从外部引入css文件;
@media媒体查询;
@document使一些样式仅在在规定的url中生效;
@font-face自定义字体;
@supports根据浏览器对某属性的支持,来使得一些样式生效;

CSS注释

/* 基本元素样式 */
/* -------------------------------------------------------------------------------------------- */
h1 {
  color: blue;
  background-color: yellow;
  border: 1px solid black;
}

选择器

基础的选择器

选择器说明
元素选择器使用元素的名字作为选择器,如 div span;
id选择器使用 # + id 作为选择器,如 #box;
类选择器使用 . + class 作为选择器,如 .box;
通配符* 表示选择所有元素;

属性选择器

根据元素的 属性及值来匹配元素

使用方式说明
[attr]选择包含 attr 属性的所有元素,不论 attr 的值为何;
[attr=val]选择 attr 属性被赋值为 val 的所有元素;
[attr~=val]选择 attr 属性的值(以空格间隔出多个值)中有包含 val 值的元素;
[attr=val]
[attr^=val]选择attr属性的值以val开头(包括 val)的元素;
[attr$=val]选择attr属性的值以val结尾(包括 val)的元素;
[attr*=val]选择attr属性的值中包含字符串 val 的元素;

伪类

伪类,英文名为 pseudo-class,是一个以冒号(:)作为前缀的关键字,当你希望样式在特定状态下才被呈现到指定的元素时,你可以往元素的选择器后面加上对应的伪类

伪类作用
:link未被访问过的连接;
:visited已被访问过的链接;
:hover鼠标移入;
:active激活过的链接(点击过的);
:root根元素,等同于html元素;
:focus获得焦点;
:blur失去焦点;
:checked被选中;
:enabled未启用;
:indeterminate状态不确定的表单元素;
:disabled禁用的表单元素;
:default默认状态下的表单元素;
:empty不包含任何文本和子节点的元素;
:not()表示不选择括号内的内容
:first-child第一个元素
:last-child最后一个元素
:nth-child()选择第几个元素,传入 n 作为变量

伪元素

伪元素(Pseudo-element)跟伪类很像,但它们又有不同的地方。它们都是关键字 —— 但这次伪元素前缀是两个冒号 (::) —— 同样是添加到选择器后面达到指定某个元素的某个部分。

伪元素作用
::before在元素的起始位置增加一个元素;
::after在元素的最末位置增加一个元素;
::first-letter元素内文本的首个字母;
::first-line元素内文本的首行;
::selection被用户所选择的文本;

选择器之间的组合

组合方式作用
AB选择同时满足两个选择器的元素;
A,B选择满足A或者满足B的元素;
A B选择A的子集中 符合条件B的元素;
A>B选择A的直接子节点 符合条件B的元素;
A+BB是A的下一个兄弟节点;
A~BB是A之后的兄弟节点中的任意一个;

值和单位

数值

常用的数值单位列表:

单位意义
pxpixels,像素值,绝对单位;
em相对于自身的字体大小;
rem相对于根元素html的字体大小;
vw相对于视窗的宽度;
vh相对于视窗的高度;
deg角度,360deg为一周;
s秒数;
无单位当一个值被设置为0的时候,不需要写单位;

不常用的数值单位:

单位意义
mm, cm, in毫米(Millimeters),厘米(centimeters),英寸(inches);
pt, pc点(Points (1/72 of an inch)), 十二点活字( picas (12 points.));
ex, ch小写x的高度,数字0的宽度;

百分比

百分比单位,在不同的属性中表示不同的意义

属性意义
width / height相对于父级元素的width / height;
line-height相对于自己的字体大小;
font-size相对于父级元素的字体大小;
margin / padding相对于父级元素的宽度;

颜色

颜色的表示方式:
十六进制: #000000
十六进制简写: #000

英文表示: red

rgb: rgb(255, 255, 255);
rgba: rgba(255,255,255,.4);

hsl(色调、饱和度、明度):hsl(0,100%,50%);
hsla:hsla(240,100%,50%,.5);

不透明度:opacity

函数

属性意义
rgba颜色与不透明度 ;
hsla颜色与不透明度;
rotate旋转;
translate位置平移;
calc计算;
url引入文件;

优先规则

根据选择器

选择器中的权重值计算:

  • id选择器加一百分
  • 类选择器加十分
  • 属性选择器加一分

计算后得到的分数,即为该选择器的权重分,权重分高的选择器中,样式会优先展示。

根据位置

  • 写在style中的样式最优先
  • 内联样式表优先于外部样式表
  • 在同一样式表内,拥有同样权重值的选择器,后面的优先

!important

在一个属性后追加 !important 可以无视选择器的权重计算,强制使该属性优先,这是一个除非不得已,否则不建议使用的方法。
如果想要一个属性 !important 更加优先,则需要在一个权重值更高的选择器上使用 !important

继承规则

自动产生继承的属性

在css中,一些父级拥有的属性会被子级自动继承到,这些属性大部分是字体相关的,下面是可以被继承的属性列表:

属性
font系列
color
cursor
line-height
pointer-events
user-select

与继承相关的值

属性意义
inherit值与与父级相同
initial与浏览器默认的样式相同,若浏览器没有设置默认样式,则与inherit表现相同
unset将属性重置为其自然值,即如果属性是自然继承的,那么它就表现得像inherit,否则就是表现得像initial
revert属性值被设置成自定义样式所定义的属性(如果被设置), 否则属性值被设置成用户代理的默认样式。

属性汇总

文本相关

属性意义
color文字颜色
font-family使用的字体类型
font-size文字大小
font-style设置文字斜体
font-weight设置文字粗细
text-decoration设置文字下划线
text-transform设置文字大小写转换
text-shadow设置文字阴影
text-align文本对齐
line-height行高
letter-spacing/word-spacing文字间距
text-indent文本缩进
text-overflow文字超出的设置
white-space对于空白和换行的处理
word-break换行的设置
direction文本方向

https://developer.mozilla.org/zhCN/docs/Learn/CSS/%E4%B8%BA%E6%96%87%E6%9C%AC%E6%B7%BB%E5%8A%A0%E6%A0%B7%E5%BC%8F/Fundamentals

列表相关

属性意义
list-style列表样式,常设置为none用来清空列表样式
list-style-type列表符号的类型
list-style-position列表符号的位置
list-style-image列表符号替换为指定的图片

盒子模型系列

下面是display相关的值:

意义
block使目标成为块级元素
inline使目标成为内联元素
inline-block使目标成为内联块元素
table使得元素获得table布局的特点
flex弹性盒子布局
grid网格系统布局

盒模型的属性:

属性意义
width/height宽与高
min-width/max-height最大/最小的宽与高
padding内边距
border边框
margin外边距
box-sizing盒子模型对于距离理解的设置

盒模型相关属性:

属性意义
overflow处理溢出的内容
outline类似于border,但是不影响盒子大小

背景相关

属性意义
background所有背景相关设置的简写
background-color背景色
background-image背景图
background-position背景图放置的位置
background-repeat背景图的重复规律
background-size背景图的尺寸
background-attachment当内容滚动时,指定元素背景的行为
background-clip背景图裁剪的位置

边框相关

属性意义
border所有边框相关设置的简写
border-width边框的粗细
border-style边框的样式
border-color边框的颜色
border-radius边框的圆角
border-top(left/right/bottom)上下左右的边框
border-top(left/right/bottom)-width(style/color)所有边框相关设置的简写
border-image使用图片作为边框
border-image-source图片的地址
border-image-slice图片的切片大小
border-image-repeat图片重复的规律
border-image-width调整边界图像
border-image-outset定义边界内部和内边距之间的额外空间的大小

表格相关

属性意义
table-layout规定布局方式
border-collapse规定表格中边框的呈现方式,通常使用collapse合并边框
table-layout规定布局方式

其他的修饰

属性意义
box-shadow盒子的阴影
filter滤镜
background-blend-mode将单个元素的多重背景图片和背景颜色设置混合在一起
mix-blend-mode将一个元素与它覆盖的那些元素各自所设置的背景(background)和内容(content)混合在一起

布局

正常的文档布局流

正常布局流是指在不对页面进行任何布局控制时,浏览器默认的HTML布局方式。

浮动float

浮动的元素会脱离文档流
浮动使得布局更加方便,也可以做出文本环绕、首字下沉这样优雅的效果。

浮动的元素有几个特点:
- 脱离文档流
- 所有浮动元素获得块级元素的特点
- 默认的宽度和高度会变为0
- 当父级宽度不足时,会自动换行
- 可以做出文本环绕的效果

浮动相关的属性:

属性意义
float使得元素产生浮动,拥有三个值noneleftright
clear使得元素可以清除周围的浮动,拥有三个值bothleftright
overflow设置值为hidden,可以清除子级的浮动

最常用的清除浮动的方式是给父级的::after元素加上clear:both;属性

定位position

定位的知识:

  • 使用positiong来将一个元素设置为定位元素
  • position有四个值:static表示没有定位,absolute表示绝对定位,relative表示相对定位,fixed表示固定定位
  • absolute(绝对定位)是相对于定位父级产生的定位
  • relative(相对定位)是相对于自身产生的定位
  • fixed(固定定位)是相对于浏览器视窗的定位
  • 定位父级是指拥有绝对或相对定位的父级,页面中最上层的定位父级是html元素
  • 在元素拥有定位后,需要使用top/bottom/left/right来规定他们的位置
  • 具有定位的元素,层级比较高的元素会呈现在页面的前面
  • 默认情况下,子级元素的层级高于父级元素,后面的元素层级高于前面的元素
  • 可以使用z-index属性来规定元素的层级

拥有absolute绝对定位的元素,元素本身会发生一点变化:

  • 会拥有块级元素的特点
  • 默认的宽高变为0

CSS3中新增了一种定位方式sticky,现在还没有被广泛支持,允许定位的元件像它被相对定位一样动作,直到其滚动到某一阈值点(例如,从视口顶部10像素),之后它变得固定。对于制作粘性布局很有帮助。

弹性盒子flex

推荐阮一峰老师的博客:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

父级属性:

属性意义
display:flex;使得该元素称为弹性盒子
flex-direction:row/row-reverse/column/column-reverse规定排列方向
flex-wrap:nowrap/wrap/wrap-reverse规定换行规则
flex-flowflex-directionflex-wrap两个属性的简写
justify-content:flex-start/flex-end/center/space-between/space-around水平方向的对齐规则
align-items:flex-start/flex-end/center/baseline/stretch竖直方向的对齐规则
align-content规定了多根轴线的对齐方式

子级属性:

属性意义
order定义项目的排列顺序。数值越小,排列越靠前,默认为0
flex-grow定义项目在存在剩余空间时的放大比例,默认为0
flex-shrink定义项目在存在剩余空间时的缩小比例,默认为0
flex-basis定义了在分配多余空间之前,项目占据的主轴空间,默认值为auto
flexflex-grow, flex-shrinkflex-basis的简写
align-self:auto/flex-start/flex-end/center/baseline/stretch相对于父级的align-items

网格布局grid

网格布局的思想类似于bootstrap中的栅格布局,但是它的功能比栅格布局要强大的多,现在还没有被支持。
参考:https://www.jianshu.com/p/d183265a8dad

块级格式化上下文BFC

参考:http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html

BFC(Block formatting context)直译为”块级格式化上下文”。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。

与BFC相对应的,还有IFC(Inline Formatting Contexts、内联格式化上下文)、GFC(GridLayout Formatting Contexts、网格布局格式化上下文)、FFC(Flex Formatting Contexts、自适应格式化上下文)

以下情况下会产生BFC布局:

  • 浮动元素,float 除 none 以外的值
  • 绝对定位元素,position(absolute,fixed)
  • display 为以下其中之一的值 inline-blocks,table-cells,table-captions
  • overflow 除了 visible 以外的值(hidden,auto,scroll)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值