前端基础知识系列一CSS(基础布局)

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: 最近在改造之前项目的UI,发下自身对于css的许多知识掌握的还没有成体系化,乘着最近有时间就来看看我们熟悉又陌生的CSS,先说下学习路径:菜鸟教程(指的是看的人菜),MDN,掘金小册玩转CSS的艺术之美。结合着看,集百家之长,补己之短。

网络异常,图片无法展示
|

前言


最近在改造之前项目的UI,发下自身对于css的许多知识掌握的还没有成体系化,乘着最近有时间就来看看我们熟悉又陌生的CSS,先说下学习路径:菜鸟教程(指的是看的人菜),MDN,掘金小册玩转CSS的艺术之美。结合着看,集百家之长,补己之短。

本章知识点:渲染流程 回流重绘 布局类型 盒模型 BFC

渲染方式


学习css我们必须先要了解css在浏览器中是如何渲染成我们看到的样子,本节主要介绍下整个大概流程,详细的渲染原理目前我也不是非常了解后期有空在去研究下。

解析文件流程

  • HTML解析器:解析HTML为DOM树
  • CSS解析器:解析CSS为CSS树
  • 渲染引擎:合并CSS树和HTML树为渲染树
  • 渲染器:绘制图层
  • JS引擎:执行JavaScript :解析文件=》绘制图层=》合成图层

解析HTML/解析CSS

合并CSS/HTML树为渲染树

遍历渲染树绘制图层:回流/重绘

合并所有绘制的图层并且显示在屏幕

回流与重绘

  • 回流:几何属性的修改会导致浏览器的重新渲染(浏览器会清空页面重新绘制图层合并图层,只是我们自己感受不到罢了)常见的以下属性会触发回流:display float margin padding ......。
  • 重绘:更改DOM的外观属性却不影响几何属性的渲染,浏览器只会重新渲染更改的部分不会重新渲染,常见的以下属性会触发回流:background color mask outline....。
  • 优化:尽量减少浏览器的回流与重绘的次数。

基础布局


记得我大学时接触的前端,那时候上课老师是教我们使用前端三剑客Dreamware/flash/ps,Dreamware印象尤为深刻,拖拖拽拽就能生成一个网页,刚开始学习的就是使用table布局,记得那时候流行的也是table结构化布局,页面布局这个能力应该可以说是我们前端入门的基础。目前常用的布局我觉可以分为三类:普通布局(block,table),脱离文档流布局(float,position),响应式布局(flex,grid,column,vm/vw/rem...)

盒模型

如果要想熟练掌握css的布局,那我们必须去了解下css的布局模型-盒模型,因为盒模型的概念是我们排版和布局的基础。在MDN中对于盒模型的说明:在 CSS 中,所有的元素都被一个个的“盒子(box)”包围着

  • 组成结构:margin(外边距) border(线)padding(内边距)content(内容)
  • 类型(box-sizing):标准盒模型(content-box) 怪异盒模型(border-box)
  • 怪异盒模型:margin content组成,
  • margin塌陷(垂直上下的两个div):上面的设置margin-bottom,下面设置margin-top,最后他们的间距只会取最大的margin,而不是两者之和
  • margin塌陷(父子元素):父元素中的子元素设置margin top会影响到父元素的位置。
    网络异常,图片无法展示
    |
    代码如下
<p>塌陷问题兄弟元素</p>
  <div class="top">top </div>
  <div class="bottom">bottom </div> 
<p>塌陷问题父子元素</p>
<div class="main">
  <div class="child">子元素 </div>
</div>
<style>
  .main{
     width:200px;
    height:200px;
    background:red;
  }
  .child{
    width:100px;
    height:100px;
    margin-top:100px;
    background:yellow;
  }
  .top{
    background:green;
    height:150px;
    width:150px;
    margin-bottom:50px;
    overflow:hidden;
  }
  .bottom{
    background:green;
    height:150px;
    width:150px;
    margin-top:50px;
  }
</style>

块格式化上下文

提到盒模型那就需要去了解下块格式化上下文了,在MDN中块格式化上下文:块格式化上下文(Block Formatting Context,BFC)  是Web页面的可视CSS渲染的一部分,是盒子块的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

BFC的特性如下:

  • 布局方向:内部的Box会在垂直方向,一个接一个地放置。
  • margin距离:Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。
  • 每个盒子的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
  • 区域不重叠:BFC的区域不会与float box重叠。
  • 独立容器:BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
  • 高度计算:浮动元素也参与计算。

BFC的作用如下:

  • 避免margin塌陷的问题
  • 使 BFC 内部浮动元素不会到处乱跑;
  • 和浮动元素产生边界。

网络异常,图片无法展示
|
代码如下:

<p>normal demo</p>
<div style="border:solid 10px red;min-height:20px;">
  <div class="float1"></div>
</div>
<p style="clear:both;">BFC DEMO</p>
<div class="bfc">
  <div class="float2"></div>
</div>
<p >BFC塌陷问题父子元素</p>
<div class="main">
  <div class="child">子元素 </div>
</div>
<style>
  .bfc{
    display:inline-block;
    margin-top:50px;
    border:solid 10px red;
    min-height:30px;
  }
  .float1{
    float:left;
    height:50px;
    width:100px;
    background:yellow;
  }
  .float2{
    float:left;
    height:50px;
    width:100px;
    background:green;
  }
  .main{
     width:200px;
    height:200px;
    display:inline-block;
    background:red;
  }
  .child{
    width:100px;
    height:100px;
    margin-top:100px;
    background:yellow;
  }
  .top{
    background:green;
    height:150px;
    width:150px;
    margin-bottom:50px;
    overflow:hidden;
  }
  .bottom{
    background:green;
    height:150px;
    width:150px;
    margin-top:50px;
  }
