CSS学习笔记

CSS总论

CSS2.1语法

css2.1语法文档:https://www.w3.org/TR/CSS21/grammar.html#q25.0
看下第一条产生式:
在这里插入图片描述
在这里 charset就是@charset的结构。
然后允许出现若干个import,它一定在charset之后,但是在其他的规则之前。
接下来支持一个长列表,这个长列表里面有三种结构:ruleset、media和page,其他的都是空白符号。
ruleset 就是普通的css规则
media就是media标签
page主要用于打印的信息
CDO、CDC是html注释的起点和止点,这可以理解为一个历史包袱,早年的CSS为了支持HTML里面不要把CSS的文本显示出来,所以允许你在这个地方用HTML注释把CSS的内容变成HTML注释,这样旧的浏览器就可以把CSS理解成HTML注释而新的浏览器就可以把CSS文本理解成CSS规则。
综上CSS2.1的主要结构如下:
@charset
@import
rules

  • @media
  • @page
  • rule

注意:CSS3的rule和这个相比可能会有一些变化,但是总体结构应该是不会改变了

@规则

• @charset : https://www.w3.org/TR/css-syntax-3/
• @import :https://www.w3.org/TR/css-cascade-4/
• @media :https://www.w3.org/TR/css3-conditional/
• @page : https://www.w3.org/TR/css-page-3/
• @counter-style :https://www.w3.org/TR/css-counter-styles-3
• @keyframes :https://www.w3.org/TR/css-animations-1/
• @fontface :https://www.w3.org/TR/css-fonts-3/
• @supports :https://www.w3.org/TR/css3-conditional/
• @namespace :https://www.w3.org/TR/css-namespaces-3/
最重要的三条:@media、@keyframes、@fontface

CSS规则

最常见的css规则:
选择器
声明

  • Key
  • Value
div
{
	background
	-color: blue;
}

Selector
• https://www.w3.org/TR/selectors-3/
• https://www.w3.org/TR/selectors-4/
Key
• Properties
• Variables: https://www.w3.org/TR/css-variables/
Value
• https://www.w3.org/TR/css-values-4/

selector

selector的标准中,现在实现比较好的是level3,level还在标准指定中。
key分为属性和变量两种,Variables引入了一种新的key值,以双减号开头。
value出了包含正常的值还有函数类型的值,不同的属性会有不同的value
selector-level3的产生式:
在这里插入图片描述
selector_group的语法是由逗号分割的selector构成的。
在这里插入图片描述
每个selector由一个simple_selector_sequence组成,它们由combinator相连接。
在这里插入图片描述
combinator有加号、大于号、波浪线。
在这里插入图片描述
simple_selector_sequence 由简单选择器构成,简单选择器有类型选择器、universal选择器,可以是hash、class、attrib、伪类或伪元素选择器、带not的选择器(以:not开头的)
selector-level4 和selector-level3是类似的,但是它的选择器更加复杂,增加了伪类选择器,而且它的not也更加强大,还增加了或和与的关系。

variable

variable的用法是我们去声明一个双减号开头的variable, 然后就可以在子元素里面使用这个variable:

:root {
--main-color: white;
}

#foo h1 {
color: var(--main-color--);
}

CSS选择器

http://w3.org/TR
这个页面可以找到所有的标准和draft

选择器

简单选择器

  • div svg|a
  • .cls
  • #id
  • [attr=value]
  • :hover
  • ::before

选择器语法

复合选择器

  • <简单选择器><简单选择器><简单选择器>
    • 或者 div 必须写在最前面
      复杂选择器
  • <复合选择器><复合选择器>
  • <复合选择器>">"<复合选择器>
  • <复合选择器>"~"<复合选择器>
  • <复合选择器>"+"<复合选择器>
  • <复合选择器>"||"<复合选择器>

伪类

链接/行为

  • :any-link
  • :link :visited
  • :hover
  • :active
  • :focus
  • :target

树结构

  • :empty
  • :nth-child()
  • :nth-last-child()
  • :first-child :last-child :only-child

逻辑型

  • :not伪类
  • :where :has

伪元素

  • ::before
  • ::after
  • ::first-line
  • ::first-letter
    before和after相当于添加了一个元素,可以设定排列方式伪inline,block,inline-block
    first-line和first-letter的可用属性
    在这里插入图片描述
    思考题:
    为什么 first-letter 可以设置 float 之类的,而 first-line 不行呢? first-letter是在布局完成之后,确定了一段文字中的第一个文字,可以对其操作布局时性能开销小; 而first-line选中的是第一行文字,不同元素的宽度、文档的宽度和文本的字体大小会导致选中的文字内容不一样,要对其重新布局排版消耗性能大,所以first-letter 可以设置 float 之类的,而 first-line 不行。

