add file:页面布局
This commit is contained in:
474
11-开发积累/00-准备.md
Normal file
474
11-开发积累/00-准备.md
Normal file
@@ -0,0 +1,474 @@
|
||||
|
||||
|
||||
|
||||
## 前言
|
||||
|
||||
|
||||
|
||||
|
||||
### 面试分为三部分
|
||||
|
||||
|
||||
- 技术面试:问技术问题
|
||||
|
||||
- 负责人面试:考察综合能力。比如:项目把控能力、项目深度、项目架构、业务等。
|
||||
|
||||
- hr 面试:侧重于性格、沟通、潜力等。
|
||||
|
||||
每轮面试在一小时左右。
|
||||
|
||||
|
||||
### 每轮面试的知识点
|
||||
|
||||
|
||||
一面:
|
||||
|
||||
> 主要考察基础知识。
|
||||
|
||||
- 页面布局
|
||||
|
||||
- CSS盒模型、DOM事件
|
||||
|
||||
- HTTP 协议、原型链
|
||||
|
||||
- 面向对象、通信
|
||||
|
||||
- 前端安全、算法
|
||||
|
||||
|
||||
二面:
|
||||
|
||||
|
||||
- 渲染机制
|
||||
|
||||
- JS 运行机制
|
||||
|
||||
- 页面性能
|
||||
|
||||
- 错误监控
|
||||
|
||||
|
||||
|
||||
三面:
|
||||
|
||||
|
||||
> 不再关注技术层面。
|
||||
|
||||
- 业务能力
|
||||
|
||||
- 团队协作能力
|
||||
|
||||
- 带人能力
|
||||
|
||||
终面:
|
||||
|
||||
- 职业竞争力
|
||||
|
||||
- 职业规划
|
||||
|
||||
|
||||
|
||||
面试成功需要:技术过关、面试技巧等。
|
||||
|
||||
|
||||
### 校招和社招各自看中的层面
|
||||
|
||||
校招;
|
||||
|
||||
- 知识:40%
|
||||
|
||||
- 能力:59%
|
||||
|
||||
- 经验:1%
|
||||
|
||||
|
||||
社招:
|
||||
|
||||
- 知识:30%。比如协议、业务的认知程度。
|
||||
|
||||
- 能力:50%。比如架构、业务的抽象能力、项目的把控能力。
|
||||
|
||||
- 经验:20%。项目的体现。
|
||||
|
||||
以上仅供参考。
|
||||
|
||||
|
||||
|
||||
### 面试准备
|
||||
|
||||
面试准备包括以下四个部分:
|
||||
|
||||
- 职位描述(JD)的分析
|
||||
|
||||
- 业务分析
|
||||
|
||||
- 技术栈准备
|
||||
|
||||
- 自我介绍
|
||||
|
||||
每个公司又有一套成熟的技术栈。比如在构建工具上,百度用 fis3、美团用 Gulp。
|
||||
|
||||
你要面哪个公司,要先看看对方要求的技术栈。
|
||||
|
||||
上面四个部分,我们接下来详细介绍。
|
||||
|
||||
## 职位描述(JD)的分析
|
||||
|
||||
### 介绍
|
||||
|
||||
概念:
|
||||
|
||||
- 职位描述:注重的是工作职责。
|
||||
|
||||
- 任职要求:要求的是工作能力。通常描述得很细致。
|
||||
|
||||
PS:前端的知识庞大,不可能所有的内容都准备好,但是要向“任职要求”靠拢。
|
||||
|
||||
分析职位描述(JD)的目的是:
|
||||
|
||||
- 快速识别出这个岗位是否是自己喜欢的、想要的。
|
||||
|
||||
- 目前的技能是否能胜任岗位的要求。短期内的准备能否胜任。
|
||||
|
||||
### 举例1:京东 web 前端的职位描述
|
||||
|
||||
|
||||
如下:
|
||||
|
||||
20180304_2132.png
|
||||
|
||||
|
||||
|
||||
**职位描述:**
|
||||
|
||||
(1)面试时,会同时考虑到 `PC 端和移动端`两个部分。
|
||||
|
||||
(2)`App H5开发`指的是两层意思:
|
||||
|
||||
- Hybrid 技术栈。
|
||||
|
||||
- 纯 H5 开发。和 native 开发没有关系,比如活动、专题。
|
||||
|
||||
(3)`调试数据接口`:要学习一下怎么模拟数据。
|
||||
|
||||
|
||||
(4)`前端组件库的建立`:要求较高但非常重要。体现在:
|
||||
|
||||
- 基本功要扎实,原生 js、css的理解要到位。
|
||||
|
||||
- 之前有没有前端组件库相关的项目经验
|
||||
|
||||
- 是否通读过其他的 UI 组件库。
|
||||
|
||||
|
||||
(5)`优化与重构`:难度比第四条更大。
|
||||
|
||||
PS:前三条是基本知识,第四条、第五条属于进阶。
|
||||
|
||||
|
||||
**任职要求:**
|
||||
|
||||
|
||||
(1)`3年以上工作经验`:不要太较真工作年限。`精通 H5 特性`:说明公司很看重移动端。了解H5`最新规范`:贵公司希望我对新技术是有追求的,比如`ES6`等。
|
||||
|
||||
(2)要求我们对`面向对象`部分有足够的了解。组件化的编程也离不开面向对象。
|
||||
|
||||
(3)体现了几点:
|
||||
|
||||
- `熟悉 Web 标准`:熟悉最新的标准即可。
|
||||
|
||||
- `表现与数据分离`:MVC框架。
|
||||
|
||||
- `语义化`:这个词千万不要忽视。不是什么都用 div。
|
||||
|
||||
- `实际经验`:利用框架开发的过程中,遇到过哪些问题?没有实际经验的话,也要提前准备几个问题。
|
||||
|
||||
|
||||
(4)以下几点:
|
||||
|
||||
- `前端架构分析与设计...`:说明此岗位并不面对初级岗位。因为工作一至两年的人,大部分都是**做业务开发**,缺少**系统的架构能力**。
|
||||
|
||||
我们要准备一个项目的架构(比如公司现有的项目)重新梳理,包含:目录结构的设计、复用性设计、模块化设计、自动化测试、上线流是什么。
|
||||
|
||||
|
||||
- `易读、易维护的代码`:面试过程中一定会让你写代码,来体现。要求;每个函数的功能要单一、能抽象尽量抽象。符合这两个原则,基本就满足了“易读、易维护”。
|
||||
|
||||
- `高质量、高效率的代码`,短时间内不好准备。
|
||||
|
||||
|
||||
|
||||
(5)`用户可用性、用户体验、用户研究`:考察的不是技术,而是候选人对于产品体验的理解。不仅仅只是完成功能而已。
|
||||
|
||||
|
||||
|
||||
(6)`强烈兴趣`等,是公司企业文化的一种要求。多去GitHub上看看别人的项目里用的什么新技术、多看博客。短时间内无法准备。
|
||||
|
||||
(7)了解`Sass`和`Less`:这是基本技能。
|
||||
|
||||
|
||||
(8)**熟悉**`web构建工具`:新手推荐学习 Glup,而不是 grunt。当然,你要知道 **Glup 和 grunt 的区别**。
|
||||
|
||||
PS:了解、熟悉、精通,是有区别的。
|
||||
|
||||
|
||||
(9)暂时可以忽略。如果 职位描述里没有要求`Node.js`,而你只会一点点 `Node.js`,那不建议你面试的时候把`Node.js`体现出来。否则是给自己挖坑。
|
||||
|
||||
|
||||
|
||||
### 举例2:艺龙的 web 前端的职位描述
|
||||
|
||||
如下:
|
||||
|
||||
20180304_2225.png
|
||||
|
||||
此方位
|
||||
|
||||
**职位描述:**
|
||||
|
||||
|
||||
(1)`系统化设计`:说的比较笼统。其实指的就是模块化设计、前后端分离(**数据渲染**交给前端)。
|
||||
|
||||
(2)几点:
|
||||
|
||||
- 前半句:并没有说 H5 是放在移动端做,可能同时包含 PC 和移动端。
|
||||
|
||||
- 后半句:可以看出公司对 H5 动画的要求很高。动画有三种方式:用DOM写、SVG 的path做动画、canvas。canvas 又分 2D 和 3D。我们要看岗位描述里怎么要求的。既然提到CSS3,那么CSS3里面的animation、tansition也要了解。
|
||||
|
||||
(3)微信项目,要准备:
|
||||
|
||||
- 小程序:比如看贵公司有小程序吗?我们自己要准备简单的开发和文档、组件化的内容。
|
||||
|
||||
- 微信支付。
|
||||
|
||||
- 对微信开发中的哪些坑,要了解
|
||||
|
||||
(4)和京东的第四条很像,既要会框架,也要会组件化设计。但京东的侧重从零开始,而艺龙侧重于:有的就维护,没有的就开发。
|
||||
|
||||
|
||||
**岗位要求:**
|
||||
|
||||
(1)`各种`web前端技术:用词不严谨。
|
||||
|
||||
(2)几点:
|
||||
|
||||
- `Web`标准:JS的最新标准是ES6。
|
||||
|
||||
- `可用性、可访问性`:侧重于网站的性能。 前端要做性能监控、错误监控。JS异常分为两种:**运行异常**、**资源加载错误**。一般人只能说出第一种异常。
|
||||
|
||||
(3)`工程化`:**工程化**已经是前端的必备技能。`webpack`是必须的工具,`grunt`已经过时了,如果公司提到,还是要了解。`Glup`用的很多。
|
||||
|
||||
(4)写得比较虚,面试时基本很难考察。面试时,如果写代码,要注意代码风格,该用 class、id、标签时,要注意区分。
|
||||
|
||||
(5)要准备一下 Node.js。`至少熟悉一门`:可能要求全栈开发。
|
||||
|
||||
(6)`逻辑性强`:能说出123。
|
||||
|
||||
|
||||
|
||||
|
||||
## 业务分析
|
||||
|
||||
> 业务分析
|
||||
|
||||
|
||||
CSS3 动画是重点准备的内容。
|
||||
|
||||
jQuery 要准备事件委托、选择器等。
|
||||
|
||||
ES6语法:import、export等。
|
||||
|
||||
|
||||
比如<http://jr.jd.com/>这个网站:
|
||||
|
||||
|
||||
20180304_2302.png
|
||||
|
||||
|
||||
|
||||
通过简单分析源码,我们初步得知网站的以下几点:
|
||||
|
||||
- jQuery
|
||||
|
||||
- vue 框架
|
||||
|
||||
- ES6
|
||||
|
||||
- webpack 打包工具
|
||||
|
||||
|
||||
## 技术栈准备
|
||||
|
||||
|
||||
|
||||
上图中,左侧是前端技术核心,右侧是前端工程化。
|
||||
|
||||
左侧:
|
||||
|
||||
- jQuery:要注意看源码。看源码时,要看这几个:核心架构、事件委托是什么、插件机制、兼容性。
|
||||
|
||||
- 三大框架:都是mvvm框架,准备一至两个即可,或者精心准备一个。面试时会问得很细。比如阿里会经常问Vue的源码。建议找网上的源码分析的文章。
|
||||
|
||||
- Node.js:如果没有相关项目经历,就尽量不要提。
|
||||
|
||||
- 右侧:
|
||||
|
||||
- npm:npm的常见命令、npm scripts 怎么用的。
|
||||
|
||||
- webpack:有个中文网站,讲的内容比较全。
|
||||
|
||||
|
||||
|
||||
## 自我介绍
|
||||
|
||||
|
||||
### 简历
|
||||
|
||||
简历中最重要的四个信息:
|
||||
|
||||
- 基本信息:姓名、年龄、手机、邮箱、籍贯。
|
||||
|
||||
- 学历:从大到小写。硕士 -> 本科。
|
||||
|
||||
- 工作经历:时间、公司、岗位、职责、技术栈、**业绩**。业绩是大多数人所忽略的。
|
||||
|
||||
- 开源项目、Github、说明。
|
||||
|
||||
|
||||
自我评价可以不写。
|
||||
|
||||
|
||||
项目的业绩上,要包括:**技术收益**和**业绩收益**。
|
||||
|
||||
|
||||
|
||||
### 自我陈述
|
||||
|
||||
1、**把握面试的沟通方向。**
|
||||
|
||||
|
||||
如果陈述中谈到项目,面试官可能会问:
|
||||
|
||||
- 负责了什么项目,项目是做什么的
|
||||
|
||||
- 和前端的结合点是?你的角色是?项目中承担了什么责任?
|
||||
|
||||
- 你在项目中的成绩?
|
||||
|
||||
如果你说自己是项目`负责人`,会被问到:
|
||||
|
||||
- 该项目怎么分配?有几个人参与?
|
||||
|
||||
- 作为负责人,你的角色是什么?是项目管理还是技术管理?
|
||||
|
||||
- 遇到技术难点,如何解决?
|
||||
|
||||
|
||||
|
||||
### 提问题
|
||||
|
||||
如果在深入问题时,碰到不会的,不要说“我不知道”。建议回答:
|
||||
|
||||
- **我要回去思考一下**。
|
||||
|
||||
- 这方面我没有经验,能不能**指点一下**?
|
||||
|
||||
- 有什么建议或者参考资料吗?我想把这个东西弄懂。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
2、阔达、自信的适度发挥。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
(2)
|
||||
|
||||
## 自我介绍
|
||||
|
||||
面试问的问题,很大层次上,取决你的简历和自我介绍。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
563
11-开发积累/01-页面布局.md
Normal file
563
11-开发积累/01-页面布局.md
Normal file
@@ -0,0 +1,563 @@
|
||||
|
||||
|
||||
|
||||
## 前言
|
||||
|
||||
|
||||
### 面试基础
|
||||
|
||||
- 页面布局
|
||||
|
||||
- CSS盒模型:是CSS的基石。
|
||||
|
||||
- DOM事件
|
||||
|
||||
- HTTP协议
|
||||
|
||||
- 面向对象
|
||||
|
||||
- 原型链:能说出原型链的始末
|
||||
|
||||
|
||||
### 面试进阶
|
||||
|
||||
|
||||
- 通信:普通的通信、跨域通信
|
||||
|
||||
- 安全:CSRF、XSS。
|
||||
|
||||
- 算法
|
||||
|
||||
|
||||
### 回答问题时要注意的
|
||||
|
||||
(1)题干的要求真的是字面要求的这么简单吗?
|
||||
|
||||
(2)答案怎么写,技巧在哪里
|
||||
|
||||
(3)如果想证明我的实力,应该有几种答案?
|
||||
|
||||
本文来讲一下页面布局
|
||||
|
||||
## 题目1
|
||||
|
||||
问题:假设高度默认100px ,请写出三栏布局,其中左栏、右栏各为300px,中间自适应。
|
||||
|
||||
20180305_1520.png
|
||||
|
||||
分析:
|
||||
|
||||
初学者想到的答案有两种:
|
||||
|
||||
- 方法1:浮动
|
||||
|
||||
- 方法2:绝对定位。
|
||||
|
||||
但要求你能至少写出三四种方法,才算及格。剩下的方法如下:
|
||||
|
||||
- 方法3:flexbox。移动开发里经常用到。
|
||||
|
||||
- 方法4:表格布局 table。虽然已经淘汰了,但也应该了解。
|
||||
|
||||
- 方法5:网格布局 grid。
|
||||
|
||||
下面分别讲解。
|
||||
|
||||
|
||||
### 方法1 和方法2
|
||||
|
||||
**方法1、浮动:**
|
||||
|
||||
左侧设置左浮动,右侧设置右浮动即可,中间会自动地自适应。
|
||||
|
||||
|
||||
**方法2、绝对定位:**
|
||||
|
||||
左侧设置为绝对定位, left:0px。右侧设置为绝对定位, right:0px。中间设置为绝对定位,left 和right 都为300px,即可。中间的宽度会自适应。
|
||||
|
||||
|
||||
使用`article`标签作为容器,包裹左、中、右三个部分。
|
||||
|
||||
|
||||
方法1 和方法2 的代码如下:
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Document</title>
|
||||
<style>
|
||||
html * {
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.layout {
|
||||
margin-bottom: 150px;
|
||||
}
|
||||
|
||||
|
||||
.layout article div { /*注意,这里是设置每个小块儿的高度为100px,而不是设置大容器的高度。大容器的高度要符合响应式*/
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
/* 方法一 start */
|
||||
|
||||
.layout.float .left {
|
||||
float: left;
|
||||
width: 300px;
|
||||
background: red;
|
||||
}
|
||||
|
||||
.layout.float .right {
|
||||
float: right;
|
||||
width: 300px;
|
||||
background: blue;
|
||||
}
|
||||
|
||||
.layout.float .center {
|
||||
background: green;
|
||||
|
||||
}
|
||||
|
||||
/* 方法一 end */
|
||||
|
||||
|
||||
/* 方法二 start */
|
||||
.layout.absolute .left-center-right {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.layout.absolute .left {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: 300px;
|
||||
background: red;
|
||||
}
|
||||
|
||||
/* 【重要】中间的区域,左侧定位300px,右侧定位为300px,即可完成。宽度会自使用 */
|
||||
.layout.absolute .center {
|
||||
position: absolute;
|
||||
left: 300px;
|
||||
right: 300px;
|
||||
background: green;
|
||||
}
|
||||
|
||||
.layout.absolute .right {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
width: 300px;
|
||||
background: blue;
|
||||
}
|
||||
|
||||
|
||||
/* 方法二 end */
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<!-- 方法一:浮动 start -->
|
||||
<!-- 输入 section.layout.float,即可生成 -->
|
||||
<section class="layout float">
|
||||
<!-- 用 article 标签包裹左、中、右三个部分 -->
|
||||
<article class="left-right-center">
|
||||
<!-- 输入 div.left+div.right+div.center,即可生成 -->
|
||||
<div class="left">
|
||||
我是 left
|
||||
</div>
|
||||
<div class="right">
|
||||
我是 right
|
||||
</div>
|
||||
<div class="center">
|
||||
浮动解决方案
|
||||
我是 center
|
||||
</div>
|
||||
|
||||
</article>
|
||||
|
||||
</section>
|
||||
<!-- 方法一:浮动 end -->
|
||||
|
||||
<section class="layout absolute">
|
||||
<article class="left-center-right">
|
||||
<div class="left">
|
||||
我是 left
|
||||
</div>
|
||||
<div class="right">
|
||||
我是 right
|
||||
</div>
|
||||
<div class="center">
|
||||
<h1>绝对定位解决方案</h1>
|
||||
我是 center
|
||||
</div>
|
||||
</article>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
```
|
||||
|
||||
|
||||
注意上方代码中, className 定义和使用,非常规范。
|
||||
|
||||
|
||||
效果如下:
|
||||
|
||||
20180305_1640.gif
|
||||
|
||||
|
||||
### 方法3、flexbox布局
|
||||
|
||||
将左中右所在的容器设置为`display: flex`,设置两侧的宽度后,然后让中间的`flex = 1`,即可。
|
||||
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Document</title>
|
||||
<style>
|
||||
html * {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.layout article div {
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.left-center-right {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.layout.flex .left {
|
||||
width: 300px;
|
||||
background: red;
|
||||
}
|
||||
|
||||
.layout.flex .center {
|
||||
flex: 1;
|
||||
background: green;
|
||||
}
|
||||
|
||||
.layout.flex .right {
|
||||
width: 300px;
|
||||
background: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section class="layout flex">
|
||||
<article class="left-center-right-">
|
||||
<div class="left">
|
||||
我是 left
|
||||
</div>
|
||||
<div class="center">
|
||||
<h1>flex布局解决方案</h1>
|
||||
我是 center
|
||||
</div>
|
||||
<div class="right">
|
||||
我是 right
|
||||
</div>
|
||||
|
||||
</article>
|
||||
</section>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
效果如下:
|
||||
|
||||
20180305_1700.gif
|
||||
|
||||
|
||||
|
||||
|
||||
### 方法4、表格布局 table
|
||||
|
||||
设置整个容器的宽度为100%,设置三个部分均为表格,然后左边的单元格为 300px,右边的单元格为 300px,即可。中间的单元格会自适应。
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Document</title>
|
||||
<style>
|
||||
html * {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.layout.table div {
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
/* 重要:设置容器为表格布局,宽度为100% */
|
||||
.layout.table .left-center-right {
|
||||
width: 100%;
|
||||
display: table;
|
||||
height: 100px;
|
||||
|
||||
}
|
||||
|
||||
.layout.table .left-center-right div {
|
||||
display: table-cell; /* 重要:设置三个模块为表格里的单元*/
|
||||
}
|
||||
|
||||
.layout.table .left {
|
||||
width: 300px;
|
||||
background: red;
|
||||
}
|
||||
|
||||
.layout.table .center {
|
||||
background: green;
|
||||
}
|
||||
|
||||
.layout.table .right {
|
||||
width: 300px;
|
||||
background: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section class="layout table">
|
||||
<article class="left-center-right">
|
||||
<div class="left">
|
||||
我是 left
|
||||
</div>
|
||||
<div class="center">
|
||||
<h1>表格布局解决方案</h1>
|
||||
我是 center
|
||||
</div>
|
||||
<div class="right">
|
||||
我是 right
|
||||
</div>
|
||||
|
||||
</article>
|
||||
</section>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
```
|
||||
|
||||
20180305_1855.gif
|
||||
|
||||
### 方法5、网格布局 grid
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Document</title>
|
||||
<style>
|
||||
html * {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* 重要:设置容器为表格布局,宽度为100% */
|
||||
.layout.grid .left-center-right {
|
||||
display: grid;
|
||||
width: 100%;
|
||||
grid-template-rows: 100px;
|
||||
grid-template-columns: 300px auto 300px; /* 重要:设置表格为三列,并设置每列的宽度。即可。*/
|
||||
|
||||
}
|
||||
|
||||
.layout.grid .left {
|
||||
background: red;
|
||||
}
|
||||
|
||||
.layout.grid .center {
|
||||
background: green;
|
||||
}
|
||||
|
||||
.layout.grid .right {
|
||||
background: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<section class="layout grid">
|
||||
<article class="left-center-right">
|
||||
<div class="left">
|
||||
我是 left
|
||||
</div>
|
||||
<div class="center">
|
||||
<h1>网格布局解决方案</h1>
|
||||
我是 center
|
||||
</div>
|
||||
<div class="right">
|
||||
我是 right
|
||||
</div>
|
||||
|
||||
</article>
|
||||
</section>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
```
|
||||
|
||||
|
||||
效果:
|
||||
|
||||
20180305_1920.gif
|
||||
|
||||
|
||||
|
||||
### 延伸:五种方法的对比
|
||||
|
||||
- 五种方法的优缺点
|
||||
|
||||
- 考虑中间模块的高度问题
|
||||
|
||||
- 兼容性问题:实际开发中,哪个最实用?
|
||||
|
||||
|
||||
方法1:浮动:
|
||||
|
||||
- 优点:兼容性好。
|
||||
|
||||
- 缺点:浮动会脱离标准文档流,因此要清除浮动。我们解决好这个问题即可。
|
||||
|
||||
|
||||
方法:2:绝对定位
|
||||
|
||||
|
||||
- 优点:快捷。
|
||||
|
||||
- 缺点:导致子元素也脱离了标准文档流,可实用性差。
|
||||
|
||||
|
||||
方法3:flex 布局(CSS3中出现的)
|
||||
|
||||
- 优点:解决上面两个方法的不足,flex布局比较完美。移动端基本用 flex布局。
|
||||
|
||||
|
||||
方法4:表格布局
|
||||
|
||||
- 优点:表格布局在很多场景中很实用,兼容性非常好。因为IE8不支持 flex,此时可以尝试表格布局
|
||||
|
||||
- 缺点:因为三个部分都当成了**单元格**来对待,此时,如果中间的部分变高了,其会部分也会被迫调整高度。但是,在很多场景下,我们并不需要两侧的高度增高。
|
||||
|
||||
什么时候用 flex 布局 or 表格布局,看具体的场景。二者没有绝对的优势,也没有绝对的不足。
|
||||
|
||||
|
||||
方法5:网格布局
|
||||
|
||||
- CSS3中引入的布局,很好用。代码量简化了很多。
|
||||
|
||||
PS:面试提到网格布局,说明我们对新技术是有追求的。
|
||||
|
||||
|
||||
### 延伸:如果题目中去掉高度已知
|
||||
|
||||
问题:题目中,如果去掉高度已知,我们往中间的模块里塞很多内容,让中间的模块撑开。会发生什么变化?哪个布局就不能用了?
|
||||
|
||||
|
||||
分析:其实可以这样理解,我们回去看上面的动画效果,当中间的模块变得很挤时,会发生什么效果?就是我们想要的答案。
|
||||
|
||||
答案是:**flex 布局和表格布局可以通用**,其他三个布局都不能用了。
|
||||
|
||||
|
||||
|
||||
### 总结
|
||||
|
||||
涉及到的知识点:
|
||||
|
||||
|
||||
(1)语义化掌握到位:每个区域用`section`、`article`代表容器、`div`代表块儿。如果通篇都用 div,那就是语义化没掌握好。
|
||||
|
||||
(2)页面布局理解深刻。
|
||||
|
||||
(3)CSS基础知识扎实。
|
||||
|
||||
(4)思维灵活且积极上进。题目中可以通过`网格布局`来体现。
|
||||
|
||||
(5)代码书写规范。注意命名。以及,上面的代码中,没有一行代码是多的。
|
||||
|
||||
|
||||
### 页面布局的变通
|
||||
|
||||
20180305_1931.png
|
||||
|
||||
`上下高度固定,中间自适应`,这个在移动端的页面中很常见。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1
11-开发积累/02-CSS盒模型.md
Normal file
1
11-开发积累/02-CSS盒模型.md
Normal file
@@ -0,0 +1 @@
|
||||
02-CSS盒模型.md
|
||||
6
11-开发积累/11-其他.md
Normal file
6
11-开发积累/11-其他.md
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
|
||||
## 前端基础
|
||||
|
||||
### 闭包和作用域,面试喜欢问。
|
||||
|
||||
4
11-开发积累/11-计算机网络.md
Normal file
4
11-开发积累/11-计算机网络.md
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
|
||||
- [HTTP最强资料大全](https://github.com/semlinker/awesome-http)
|
||||
|
||||
7
11-开发积累/web安全.md
Normal file
7
11-开发积累/web安全.md
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
|
||||
|
||||
|
||||
## 前言
|
||||
|
||||
攻击的原理也许你能讲出来,主要是想知道如何发现这个网站的漏洞,毕竟大部分的网站都已经把用户输入的内容各种花式过滤了
|
||||
Reference in New Issue
Block a user