</style>

布局类型

下面简单的介绍下集中常见的布局

  • table:table布局是前端早期布局常用的属性之一,他把页面看成一个表格,每一块内容是一个单元格。记得实现一些复杂的页面有可能需要单元格中再嵌套一个表格。
  • block:普通布局(block)就是我们按正常的文档流进行布局,从左到右,从上到下。
//table
<table border="1">
   <tr>
    <th>姓名</th>
    <th>年龄</th>
    <th>身高</th>
    <th>体重</th>
    <th>备注</th>
  </tr>
  <tr>
    <td>name2</td>
    <td>24</td>
    <td>168cm</td>
    <td>57kg</td>
    <td>eeeee</td>
  </tr>
  <tr>
    <td>name3</td>
    <td>24</td>
    <td>168cm</td>
    <td>57kg</td>
    <td>eeeee</td>
  </tr>
</table>
// block
<div>block</div>

// 脱离文档流

  • float:浮动布局
  • position(relative/fixed/absolute):定位布局是我们布局中比较常用的一种,例如固定导航栏,弹窗等等都需要用到定位布局的属性,其主要属性有position:relative/fixed/absolute left top right bottom....,如下所示:。
<style>
div.parent
{
  width:100vw;
  height:100vh;
  background:gray;
}
  div.child{
      width:200px;
    height:200px;
    background:blue;
    position:absolute;
    top:50%;
    left:50%;
    margin-top:-100px;
    margin-left:-100px;
  }
</style>
</head>
<body>
  <div class="parent">
    <div class="child"></div>
  </div>
</body>

使用position和margin实现居中布局

网络异常,图片无法展示
|

// 响应式布局

  • flex:flex布局,
<style>
div.parent
{
  width:100vw;
  height:100vh;
  display:flex;
  background:gray;
  justify-content:center;
  align-items:center;
}
  div.child{
      width:200px;
    height:200px;
    background:blue;
  }
</style>
</head>
<body>
   <div class="parent">
       <div class="child"></div>
   </div>
</body>

使用flex可以轻松实现居中布局

网络异常,图片无法展示
|

  • grid:栅格布局
div.parent
{
  width:400px;
  background:gray;
  display:grid;
  grid-template-columns: repeat(4,100px);
  grid-template-rows:repeat(4,100px);
  justify-items:center;
  align-items:center;
}
  div.child{
    background:blue;
    border:solid 1px #ddd;
    font-size:18px;
    width:50px;
    height:50px;
  }
</style>
</head>
<body>
  <div class="parent">
    <div class="child">1</div>
    <div class="child">2</div>
    <div class="child">3</div>
    <div class="child">4</div>
    <div class="child">5</div>
    <div class="child">6</div>
    <div class="child">7</div>
    <div class="child">8</div>
    <div class="child">9</div>
  </div>
</body>

网络异常,图片无法展示
|

  • column:列布局

就我目前的开发来看,自身用的定位布局和响应式布局还是偏多的,另外基本上这两种布局就可以处理很多常见的问题了,另外一些布局的详细属性这里就不再叙述了,大家有空可以对着文档在codeopen上多写写。

总结


前端的工作无论你是刚开始接触的小白,还是工作多年的前辈,我们都应该不断的学习与温故。前端的知识广而杂时常不看就会生疏,走出自己的舒适圈,接受新技能方能不断进步,另外说下本篇是css系列的首篇,主要是关于布局相关的总结与理解,后续还会有样式和其他的一些知识总结,有兴趣的可以继续看看。 学而不厌,诲人不倦,何由于我哉!

相关文章
|
2月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
205 1
|
2月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
147 1
|
2月前
|
前端开发 算法 Java
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
124 1
|
2月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
Flex 布局 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。 一、Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
253 0
|
2月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
盒模型 盒模型: 所谓盒模型,就是浏览器为页面中的每个HTML元素生成的矩形盒子。 这些盒子们都要按照可见板式模型在页面上排布。 可见的板式模型主要由三个属性控制:position 属性、display 属性和 float属性。 position属性控制页面上元素间的位置关系。 display属性控制元素是堆叠、并排或者不在页面上显示。 float属性提供控制的方法,以便于把元素组成成多栏布局。 盒模型讲解: 在默认的情况下,每个盒子的边框是不可见的,背景也是透明的。 所以我们 不能直接的看到页面中的盒
160 1
|
2月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
Animation属性 css3为Animation动画提供的几个属性如下: 属性名 属性值 animation-name 指定动画名称,该属性指定一个已有的关键帧定义。 animation-duration 指定动画持续时间。 animation-timing-funtion 指定动画变化速度。 animation-delay 指定动画延迟多长时间才开始执行。 animation-iteration-count 指定动画的循环执行次数。 animation:这是一个复合属性。
199 1
|
2月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
position定位(核心) 我们讲盒模型的时候,提到了3个属性可以用来控制页面排版。 三大属性:position属性,display属性,float属性。 position 属性控制页面上元素间的位置关系。 display 属性控制页面元素是否显示或者是堆叠还是并排显示。 float 属性提供控制方法。 通过float这种控制方法,可以实现多栏布局,导航菜单等等。 position属性是干嘛用的?怎么用?有哪些属性值? position属性控制页面上元素间的位置关系,也就是排版。 怎么用?要知道怎么用
369 1
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1035 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
337 0
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
466 6

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    199
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    205
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    147
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    124
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    253
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    369
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    160
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    98
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    170
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    233