• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 媒体查询
    1. 1.1. 根据媒体类型进行断点
    2. 1.2. 逻辑操作符
    3. 1.3. 按需加载CSS
  2. 2. REM
  3. 3. 设置viewport的width

响应式布局

2017-09-06 10:55:37
总字数 683
预计阅读时间 2 分钟

媒体查询

媒体查询可以使用@media在css样式当中进行断点 , 让指定的css样式按照要求进行生效

1
2
3
4
5
@media (max-width:768px) {
.box {
color : red;
}
}

上面写在媒体查询当中的css代码 , 在页面视窗宽度小于768px时生效

根据媒体类型进行断点
  • all 所有设备
  • print 用于打印机和打印预览
  • screen 用于电脑屏幕 平板电脑 智能手机等
  • speech 屏幕阅读器等发声设备
逻辑操作符

使用逻辑操作符可以构建复杂的媒体查询 , 有and , not , only等

1
2
3
4
@media (min-width: 700px) and (orientation: landscape) {
/* 宽度大于700并且横屏的时候应用该效果 */
.box1 { color: red; }
}

只用于屏幕显示( 打印输出不生效 )

1
2
3
@media only screen and (max-width:1150px){
div{border:solid 1px;}
}
按需加载CSS

其实与上面的媒体查询作用是一样的 , 只不过在页面引入css时添加媒体查询条件

1
<link type="text/css" rel="stylesheet" href="base.css" media="(max-width:500px)"/>

浏览器在执行渲染的时候 , 实际和媒体查询是一样的 , 相当于给整个文件当中的css包装了一层媒体查询

REM

这是一个应用于长度的单位 , 所有可以用长度值来声明的CSS样式 , 都可以以它当做单位 , 比如width , font-size等等

这个单位代表的是相对于html的font-size的值
比如

1
2
3
4
5
6
7
8
9
10
html {
font-size:100px;
}
body {
/* 为了防止元素继承html的字号,干扰全局样式,所以重置为默认 */
font-size:initial;
}
.box2 {
width : 0.5rem;
}

那么box2的实际宽度就是 0.5 × 100px = 50px
基于这种机制 , 我们就可以编写页面resize事件的回调函数
在函数当中获取当前视窗的宽度与高度 , 去动态改变根元素(html节点)的font-size的值
从而让页面中的元素适应视窗大小的变化
( 假定设计稿给出的宽度是750px )

1
2
3
4
5
6
7
8
9
10
11
12
13
(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
};

if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);

设置viewport的width

这种方案 , 就是直接指定viewport的width大小

1
<meta name="viewport" content="width=750" />

但是使用了这种方案之后
因为已经将宽度定死了 , 所以针对宽度执行的媒体查询就会失效
存在很大的弊端
而使用REM方案是可以使用媒体查询的

  • 前端
  • css
  • 前端杂烩

扫一扫,分享到微信

viewport
僵尸镇·蚀心引 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