1. icon
img法(Photoshop)
psd文件单独导出某个图层:右下角选中图层,单击鼠标右键选Duplicate Layer(复制图层),Document:New;切图:Image-trim,再导出png
静态服务器预览
复制代码
npm i -g http-server
http-server -c-1
background法
示例
background:
复制代码
.icons > icon{
background: transparent url(./qq.png) no-repeat 0 0; //0 0表示左上角对齐
}
.icons > .icon.qq{ background-image: url(./qq.png);
.icons > .icon.weibo{ background-image: url(./weibo.png);
.icons > .icon.weixin{ background-image: url(./weixin.png);
background合一法(雪碧图)
原理:将所有图片放到一张图片上,只显示局部
CSS Sprite Generator 按步骤做(加个prefix前缀,如xxx)
font法
iconfont原理:将字符换成对应的图片
- iconfont-html:html-entity(&开头表示特殊字符)
- iconfont-css(原理:
::before{ content:'hi' }
SVG法
iconfont-symble // 见帮助文档
只用css法(新手慎用)
css icon
2. 响应式移动端
媒体查询
直接写css样式:
less
复制代码
@media(mix-width: 250px) and (max-width: 650px) {
body{ background: red }
} // 250-650px显示css样式`
文件代替标签:
ini
复制代码
<link rel="stylesheet" href="style.css" media="only screen and (max-width:320px)">
// 设备只有在最大宽度为320px才生效(已经下载好了)
响应式(即显示/隐藏元素)
不同页面两种状态用媒体查询
less
复制代码
nav{ display: block } // 正常情况下,导航显示
@media(min-width:450px){ // 非手机页面,导航隐藏
nav {display: none;}
}
同一页面两种状态用active,classList.toggle
菜单按钮点击显示隐藏内容
复制代码
.xxx{ display: none; } // xxx默认的css状态
.xxx.active{ display: block; } // 表示css变化后的样式
menu.onClick = function(){
xxx.classList.toggle('active') // 点击切换样式
}
正紧的手机端:meta
由于iPhone手机像素为375px,而当时中国网页都是980px,因此有个不成文的规定:用375px模拟980px,这样用户就能通过缩放来访问网页。
但这显得很智障,因为我已经做了pc和手机两种,你还要给我默认缩放。禁止缩放的方法:meta
ini
复制代码
meta name="viewport", 视口
content="width=device-width, 宽度为设备宽度
user-scalable=no, 禁止用户缩放
initial-scale=1.0, 初始缩放倍数为1.0
maxmum-scale=1.0, 最大最小缩放为1.0
minimum-scale=1.0"
手机端交互方式不一样
- 没有hover
- 有touch事件
- 没有resize
- 没有滚动条
3. 动态REM
常用单位:px(像素),em(一个M(汉字/font-size)的宽度),rem(根元素的font-size) ,vh(viewport height视口高度),vw(view width视口宽度,兼容性较差)
注意:网页font-size默认为16px;chrome最小像素为12px
REM和EM区别:REM为一个根元素的宽度;EM为自己元素的font-size的宽度
手机端方案的特点:
- 所有手机显示的界面都是一样的,只是大小不同
- 1 rem == html font-size == viewport width
xml
复制代码
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<script>
var pageWidth = window.innerWidth
document.write('<style>html{font-size:'+pageWidth+'px;}</style>')
</script>
使用 JS 动态调整 REM:js获取屏幕宽度 = font-size,用REM进行缩放。用宽度来定义高度,适配的css比例才刚刚好。 (使用场景: 解决使用百分比宽度的缺陷:无法与高度适配,无法确定高度因为宽度就不确定)
注意:
- chrome的font-size最小为12px,因为如上写法导致大小为小数,所以在js获取屏幕大小后缩小10倍即可,缩小太多会使font-size小于12px而出错
- REM 可以与其他单位同时存在
css
复制代码
font-size: 16px;
border: 1px solid red;
width: 0.5rem;
4. 在 SCSS 里使用 PX2REM
- npm config set registry registry.npm.taobao.org/
- touch ~/.bashrc
- echo 'export SASS_BINARY_SITE="npm.taobao.org/mirrors/nod… >> ~/.bashrc
- source ~/.bashrc
- npm i -g node-sass
- mkdir ~/Desktop/scss-demo
- cd ~/Desktop/scss-demo
- mkdir scss css
- touch scss/style.scss
- start scss/style.scss
- node-sass -wr scss -o css
编辑 scss 文件就会自动得到 css 文件
在 scss 文件里添加
css
复制代码
@function px( $px ){
@return $px/$designWidth*10 + rem;
}
$designWidth : 640; // 640 是设计稿的宽度,你要根据设计稿的宽度填写。如果设计师的设计稿宽度不统一,就杀死设计师,换个新的。
.child{
width: px(320);
height: px(160);
margin: px(40) px(40);
border: 1px solid red;
float: left;
font-size: 1.2em;
}
即可实现 px 自动变 rem