一、视口
1.常见屏幕知识
设备 | 解释 | 描述 |
---|---|---|
宽 | 屏幕的宽度 - (单位:英寸) | 屏幕的宽度 |
高 | 屏幕的高度 -(单位:英寸) | 屏幕的高度 |
对角线 | 屏幕的对角线的长度 英寸 | 一般说手机尺寸 是指以屏幕对角线为衡量 单位是 英寸 |
逻辑分辨率 | 屏幕的宽度 * 屏幕的高度 (单位:px) | 描述屏幕的宽度和高度 |
设备分辨率 | 物理像素点 | 屏幕里面一共拥有的物理像素点的个数 |
PPI | 像素密度 | 每英寸所拥有的物理像素点 |
设备像素比 | 设备分辨率和逻辑分辨率的比例(取宽度比较) | 可以简单理解为屏幕的清晰度的倍数 |
设备分辨率就是手机中的发光点,数值越大,越清晰。
2.二倍图
一倍图:当设备像素比为1:1时,使用1个设备像素显示1个CSS像素。
二倍图:当设备像素比为2:1时,使用4个设备像素显示1个CSS像素。
一张相同的图片放在设备像素比为1的手机上和设备像素比为2的手机上时,像素比为2的手机会出现失真现象。
在设备像素比为2的手机上,原来的一个物理像素点能显示的图像却变成了 由4个物理像素点来显示,那么就会造成 就近取色的效果,出现失真现象。
在标准的viewport设置中,使用倍图来提高图片质量,解决在高清设备中的模糊问题,就是统一将图片放大到2倍,使用时缩小2倍使用。
3.视口
视口(viewport)就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口。
视口就是一个包裹着html的容器,由乔布斯发明,默认宽度980px。
3.1 布局视口
在布局视口下,html标签的宽度变成了 980px 而不是 和 屏幕等宽。
是所有手机端自带的默认视口,默认视口分辨率为 980px,把一个980px宽的页面放入到320px的小屏幕上,所以网页元素元素都非常小。
3.2 标准理想视口(开发用)
<meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,user-scalable=no">
属性名 | 取值 | 描述 |
---|---|---|
width | 正整数或device-width | 定义视口的宽度,单位为像素 |
height | 正整数或device-height | 定义视口的高度,单位为像素,一般不用 |
initial-scale | [0.0-10.0] | 定义初始缩放值 |
minimum-scale | [0.0-10.0] | 定义缩小最小比例,它必须小于或等于maximum-scale设置 |
maximum-scale | [0.0-10.0] | 定义放大最大比例,它必须大于或等于minimum-scale设置 |
user-scalable | yes/no | 定义是否允许用户手动缩放页面,默认值yes |
视口参数设置:
- meta标签用来描述或设置一个HTML网页文档的属性
- content 要设置或者描述的内容
- content 要设置或者描述的内容
- width 设置视口的宽度 device-width等于屏幕的宽度
- initial-scale 页面打开的时候视口放大的倍数 值:1
- user-scalable 是否允许用户缩放页面 值:no
- maximum-scale 如果允许放大的话 最大放大多少倍 值 :1
- minimum-scale 如果允许放大的话 最小放大多少倍 值 :1
二、流式布局(百分比布局)
为了让页面中的元素能跟随屏幕的大小变换而变化,会使用百分比的形式来设置宽度或者高度
1.几个经典布局
1.左侧固定,右侧自适应(padding)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
height: 50px;
background-color: #f34;
}
.left {
/* 1.左侧盒子固定,写死宽高 */
width: 70px;
height: 50px;
/* 2.左浮动 */
float: left;
background-color: #095;
}
.right {
/* 3.不写宽度,给右侧盒子加paddign-left,将内容挤过去 */
padding-left: 70px;
}
.right .info {
/* 4.在里面套一个盒子,使padding生效 */
height: 50px;
background-color: #06c;
}
</style>
</head>
<body>
<div class="box">
<div class="left"></div>
<div class="right">
<div class="info"></div>
</div>
</div>
</body>
</html>
2.左侧固定,右侧自适应(margin)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
height: 50px;
background-color: #f34;
}
.left {
/* 1.左侧盒子固定,写死宽高 */
width: 70px;
height: 50px;
/* 2.左浮动 */
float: left;
background-color: #095;
}
.right {
height: 50px;
/* 3.右侧标准流,直接用margin挤过去 */
margin-left: 70px;
background-color: #06c;
}
</style>
</head>
<body>
<div class="box">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
3.左侧固定,右侧自适应(overflow)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
height: 50px;
background-color: #f34;
}
.left {
/* 1.左侧盒子固定,写死宽高 */
width: 70px;
height: 50px;
/* 2.左浮动 */
float: left;
background-color: #095;
}
.right {
height: 50px;
/* 3.右侧标准流,由于浮动的元素压不住overflow:hidden*/
overflow: hidden;
background-color: #06c;
}
</style>
</head>
<body>
<div class="box">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
4.右侧固定,左侧自适应(overflow)
其他两个写法与左侧固定,右侧自适应同理,只需在body中将右侧写在前面即可
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
height: 50px;
background-color: #f34;
}
.right {
/* 1.右侧盒子固定,写死宽高 */
width: 70px;
height: 50px;
/* 2.右浮动 */
float: right;
background-color: #095;
}
.left {
height: 50px;
/* 3.左侧标准流,由于浮动的元素压不住overflow:hidden*/
overflow: hidden;
/* 用margin也可以实现 */
/* margin-right: 70px; */
background-color: #06c;
}
</style>
</head>
<body>
<div class="box">
<!-- 由于代码从上往下执行,所以要将固定区域写在前面, -->
<!-- 如果自适应的区域写在前面,由于没写宽,会将一行沾满,浮动的固定区域只会另起一行 -->
<div class="right"></div>
<div class="left"></div>
</div>
</body>
</html>
5.左右固定,中间自适应
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
height: 50px;
background-color: #f34;
}
.left {
height: 50px;
float: left;
width: 70px;
background-color: #09f;
}
.right {
height: 50px;
float: right;
width: 50px;
background-color: #90f;
}
/* 左右宽高写死,左浮右浮动 */
.center {
height: 50px;
/* 1.用margin挤开左右距离 */
/* margin: 0 50px 0 70px; */
/* 2.用overflow */
overflow: hidden;
background-color: #06c;
}
</style>
</head>
<body>
<div class="box">
<!-- 同理,这里自适应的区域要写在后面 -->
<div class="left"></div>
<div class="right"></div>
<div class="center"></div>
</div>
</body>
</html>
6.左右固定,中间自适应(圣杯布局)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
text-align: center;
line-height: 50px;
}
header,
footer {
height: 50px;
background-color: #ccc;
}
footer {
clear: both;
}
.box {
/* 1.用预留出左右盒子的位置 */
padding: 0 50px 0 80px;
}
.box .center,
.box .left,
.box .right {
/* 2.三个盒子都左浮 */
float: left;
height: 50px;
}
.box .center {
/* 3.自适应区域宽度100% */
width: 100%;
background-color: #90f;
}
.box .left {
width: 80px;
background-color: #09f;
/* 4.往回走一个父盒子宽度,就是往上移一行 */
margin-left: -100%;
position: relative;
/* 5.利用相对定位,往回走自身的宽度 */
left: -80px;
}
.box .right {
width: 50px;
background-color: #f34;
/* 6.向上移动自身的宽度 */
margin-left: -50px;
/* 7.向右移动自身的宽度 */
position: relative;
right: -50px;
}
</style>
</head>
<body>
<header>header</header>
<div class="box">
<div class="center">center</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
<footer>footer</footer>
</body>
</html>
7.左右固定,中间自适应(双飞翼布局)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
text-align: center;
line-height: 50px;
}
header,
footer {
height: 50px;
background-color: #ccc;
}
footer {
clear: both;
}
.content {
/* 1.预留出左右位置 */
margin: 0 50px;
}
.box .center,
.box .left,
.box .right {
/* 2.三个盒子都左浮 */
float: left;
height: 50px;
}
.box .center {
/* 3.自适应盒子宽100% */
width: 100%;
background-color: #095;
}
.box .left {
width: 50px;
background-color: #09f;
/* 4.左边盒子上移一行 */
margin-left: -100%;
}
.box .right {
width: 50px;
background-color: #90f;
/* 5.右边盒子也上去 */
margin-left: -50px;
}
</style>
</head>
<body>
<header>header</header>
<div class="box">
<div class="center">
<div class="content">center</div>
</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
<footer>footer</footer>
</body>
</html>
2.京东案例
https://www.lanzous.com/ib5pw7a
05-移动web之流式布局的更多相关文章
-
移动web中的流式布局和viewport知识介绍
1 流式布局 其实 流式布局 就是百分比布局,通过盒子的宽度设置成百分比来根据屏幕的宽度来进行伸缩,不受固定像素的限制,内容向两侧填充. 这样的布局方式 就是移动web开发使用的常用布局方式 ...
-
Web前端_流式布局(百分比布局)
移动Web_流式布局(百分比布局) writer:late at night codepeasant 1(百分比布局) ☞核心知识点 1.流式布局(百分比布局) 2.视口设置 ☞今日目标 1. 能够使 ...
-
流式布局&;固定宽度&;响应式&;rem
我们现在在切页面布局的使用常用的单位是px,这是一个绝对单位,web app的屏幕适配有很多中做法,例如:流式布局.限死宽度,还有就是通过响应式来做,但是这些方案都不是最佳的解决方法. 1.流式布局: ...
-
webapp,liveapp: 流式布局和rem布局
liveapp场景应用,一般针对的是移动端,近来也是很火,颇有一些感受,拿来分享一下. 页面宽度范围: 一般移动端页面我们的像素范围是320px-640px,最大640px,最小320px,所以设计稿 ...
-
JAVA 流式布局管理器
//流式布局管理器 import java.awt.*; import javax.swing.*; public class Jiemian2 extends JFrame{ //定义组件 JBut ...
-
自定义View(三)--实现一个简单地流式布局
Android中的流式布局也就是常说的瀑布流很是常见,不仅在很多项目中都能见到,而且面试中也有很多面试官问道,那么什么是流式布局呢?简单来说就是如果当前行的剩余宽度不足以摆放下一个控件的时候,则自动将 ...
-
Android 自动换行流式布局的RadioGroup
效果图 用法 使用FlowRadioGroup代替RadioGroup 代码 import android.content.Context; import android.util.Attribute ...
-
Android 自定义View修炼-Android中常见的热门标签的流式布局的实现
一.概述:在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何 自定义一个类似热门标签那样的流式布局吧(源码下载在下面最后给出哈) 类似的 ...
-
转:Java图形化界面设计——布局管理器之FlowLayout(流式布局)其他请参考转载出处网址
http://blog.csdn.net/liujun13579/article/details/7771191 前文讲解了JFrame.JPanel,其中已经涉及到了空布局的使用.Java虽然可以以 ...
随机推荐
-
:target伪类制作tab选项卡
:target伪类的作用是突出显示活动的HTML锚,下面是一个简单的例子: HTML代码: <div> <a href="#demo1">点击此处</ ...
-
HDU 3833 YY&#39;s new problem ()
YY's new problem Time Limit: 12000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
-
javascript 事件相关
1.添加事件 >基本注册方式 <button id="info">click me!</button> var span = document.get ...
-
Android学习 RadioButton
http://blog.csdn.net/cuiran/article/details/45065477 https://www.baidu.com/s?wd=BadgeView%20RadioBut ...
-
.Net 中DataSet导出为excel的方法
依旧是留下代码防止以后忘记 protected void Export_Click(object sender, EventArgs e) { DataSet data = "" ...
-
一个简单的反射连接程序(修改文件时间,以及创建Windows服务)
program SvrDemo; uses Windows, WinSvc, winsock; const RegName = 'SvrDemo'; var szServiceName: p ...
-
WPF学习(8)数据绑定
说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...
-
ios学习笔记之UIViewControl生命周期
提到UIViewcontrol,每个人都不会陌生吧!平时实际开发中,每天的实际开发应该都少不了它.学过android的各位亲,也对生命周期这四个字并不陌生,无论是activity,还是service, ...
-
SAP MM Storage Location Missing in MD04 Result?
SAP MM Storage Location Missing in MD04 Result? Today I received a ticket from business team, a user ...
-
SQL执行WebService
写了一个钉钉发送消息的类, 要发送用友等审核单据信息, 模式: 钉钉发消息功能在webservice中, 用友消息列表中有新消息时,采用触发器执行webservice. 在测试中 ,功能正常 ,但将在 ...