HTML+CSS | 青训营笔记

101 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第1天

html简单汇总

  • 页面内容 CSS设计样式,JavaScript定义用户的行为-->在浏览器界面运行,而浏览器又是通过http协议进行通信的。
    根本问题:图形界面下的人机交互问题

image.png

image.png

CSS

  • 用来定义页面元素的样式
    1. 设置字体和颜色
    1. 设置位置和大小
    1. 添加动画效果

image.png

CSS的使用

<link rel="stylesheet" href="/assets/style.css">

<!-- 嵌入 -->
<style>
  li { margin: 0; list-style: none; }
  p { margin: 1em 0; }
</style>

<!-- 内联 -->
<p style="margin:1em 0">Example Content</p>

CSS选择器

  • 通配选择器: *{}

  • 标签选择器:标签名(eg.h1){}

  • id选择器: #id名{}

  • 类选择器: .类名{}

  • 属性选择器: [属性名]{} 伪类(不基于标签和属性定位元素)

  • 几种伪类

    • 状态伪类
    • 结构性伪类**:
      存在于DOM树中,但如果不特别声明,将看不到他。 image.png

image.png 选择器特异度(决定权重)
1. #nav .list li a:link
2. .hd ul .links a
分析代码,1中id 选择器有 1个(#nav),类与伪类共有 2个(.list 与 :link),元素与伪元素共有 2个(li 与 a)。所以在 1 中的特异度为 122;2中id 选择器有 0个,类与伪类共有 2个(.hd 与 .links),元素与伪元素共有 2个(ul 与 a)。所以在 2 中的特异度为 022,122>022,所以2中的选择器优先级更高。
盒子:从外到内:外边距(margin)--边界(border)--内边距(padding)--内容(content box) width和height都是对内容大小进行设定,百分数制也是相对于内容部分,padding是相对于容器

布局

常规流

Block Level BoxInline Level Box
不和其它盒子并列摆放和其它行级盒子一起放在一行或拆开成多行
适用所有的盒模型属性盒模型中的width、height不适用
块级元素行级元素
-----------------------------------------------------------------------------
生成块级盒子- 生成行级盒子 - 内容分散在多个行盒 (line box) 中
body、article、div、main、section、h1-6、p、ul、li 等span、em、strong、cite、code 等
display: blockdisplay: inline
display:可以使行级和块级转化

根元素、浮动和绝对定位的元素会脱离常规流

行级排版上下文

  • Inline Formatting Context (IFC)

  • 只包含行级盒子的容器会创建一个IFC

  • IFC 内的排版规则

    • 盒子在一行内水平摆放
    • 一行放不下时,换行显示
    • text-align 决定一行内盒子的水平对齐
    • vertical-align 决定一个盒子在行内的垂直对齐
    • 避开浮动(float)元素 块级排版上下文
  • Block Formatting Context (BFC)

  • 某些容器会创建一个BFC

    • 根元素
    • 浮动、绝对定位、inline-block
    • Flex子项和Grid子项
    • overflow 值不是 visible 的块盒
    • display: flow-root;
    • 盒子从上到下摆放 BFC内排版规则
  • 垂直 margin 合并

  • BFC 内盒子的 margin 不会与外面的合并

  • BFC 不会和浮动元素重叠 20220723170032.png flex-shrink:在绝对值上,根据扩展或收缩权重,将剩余空间或缺少空间分配给父级中的盒子。 计算值:浏览器拿到CSS后,就能够马上算出或者转换的值。 还有一些值只知道html和css不能够直接确定绝对值的,比如60%,需要知道渲染的具体环境才能确定-->formatting 使用值。