目录
4、简述box-sizing的有效值以及所对应的盒模型规则。
6、简述align-items和align-content的区别。
7、简述data:属性的用法(如何设置,如何获取),有何优势?
8、简述 title与h1的区别,b与strong的区别,i与em的区别。
10、z-index是什么?在position的值什么时候可以触发?
19、请问苹果原生浏览器中默认样式如何清除,例如input默认样式?
22、布局左边20%,中间自适应,右边200px,不能用定位
第一种方法
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- * {
- padding: 0;
- margin: 0;
- }
-
- html,
- body {
- width: 100%;
- height: 100%;
- }
-
- body {
- background-color: azure;
- }
-
- .parent {
- width: 100%;
- height: 100%;
- background-color: orangered;
- text-align: center;
- }
-
- .child {
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- /* 使用css3的transform来实现 */
- }
-
- .child p {
- width: 300px;
- height: 400px;
- background-color: blue;
- }
- </style>
- </head>
-
- <body>
- <div class="parent">
- <div class="child">
- <p></p>
- </div>
- </div>
- </body>
-
- </html>
第二种方法 flex
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- *{
- padding: 0;
- margin: 0;
- }
- body,html{
- width: 100%;
- height: 100%;
- }
- .parent{
- display: flex;
- justify-content: center;
- align-items: center;
- width: 100%;
- height:100%;
- background: #FD0C70;
- }
- .parent .child{
- color:#fff;
- width: 200px;
- height: 300px;
- text-align: center;
- background-color: yellow;
- }
- </style>
- </head>
-
- <body>
- <div class="parent">
- <div class="child">hello world</div>
- </div>
- </body>
-
- </html>
一点
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- .m-container{margin: 5px; padding: 5px; width:100px;height: 100px;border:1px solid green;}
- .m-item {margin: 5px; width: 20px;height: 20px;border-radius: 10px;background-color: black;}
-
-
- .box4 {display: flex;justify-content: center;align-items: center;} /*水平垂直居中*/
- </style>
- </head>
-
- <body>
-
- <div class="m-container box4">
- <span class="m-item"></span>
- </div>
- </body>
-
- </html>
三点
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- .box{
- width: 200px;
- height: 200px;
- padding: 20px;
- display: flex;
- flex-direction: row;
- justify-content: space-between; /*设置两端对齐*/
- border: 2px solid #ccc;
- border-radius: 10px;
- }
- .item{
- width: 40px;
- height: 40px;
- border-radius: 50%;
- background-color: #666;
- }
- .item:nth-child(2){
- align-self: center; /*垂直方向居中*/
- }
- .item:nth-child(3){
- align-self: flex-end; /*垂直方尾对齐*/
- }
- </style>
- </head>
-
- <body>
- <div class="box">
- <div class="item"></div>
- <div class="item"></div>
- <div class="item"></div>
- <div>
- </body>
-
- </html>
最大的区别是’+’最多只能匹配到一个元素,而’~’可以匹配到多个。 ‘+’是指紧跟在后面的某同级元素 ‘~’是指某些同级元素 以以下代码为例
- <div class='try'></div>
- <p class='one'></p>
- <p class='two'></p>
如果是+
- .try + p
那么选中的只是类名为one的p
如果是~
- .try ~ p
那么选中的是类名为one和类名为two的p
- <div class='try'></div>
- <h2></h2>
- <p class='one'></p>
- <p class='two'></p>
那么
- .try + p
则什么也选择不到
- .try ~ p
则没有影响
box-sizing 属性允许您以特定的方式定义匹配某个区域的特定元素。
语法:box-sizing: content-box|border-box|inherit;
1)box-sizing:content-box;这是由 CSS2.1 规定的宽度高度行为。宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框。是默认值。如果你设置一个元素的宽为100px,那么这个元素的内容区会有100px 宽,并且任何边框和内边距的宽度都会被增加到最后绘制出来的元素宽度中
2)box-sizing:border-box;为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。告诉浏览器去理解你设置的边框和内边距的值是包含在width内的。也就是说,如果你将一个元素的width设为100px,那么这100px会包含其它的border和padding,内容区的实际宽度会是width减去border + padding的计算值。大多数情况下这使得我们更容易的去设定一个元素的宽高。
3)box-sizing:inherit;;规定应从父元素继承 box-sizing 属性的值
不会合并
align-items属性适用于所有的flex容器,它是用来设置每个flex元素在交叉轴上的默认对齐方式。如果是多行多行容器,多行和多行之间是有间距的。
align-content有相同的功能,但是align-content属性只适用于多行的flex容器,有一个重点就是多行,并且align-content在对齐的过程中,如果是多行多行容器,多行和多行之间的间距是没有的。
data-* 的值的获取和设置,2种方法:
1)传统方法
getAttribute() 获取data-属性值;
setAttribute() 设置data-属性值
2)HTML5新方法
例如 data-href
dataset.href 获取data-href属性值
dataset.href = '百度一下,你就知道' 设置data-href属性值
传统方法无兼容性问题,但是不够优雅、方便
HTML5新方法很优雅、方便,但是有兼容性问题,可以在移动端开发或不支持低版本浏览器的项目中使用
优势:自定义的数据可以让页面拥有更好的交互体验(不需要使用 Ajax 或去服务端查询数据)。
title与h1的区别:
定义:title是网站标题,h1是文章主题
作用:title概括网站信息,可以直接告诉搜索引擎和用户这个网站是关于什么主题和内容的,是显示在网页Tab栏里的;h1突出文章主题,面对用户,是显示在网页中的.
b与strong的区别:
从视觉上效果观看b与strong是没有区别的,从单词的语义也可以分析得出,b是Bold(加粗)的简写,所以这个B标记所传达的意思只是加粗,没有任何其它的作用,而Strong我们从字面理解就可以知道他是强调的意思,所以我们用这个标记向浏览器传达了一个强调某段文字的消息,他是强调文档逻辑的,并非是通知浏览器应该如何显示。
3)i与em的区别:同样,I是Italic(斜体),而em是emphasize(强调)。
标准文档流:网页在解析的时候,遵循于从上向下,从左向右的一个顺序,而这个顺序就是来源于标准文档流。
标准文档流等级,分为两种等级:块级元素和行内元素;
块级元素:
1).霸占一行,不能与其他任何元素并列
2).能接受宽、高
3).如果不设置宽度,那么宽度将默认变为父亲的100%,即和父亲一样宽
行内元素:
1).与其他元素并排
2).不能设置宽、高。默认的宽度就是文字的宽度
z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面,当脱离文档流内容较多,并且相互重叠的时候,就有可能发生本想完全显示的内容被其他内容遮挡的结果,这时我们就需要人为指定哪个层在上面,哪个在下面,z-index属性就是干这个用的。注意:Z-index 仅能在定位元素上奏效.
在position的值是relative、absolute、fixed、sticky时候可以触发
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- .demo{
- margin:0 auto;
- background: darkcyan;
- width:200px;
- height:200px;
- border:2px solid darkslategray;
- border-radius:30px;
- text-align: center;
- line-height: 200px;
- }
- </style>
- </head>
-
- <body>
-
- <div class="demo">圆角边框</div>
- </body>
-
- </html>
总体情况
h5之前,存储主要是用cookies。cookies缺点有在请求头上带着数据,大小是4k之内。主Domain污染。 主要应用:购物车、客户登录 对于IE浏览器有UserData,大小是64k,只有IE浏览器支持。
目标
解决4k的大小问题 解决请求头常带存储信息的问题 解决关系型存储的问题 跨浏览器
1.本地存储localstorage
存储方式: 以键值对(Key-Value)的方式存储,永久存储,永不失效,除非手动删除。
大小: 每个域名5M
支持情况: 常用的API:
getItem //取记录
setIten//设置记录
removeItem//移除记录
key//取key所对应的值
clear//清除记录
存储的内容:
数组,图片,json,样式,脚本。。。(只要是能序列化成字符串的内容都可以存储)
2.本地存储sessionstorage
HTML5 的本地存储 API 中的 localStorage 与 sessionStorage 在使用方法上是相同的,区别在于 sessionStorage 在关闭页面后即被清空,而 localStorage 则会一直保存。
3.离线缓存(application cache)
本地缓存应用所需的文件 使用方法: ①配置manifest文件 页面上:
...
Manifest 文件:
manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。
manifest 文件可分为三个部分:
①CACHE MANIFEST – 在此标题下列出的文件将在首次下载后进行缓存
②NETWORK – 在此标题下列出的文件需要与服务器的连接,且不会被缓存
③FALLBACK – 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)
完整demo:
CACHE MANIFEST # 2016-07-24 v1.0.0 /theme.css /main.js
NETWORK: login.jsp
FALLBACK: /html/ /offline.html
服务器上:manifest文件需要配置正确的MIME-type,即 “text/cache-manifest”。
如Tomcat:
<mime-mapping> <extension>manifest</extension> <mime-type>text/cache-manifest</mime-type> </mime-mapping>
常用API:
核心是applicationCache对象,有个status属性,表示应用缓存的当前状态:
0(UNCACHED) : 无缓存, 即没有与页面相关的应用缓存
1(IDLE) : 闲置,即应用缓存未得到更新
2 (CHECKING) : 检查中,即正在下载描述文件并检查更新
3 (DOWNLOADING) : 下载中,即应用缓存正在下载描述文件中指定的资源
4 (UPDATEREADY) : 更新完成,所有资源都已下载完毕
5 (IDLE) : 废弃,即应用缓存的描述文件已经不存在了,因此页面无法再访问应用缓存
相关的事件:
表示应用缓存状态的改变:
checking : 在浏览器为应用缓存查找更新时触发
error : 在检查更新或下载资源期间发送错误时触发
noupdate : 在检查描述文件发现文件无变化时触发
downloading : 在开始下载应用缓存资源时触发
progress:在文件下载应用缓存的过程中持续不断地下载地触发
updateready : 在页面新的应用缓存下载完毕触发
cached : 在应用缓存完整可用时触发
Application Cache的三个优势:
① 离线浏览
② 提升页面载入速度
③ 降低服务器压力
注意事项:
\1. 浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB) \2. 如果manifest文件,或者内部列举的某一个文件不能正常下载,整个更新过程将视为失败,浏览器继续全部使用老的缓存 \3. 引用manifest的html必须与manifest文件同源,在同一个域下 \4. 浏览器会自动缓存引用manifest文件的HTML文件,这就导致如果改了HTML内容,也需要更新版本才能做到更新。 \5. manifest文件中CACHE则与NETWORK,FALLBACK的位置顺序没有关系,如果是隐式声明需要在最前面 \6. FALLBACK中的资源必须和manifest文件同源 \7. 更新完版本后,必须刷新一次才会启动新版本(会出现重刷一次页面的情况),需要添加监听版本事件。 \8. 站点中的其他页面即使没有设置manifest属性,请求的资源如果在缓存中也从缓存中访问 \9. 当manifest文件发生改变时,资源请求本身也会触发更新
离线缓存与传统浏览器缓存区别:
\1. 离线缓存是针对整个应用,浏览器缓存是单个文件
\2. 离线缓存断网了还是可以打开页面,浏览器缓存不行
\3. 离线缓存可以主动通知浏览器更新资源
4.Web SQL
关系数据库,通过SQL语句访问 Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs。
支持情况: Web SQL 数据库可以在最新版的 Safari, Chrome 和 Opera 浏览器中工作。
核心方法:
①openDatabase:这个方法使用现有的数据库或者新建的数据库创建一个数据库对象。
②transaction:这个方法让我们能够控制一个事务,以及基于这种情况执行提交或者回滚。
③executeSql:这个方法用于执行实际的 SQL 查询。
- p:last-of-type 选择其父元素的最后的一个P元素
-
- p:last-child 选择其父元素的最后子元素(一定是P才行)
-
- p:first-of-type 选择其父元素的首个P元素
-
- p:first-child 选择其父元素的首个p元素(一定是p才行)
-
- p:only-child 选择其父元素的只有一个元素(而且这个元素只能是p元素,不能有其他元素)
-
- p:only-of-type 选择其父元素的只有一个p元素(不能有第二个P元素,其他元素可以有)
-
- **选第N个**
-
- p:nth-child(n) 选择其父元素的第N个 刚好是p的元素
-
- p:nth-last-child(n) ..............................................从最后一个子元素开始计数
-
- p:nth-of-type(n) 选择其父元素的n个元素
-
- p:nth-last-of-type(n) ........................从最后一个子元素开始计数
css的居中,可以分为水平居中和垂直居中,实现居中的方式有以下几种:
1.text-align:center 块状元素,水平居中
2.margin:0 auto 水平居中 以外边框为参照物,上下外边框距为0,左右外边框距浏览器会自动计算平分
3.line-height 垂直居中 通过设置行间距。line-height只适用于单行文本的元素,多行元素不适用。
4.float属性+relative定位 给父元素设置float:left ,然后父元素整体向左移动50%(position:relative;left:50%),这时父元素要清除浮动(clear:both),然后再给子元素整体向左移动50%(position:relative;left:-50%)
5.根据绝对定位absolute+margin实现水平居中 给父元素一个相对定位relative,利用绝对定位absolute,配合margin:auto自动计算外边距(position: absolute; top: 0;right: 0; bottom: 0; left: 0;margin: auto;)。相对于相对应于relative的绝对定位absolute,需要定宽。relative只是为了给子元素定位用的
6.使用absolute绝对定位+translate 移动转换,实现水平垂直居中 使用百分比来绝对定位一个元素,并配合使用translate,将元素移动定位居中(position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%))。
7.利用table布局,默认垂直居中(vertical-align:middle) 如果不是table布局的话可以:仿table(display:table-cell),一样使用vertical-align:middle实现居中对齐
8.flex布局 父元素使用display:flex,设置其属性justify-content.align-items都为center(display: flex; justify-content: center; align-items: center),实现水平居中
9.flex布局+margin 父元素使用flex布局(display:flex),子元素使用margin:auto
href 是指向bai网络资源所在位置,建立和当du前元zhi素(锚点)或当前文档dao(链接)之间的链接,zhuan用于超链接。 src是指向外shu部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。 当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。
CSS hack 是CSS中的一bai种作弊手段,因为目前du所有浏览器并没有统一对zhiCSS的支持,例如同样dao是一个margin:1px,可zhuan能在不同的浏览器中出现的效shu果就一定是1px 在这种情况下,我们只能借助于CSS hack来暂时过渡这个阶段,CSS hack就比如是IE能认出的CSS语句,而FF不能认出,这样就能达到我们的目的了,css hack在很多高级的技巧中出现,不过并不是很推荐使用,毕竟未来的css趋势还不是很明了,尽量避免吧 因为很多css错位问题其实并不是浏览器的错误,而是我们本身的编辑出现的错误。
一.背景介绍:
渐进增强和优雅降级是在CSS3出现之后才火起来的。由于低级浏览器,(特)比(别)如(是)IE6等,不支持CSS3的浏览器,但是CSS3的样式又特别优秀不忍放弃 ,所以在高级浏览器中应用CSS3样式,在低级浏览器只保证基本功能。
“渐进增强”是被Steven Champeon创造于2003年3月11日在奥斯汀的SXSW互动大会,并于2003年3月和6月间通过一系列Webmonkey教程文章的公布。 (我找了半天资料,翻了下英文文章也只找到这段历史,无奈脸),谷歌公司是很支持这种开发方式的啊,我认为渐进增强不仅是一个前端开发思想,更加是一个程序开发思想。
二.知识剖析
1.什么是渐进增强
在网页开发中,渐进增强认为应该专注于内容本身。一开始针对低版本的浏览器构建页面,满足最基本的功能,再针对高级浏 览器进行效果,交互,追加各种功能以达到更好用户体验,换句话说,就是以最低要求,实现最基础功能为基本,向上兼容。以css为例,以下这种写法就是渐进增强。
2.什么是优雅降级
在网页开发中,优雅降级指的是一开始针对一个高版本的浏览器构建页面,先完善所有的功能。然后针对各个不同的浏览器进行测试,修复,保证低级浏览器也有基本功能 就好,低级浏览器被认为“简陋却无妨 (poor, but passable)” 可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较 大的错误之外,其它的差异将被直接忽略。也就是以高要求,高版本为基准,向下兼容。同样以css为例,优雅降级的写法如下。
3.二者区别
1.)如果你采用渐进增强的开发流程,先做一个基本功能版,然后针对各个浏览器进行渐进增加,增加各种功能。相对于优雅降级来说,开发周期长,初期投入资金大。 你想一下不可能拿个基本功能版给客户看呀,多寒酸,搞不好一气之下就不找你做了,然后就炸了。但是呢,也有好处,就是提供了较好的平台稳定性,维护起来资金小, 长期来说降低开发成本。
2.)那采用优雅降级呢,这样可以在较短时间内开发出一个只用于一个浏览器的完整功能版,然后就可以拿给PM找客户谈呀,可以拿去测试,市场试水呀,对于功能尚未确定的 产品,优雅降级不失为一种节约成本的方法。
从技术出发
前缀CSS3(-webkit- / -moz- / -o-*)和正常CSS3在浏览器中的支持情况是这样的:
1.很久以前:浏览器前缀CSS3和正常CSS3都不支持;
2.不久之前:浏览器只支持前缀CSS3,不支持正常CSS3;
3.现在:浏览器既支持前缀CSS3,又支持正常CSS3;
4.未来:浏览器不支持前缀CSS3,仅支持正常CSS3.
- .transition { /渐进增强写法/
-
- -webkit-border-radius:30px 10px;
-
- -moz-border-radius:30px 10px;
-
- border-radius:30px 10px;
-
- }
-
- .transition { /优雅降级写法/
-
- border-radius:30px 10px;
-
- -moz-border-radius:30px 10px;
-
- -webkit-border-radius:30px 10px;
-
- }
三.常见问题
渐进增强和优雅降级如何抉择
四.解决方案
如果开发时间充裕,开发资金到位,就不存在抉择这个问题了,肯定是渐进增强好呀!
但是现实往往很骨感。
这个时候,就要看你开发产品的受众,受众使用的客户端。如果受众年龄覆盖面广,客户端从移动到平板到电脑,比如淘宝这种页面,那没得选,老老实实选渐进增强。
如果受众客户端单一,例如一个移动端页面,再渐进增强PC端就没那么重要了。
各有优势,但现实是绝大多数公司采用的都是渐进增强方式,毕竟业务优先,体验不会凌驾在业务上。
一、meta viewport(视口)
移动端初始视口的大小为什么默认是980px?
因为世界上绝大多数PC网页的版心宽度为 980px ,如果网页没有专门做移动端适配,此时用手机访问网页旁边刚好没有留白,不过页面缩放后文字会变得非常小。
为了解决页面缩放的体验问题,在网页代码的头部,加入一行viewport元标签。
<meta name="viewport" content="width=device-width, initial-scale=1">这里的device-width告诉浏览器,将视口的宽度设置为设备宽度(这个宽度是人为预设的,不设的话就是980px)。 属性含义
- initial-scale:第一次进入页面的初始比例
- minimum-scale:允许缩小最小比例
- maximum-scale:允许放大最大比例
- user-scalable:允许使用者缩放,1 or 0 (yes or no)
二、图片适配
此时图片会自动缩放,同时图片最大显示为其自身的100%(即最大只可以显示为自身那么大)
当容器大于图片宽度时,图片会无情的拉伸变形
三、媒体查询
为什么要媒体查询?
针对不用的设备提前为网页设定各种 CSS 样式CSS3中的Media Query模块,自动检测屏幕宽度,然后加载相应的CSS文件
语法举例
- @media screen and (min-width:1200px){
- body{
- background-color: red;
- }
当屏幕宽度大于1200px时,背景色变为红色
四、动态 rem 方案
为什么要用rem?
和媒体查询配合,实现响应式布局
px、em、rem 有什么不同?
px是pixel(像素),是屏幕上显示数据的最基本的点,在HTML中,默认的单位就是px;em 是一个相对大小,相对于父元素font-size的百分比大小rem 是相对于根元素<html>的font-size
用法示例
1、首先在HTML中设置一个基准值,如font-size: 100px;
2、将像素值除以100(设定的基准值)计算出对应的rem的值
如果一个div的宽度为600300px ,改为rem即为6rem3rem
3、根据当前屏幕的宽度和设计稿的宽度来计算此时的HTML的font-size的值
当前手机屏幕宽度为375px,设计稿宽度为640px,375/640*100->fontsize=58.59375
添加baicss样式: input[type="button"], input[type="submit"], input[type="reset"] { -webkit-appearance: none; } textarea { -webkit-appearance: none;} 然后自己du定义样式,zhi美化dao修改就好了zhuan。
为什么会有 Floats
最初,引入 float 属性是为了能让 web 开发人员实现简单的布局,包括在一列文本中浮动的图像,文字环绕在它的左边或右边。但 大家很快意识到,它可以浮动任何东西,而不仅仅是图像,所以浮动的使用范围扩大了。
当我们在网页各处使用 float 的时候,也由此引发的一些副作用,如:父元素塌陷、元素重叠,清除浮动也就是清除这些副作用。
发生了什么
当一个元素被添加float:right等属性的时候发生了什么?
float 属性可以使一个元素脱离正常的文档流(normal flow),然后被安放到它所在容器的的左端或者右端,并且其他的文本和行内元素环绕它。
float 使用了块状布局,所以元素的 display 会被改变
而 float 元素脱离了 normal flow 就相当于进入了一个平行空间,不再与其后边及父级块级元素发生反应,这一特性使得 float 元素无法撑起父元素的高度,导致父元素塌陷。
第一点中还提到其他的文本和行内元素环绕 float元素,但是 float 后的块级元素会与其发生重叠。
怎么解决
为了解决 float 属性引发的问题,我们在 CSS 中引入了clear:left|right|both属性,其作用分别是在元素的 左侧|右侧|两侧 不允许存在 float 元素,我们可以用他来清除其副作用。 利用 clear 属性我们有两种方法来清除浮动。
为 float 元素后的元素添加 clear 属性
其效果如下: 未添加
添加后
利用伪元素
有时我们会遇到上图的情况,float 元素后没有其他元素了,这时该怎么办?固然我们可以在其后添加一个空div,然后像1中一样解决问题,但这种方式并不优雅,伪元素这时候就派上用场了,我们可以写一个.clearfix 工具样式,当给需要清除浮动时,就为其加上这个类。效果如下:
修改父元素的 owerflow 属性
将父元素的 owerflow 属性修改为 owerflow:auto|hidden
这就是三种最主流的方式
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <style type="text/css">
- /* 宽度适配 */
- html,
- body {
- width: 100%;
- overflow-x: hidden;/* 外层盒子设置最小宽度的话看不到横向滚动条 */
- }
-
- /*1. pc端适配的需求:目前我们pc项目的设计稿尺寸是宽度1920,高度最小是1080。
- 2.放大或者缩小屏幕,网页可以正常显示 */
- /* 一、两列布局 */
- /* 1.左定宽 右边自适应 或者 右边定宽左边自适应 */
- .content{
- width: 1200px; /* 主容器 */
- min-width: 960px;
- margin: 0 auto;
- background: #fff;
- }
- .left {
- float: left;
- width: 200px;/* 定宽 */
- background: #ccc;
- height: 800px;/* 测试设了一个高度和背景(为了更好看效果) */
- }
-
- .right {
- margin-left: 100px;
- background: #999;
- height: 800px;/* 测试设了一个高度和背景(为了更好看效果) */
- }
- </style>
- </head>
- <body>
- <div class="content">
- <div class="left">左边</div>
- <div class="right">右边</div>
- </div>
- </body>
- </html>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <style type="text/css">
- /* 宽度适配 */
- html,
- body {
- width: 100%;
- overflow-x: hidden;
- /* 外层盒子设置最小宽度的话看不到横向滚动条 */
- }
- /* 一、三列布局 */
- /* 1.左右定宽中间自适应 */
- .content {
- width: 1200px;
- /* 主容器 */
- min-width: 960px;
- margin: 0 auto;
- background: firebrick;/* 测试设了一个背景(为了更好看效果) */
- display: table;
- }
-
- .left {
- width: 100px;
- /* 定宽 */
- background: #ccc;
- height: 800px;
- /* 测试设了一个高度和背景(为了更好看效果) */
- }
- .right {
- width: 100px;
- /* 定宽 */
- background: fuchsia;
- height: 800px;
- /* 测试设了一个高度和背景(为了更好看效果) */
- }
-
- .left,
- .right,
- .center {
- display: table-cell;
- }
- </style>
- </head>
- <body>
- <div class="content">
- <div class="left">左边</div>
- <div class="center">中间</div>
- <div class="right">右边</div>
- </div>
- </body>
- </html>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>实现三栏水平布局之双飞翼布局</title>
- <style type="text/css">
- .container {
- width: 1200px;
- /* 主容器 */
- min-width: 960px;
- margin: 0 auto;
- background: #ccc;
- /* 测试设了一个背景(为了更好看效果) */
- }
-
- .left,
- .center,
- .right {
- float: left;
- min-height: 400px;
- /* 测试更好观看效果 统一高度*/
- text-align: center;
- }
-
- .left {
- margin-left: -100%;
- background: #0000FF;
- width: 200px;
- /* 定宽 */
- }
-
- .right {
- margin-left: -300px;
- background-color: #FF0000;
- width: 300px;
- /* 定宽 */
- }
-
- .center {
- background-color: #f2f1f1;
- width: 100%;
- }
-
- .content {
- margin: 0 300px 0 200px;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="center">
- <div class="content">中间自适应</div>
- </div>
- <div class="left">左边</div>
- <div class="right">右边</div>
- </div>
- </body>
- </html>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>实现三栏水平布局之圣杯布局</title>
- <style type="text/css">
- .container {
- width: 1200px;
- /* 主容器 */
- min-width: 960px;
- margin: 0 auto;
- background: #ccc;/* 测试设了一个背景(为了更好看效果) */
- padding: 0 300px 0 200px;
- }
-
- .left,
- .center,
- .right {
- position: relative;
- min-height: 200px;
- float: left;
- }
-
- .left {
- left: -200px;
- margin-left: -100%;
- background: green;/* 测试设了一个背景(为了更好看效果) */
- width: 200px;
- }
-
- .right {
- right: -300px;
- margin-left: -300px;
- background: red;/* 测试设了一个背景(为了更好看效果) */
- width: 300px;
- }
-
- .center {
- background: blue;/* 测试设了一个背景(为了更好看效果) */
- width: 100%;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="center">center</div>
- <div class="left">left</div>
- <div class="right">right</div>
- </div>
- <div class="tip_expand">双飞翼布局比圣杯布局多创建了一个div,但不用相对布局了</div>
- </body>
- </html>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>实现三栏水平布局-Flex布局</title>
- <style type="text/css">
- .container {
- display: flex;
- width: 1200px;
- /* 主容器 */
- min-width: 960px;
- margin: 0 auto;
- background: #ccc;
- /* 测试设了一个背景(为了更好看效果) */
- min-height: 800px;
- font-size: 0; /* 间隙处理 */
- }
-
- .main {
- flex-grow: 1;
- background-color: blue;
- font-size: 24px;
- }
-
- .left {
- order: -1;/* 对于order属性:定义项目的排列顺序,越小越靠前,默认为0。 */
- flex-basis: 200px;/* 通过项目属性flex-basis 设置left和right的固定宽度 */
- background-color: green;
- font-size: 24px;
- }
-
- .right {
- flex-basis: 300px;/* 通过项目属性flex-basis 设置left和right的固定宽度 */
- background-color: red;
- font-size: 24px;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="main">main</div>
- <div class="left">left</div>
- <div class="right">right</div>
- </div>
- </body>
- </html>
左右两列200px,中间列自适应 伸缩盒布局
思路:
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>布局:左右两列200px,中间列自适应(一)</title>
- <style type="text/css">
- body {
- margin: 0;
- display: flex;
- }
-
- .left {
- width: 20%;
- height: 200px;
- background: red;
- }
-
- .center {
- height: 400px;
- background: blue;
- flex-grow: 1;
- }
-
- .right {
- width: 200px;
- height: 600px;
- background: pink;
- }
- </style>
- </head>
-
- <body>
- <div class='left'>left</div>
- <div class='center'>center</div>
- <div class='right'>right</div>
-
-
-
-
-
-
- </body>
-
- </html>