CSS排版

HTML代码中可以书写开始标签,结束标签,和自封闭标签。
一对起止标签,表示一个元素。
DOM树中存储的是元素和其它类型的节点(Node)。
CSS选择器选中的是元素。
CSS选择器选中的元素,在排版时可能产生多个盒。
排版和渲染的基本单位是盒。

盒模型:排版的时候用到的基本单位
在这里插入图片描述

正常流

正常流排版

  • 收集盒进行
  • 计算盒在行中的排布
  • 计算行的排布

正常流的行级排布

在这里插入图片描述
看下一个例子:
在页面上放置一个有宽有高的inline-block
在这里插入图片描述
看下运行效果:
在这里插入图片描述
我们的文字和这个inline-block是基于基线对齐的,所以盒子的下边缘和文字的基线去做一个对齐。
那么当我们在inline-block中加入文字呢?
在这里插入图片描述
基线就变成了里面文字的基线:
在这里插入图片描述
再加一个就变成了下一行,所以行内盒子的基线是随着自己里面的文字去变化的。
我们大部分情况下,使用行内盒子,可以使用verticle-align,top、middle、bottom 就是和行的顶缘(中心线、底缘)对齐,这是几种最基本的模式,还可以和text-top和text-bottom去对齐。

正常流的块级排布

边界折叠:只有正常流里面才会发生边界折叠

BFC合并

Block Container:里面有BFC的
• 能容纳正常流的盒,里面就有BFC
• Block-level Box:外面有BFC的
• Block Box = Block Container + Block-level Box:
里外都有BFC的

Block Container
• block
• inline-block
• table-cell
• flex item
• grid cell
• table-caption
所有能够容纳里面不是特殊的display模式的,里边默认就是正常流

Block-level Box
Block level
• display:block
• display: flex
• display: table
• display: grid
• …
Inline level
• display: inline-block
• display: inline-flex
• display: inline-table
• display: inline-grid
• …
display: run-in

设立BFC(四种情况)
• floats
• absolutely positioned elements
• block containers (such as inline-blocks, table-cells, and table-captions)
that are not block boxes,
• flex items
• grid cell
• …
• and block boxes with ‘overflow’ other than ‘visible’
总结下来只有一种情况不产生BFC:
block box && overflow:visible
• BFC合并与float
• BFC合并与边距折叠
看一下示例一:
overflow:visible的情况
在这里插入图片描述
overflow:hidden的情况,产生新的BFC
在这里插入图片描述
左边的元素整体作为一个block被排进新的BFC里面
示例二:
在这里插入图片描述
在这样的代码结构下,三个块元素会产生边界折叠:
在这里插入图片描述
三个边距折叠到一起,两个元素的距离为30px;
把粉色元素的overflow改为hidden进行BFC的创建
在这里插入图片描述
此时粉色里面的元素和粉色不属于一个BFC了,所以不发生边界折叠,但是外边粉色和天蓝色的元素仍然处于同一个BFC中,所以仍然存在边界折叠。

Flex排版

Flex排版
• 收集盒进行
• 计算盒在主轴方向的排布
• 计算盒在交叉轴方向的排布

CSS动画与绘制

动画

Animation
• @keyframes定义关键帧
• animation: 使用关键帧

Animation
• animation-name 时间曲线
• animation-duration 动画的时长;
• animation-timing-function 动画的时间曲线;
• animation-delay 动画开始前的延迟;
• animation-iteration-count 动画的播放次数;
• animation-direction 动画的方向。

Transition
• transition-property 要变换的属性;
• transition-duration 变换的时长;
• transition-timing-function 时间曲线;
• transition-delay 延迟。

一次贝塞尔曲线
在这里插入图片描述
二次贝塞尔曲线
在这里插入图片描述
三次贝塞尔曲线
在这里插入图片描述

颜色

在这里插入图片描述
和颜色认知的直觉是不一致的,所以并不好用,就有了一种新的颜色谱系:
在这里插入图片描述
H色相,六种基本颜色拼成色盘,Hue进行色盘选择时角度的指定。S杂色数量,S越高颜色越鲜艳,L亮度,V明度,在W3C体系中用到的是HSL,HSL作为一种语义化的颜色,在我们更改页面整体的色调的时候,对比度等都能得到保留,是非常有意义的。

绘制

几何图形
• border
• box-shadow
• border-radius
文字
• font
• text-decoration
位图
• background-image

data uri + svg
data:image/svg+xml,<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"><ellipse cx="300" cy="150" rx="200" ry="80" style="fill:rgb(200,100,50); stroke:rgb(0,0,100);stroke-width:2"/> </svg>

CSS脑图

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值