CSS布局 | 青训营笔记

126 阅读4分钟

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

前言

前一天的HTML入门让我了解了网页页面主要是由HTML、CSS和JavaScript三部分组成,今天的CSS课程老师逐渐深入,讲了CSS很多细致且全面的知识,这些是我之前自主学习过程中所欠缺的,但是在实际操作中不可忽略的。今天主要来说一下CSS如何给页面元素添加样式。

选择器(Selector)

选择器类型及优先级

CSS是通过选择器来找出页面的元素并设置其样式,主要的选择器有以下几种:

选择器格式优先级权重
id选择器#id100
类选择器.classname10
属性选择器a[ref=“eee”]10
伪类选择器li:last-child10
标签选择器div1
伪元素选择器li:after1
相邻兄弟选择器h1+p0
子选择器ul>li0
后代选择器li a0
通配符选择器*0

在某些应用场景,给元素添加CSS样式的时候我们需要通过更多的条件选择合适的元素为其添加CSS样式,这时出现了选择器组合的方式(已在上述表格中列出相应表达式)

CSS 求值过程

网页渲染 HTML 页面中的元素,首先要明确这个元素每一个属性的准确值(非 em,百分比等单位)。而CSS求值过程就是用来计算 HTML元素样式。

  • 解析HTML页面的DOM树,加载样式规则;
  • 确定声明值,即设置的值
  • filtering阶段筛选页面内元素,找到匹配的所有当前有效属性值
  • 判断层叠值优先级,即计算各级样式(浏览器自带样式、默认样式、内联样式、外部样式、行间样式)的优先级,选择优先级最高的值
  • 确定剩余未声明属性的指定值(若有层叠值,则指定值为层叠值;若没有,则为属性的默认值)
  • defaulting阶段,为没有声明值的属性指定具体的值
  • 转化为计算值,进一步转化为使用值
  • 最终获得渲染的实际值

CSS布局

浏览器页面中常用的布局方式有两栏模型和三栏模型,这些显示样式的实现大多采用常规流、浮动和定位的方式。对于行内元素和块级元素,他们在常规流中的显示样式有所不同。例如<div>等块级元素单独占据一行进行显示;而<span>等行内元素无法单独占据一行。浮动和定位配合padding和margin可以实现很多复杂页面的布局,但是由于操作步骤繁琐,出现了较为常用的flex和grid布局的方法,能够高效地获得想要的布局形式。

浮动和定位实现基本布局

浮动float能够使元素脱离文档流,相应的指令有float:left和float:right;定位position的参数可以设定为relative、absolute和fixed。当一个元素的样式设定为position:absolute,则开启了相对定位,相对的是设定为position:relative的父元素的位置;而position:fixed是相对于浏览器窗口viewpoint而言的。可以使用float和position实现三栏布局(还要用到margin负边距):

flex修改上述布局

流式布局相较于设定浮动和定位而言较为方便和简单,针对上面的三栏模型,只需将整体容器设定为flex,然后对中间内容div设定flex:1即可达到相同的目的。

.outer {
            display: flex;
            height:100px;
}
.medium {
            flex: 1;
            width: 100px;
            height: 100px;
            background: aquamarine;
}

Grid布局

Grid是网格布局,它将一个页面划分成几个主要的区域,定义这些区域的大小、位置和层次等关系,是一种css二维布局。

Grid布局和flex有很大的区别,flex是一维布局,只能处理一行或是一列。但是Grid布局是二维布局 ,将容器划分成一个个网格,可以将元素放在行和列相关的位置上,从而构建布局。下面是一个用grid布局的例子: 利用Grid布局可以实现很多其他布局样式,例如头部区域-内容区-底部区域。

今日总结

通过CSS的学习和巩固,我对CSS又有了进一步的理解,希望在后续的学习中能够更好地搭建完整的体系,继续努力!

引用参考

Grid布局详解 - 简书 (jianshu.com)

CSS(层叠样式表) | MDN (mozilla.org)

聊聊css属性值的计算过程 - 简书 (jianshu.com)