前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,如今前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提高技术水平,打牢基础知识的中心思想,咱们开课啦(每周四)。css
- Iconfont 字体图标(阿里巴巴矢量字体图标库)原理以及实现
- Media媒体响应式布局
- Flex弹性盒子布局
- 移动端适配原理 rem(px、em、rem、%、vm)
width: 200px
,能放多少放多少经过修改 @font-face
定义字体,而后替换元素的 font-family
。(顺便说句题外话,有些网页防爬,服务端输出数据1594,前端修改font-fmaily
把 1594 对应到 5941,以此来达到看到的数据是对的,爬走的数据是假的。)html
@font-face{font-family: 'iconfont'; src: url('iconfont.eot'); src: url('iconfont.eot?#iefix') format('embedded-opentype'), url('iconfont.woff') format('woff'), url('iconfont.ttf') format('truetype'), url('iconfont.svg#iconfont') format('svg'); } .iconfont{ font-family:"iconfont" !important; font-size:16px;font-style:normal; -webkit-font-smoothing: antialiased; -webkit-text-stroke-width: 0.2px; -moz-osx-font-smoothing: grayscale;} <i class="iconfont">3</i>
unicode是字体在网页端最原始的应用方式,特色是:前端
- 兼容性最好,支持ie6+,及全部现代浏览器。
- 支持按字体的方式去动态调整图标大小,颜色等等。
- 可是由于是字体,因此不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
font-class 是 unicode 使用方式的一种变种,主要是解决 unicode 书写不直观,语意不明确的问题。其实和上面相比就是把字符写在 content: "\e502";
中。css3
@font-face {font-family: "iconfont"; src: url('iconfont.eot?t=1552637571329'); /* IE9 */ src: url('iconfont.eot?t=1552637571329#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('data:application/x-font-woff2;charset=utf-8;base64,') format('woff2'), url('iconfont.woff?t=1552637571329') format('woff'), url('iconfont.ttf?t=1552637571329') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('iconfont.svg?t=1552637571329#iconfont') format('svg'); /* iOS 4.1- */ } .iconfont { font-family: "iconfont" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .icon-h5-copy:before { content: "\e502"; }
与unicode使用方式相比,具备以下特色:git
- 兼容性良好,支持ie8+,及全部现代浏览器。
- 相比于unicode语意明确,书写更直观。能够很容易分辨这个icon是什么。
- 由于使用class来定义图标,因此当要替换图标时,只须要修改class里面的unicode引用。
- 不过由于本质上仍是使用的字体,因此多色图标仍是不支持的。
这是一种全新的使用方式,应该说这才是将来的主流,也是平台目前推荐的用法。这种用法实际上是作了一个svg的集合,与上面两种相比具备以下特色:github
- 支持多色图标了,再也不受单色限制。
- 经过一些技巧,支持像字体那样,经过font-size,color来调整样式。
- 兼容性较差,支持 ie9+,及现代浏览器。
- 浏览器渲染svg的性能通常,还不如png。
选择你所须要的,而后下载。看demo.html,里面有代码。web
使用 @media 查询,能够针对媒体类型、屏幕尺寸来设置样式。当你重置浏览器大小的过程当中,页面也会根据浏览器的宽度和高度从新渲染页面。chrome
语法segmentfault
@media mediatype and|not|only (media feature) { CSS-Code; }
媒体类型(mediatype)浏览器
值 | 描述 |
---|---|
all | 用于全部设备 |
用于打印机和打印预览 | |
screen | 用于电脑屏幕,平板电脑,智能手机等 |
speech | 应用于屏幕阅读器等发声设备 |
媒体特征(media feature)
测试页面,经常使用的其实很少,主要就是判断设备宽度。
// https://v4.bootcss.com/docs/4.0/layout/overview/#responsive-breakpoints // Extra small devices (portrait phones, less than 576px) // No media query since this is the default in Bootstrap // Small devices (landscape phones, 576px and up) @media (min-width: 576px) { ... } // Medium devices (tablets, 768px and up) @media (min-width: 768px) { ... } // Large devices (desktops, 992px and up) @media (min-width: 992px) { ... } // Extra large devices (large desktops, 1200px and up) @media (min-width: 1200px) { ... }
值 | 描述 |
---|---|
device-height | 定义输出设备的屏幕可见高度 |
device-width | 定义输出设备的屏幕可见宽度 |
height | 定义输出设备中的页面可见区域高度 |
width | 定义输出设备中的页面可见区域宽度 |
max-device-height | 定义输出设备的屏幕可见的最大高度 |
max-device-width | 定义输出设备的屏幕最大可见宽度 |
max-height | 定义输出设备中的页面最大可见区域高度 |
max-width | 定义输出设备中的页面最大可见区域宽度 |
min-device-width | 定义输出设备的屏幕最小可见宽度 |
min-device-height | 定义输出设备的屏幕的最小可见高度 |
min-height | 定义输出设备中的页面最小可见区域高度 |
min-width | 定义输出设备中的页面最小可见区域宽度 |
orientation | 定义输出设备中的页面可见区域高度是否大于或等于宽度 |
容器的属性(父级)
属性名 | 属性值 | 默认值 | 描述 |
---|---|---|---|
display | flex inline-flex | static | 定义为弹性盒子 |
flex-direction | row(主轴为水平方向,起点在左端) row-reverse(主轴为水平方向,起点在右端) column(主轴为垂直方向,起点在上沿) column-reverse(主轴为垂直方向,起点在下沿) |
row | 排列方向 |
flex-wrap | nowrap(不换行) wrap(换行,第一行在上方) wrap-reverse(换行,第一行在下方) |
nowarp | 内容放不下,如何换行 |
flex-flow | <flex-direction> <flex-wrap> | row nowarp | 是flex-direction属性和flex-wrap属性的简写形式 |
justify-content | flex-start(左对齐) flex-end(右对齐) center(居中) space-between(两端对齐) space-around(每一个项目两侧的间隔相等。因此,项目之间的间隔比项目与边框的间隔大一倍); |
flex-start | 主轴上的对齐方式,默认来讲就是水平对齐text-align |
align-items | flex-start(顶部) flex-end(底部) center(居中) baseline(文字基线) stretch(垂直拉伸); |
stretch | 交叉轴对齐方式,默认来讲就是垂直对齐vertical-align |
align-content | flex-start(顶部) flex-end(底部) center(居中) space-between(轴线之间的间隔平均分布) space-around(每根轴线两侧的间隔都相等) stretch(轴线占满整个交叉轴) |
stretch | 定义了多根轴线的对齐方式。若是项目只有一根轴线,该属性不起做用。 |
项目的属性(子集、子元素)
注意,设为Flex布局之后,子元素的float、clear和vertical-align属性将失效。
移动端适配要解决的问题
如何解决问题
rem 基于 html 的 font-size。实时更新 font-size 和屏幕宽度成比例,基于屏幕宽度适配
其中又分为基于媒介查询
@media screen and (min-width:350px){html{font-size:342%;}} @media screen and (min-width:360px){html{font-size:351.5625%;}} @media screen and (min-width:375px){html{font-size:366.2%;}} @media screen and (min-width:384px){html{font-size:375%;}} @media screen and (min-width:390px){html{font-size:380.859%;}} @media screen and (min-width:410px){html{font-size:400%;}} @media screen and (min-width:432px){ /* 魅族3 */html{font-size:421.875%;}} @media screen and (min-width:480px){html{font-size:469%;}} @media screen and (min-width:540px){html{font-size:527.34%;}} @media screen and (min-width:640px){html{font-size: 625%;}} @media screen and (min-width:768px){html{font-size: 750%;}}
vw/vh/vmin/vmax 新单位,直接基于屏幕宽度适配
<!-- dpr = 1--> <meta name="viewport" content="initial-scale=scale,maximum-scale=scale,minimum-scale=scale,user-scalable=no"> <!-- dpr = 2--> <meta name="viewport" content="initial-scale=0.5,maximum-scale=0.5,minimum-scale=0.5,user-scalable=no"> <!-- dpr = 3--> <meta name="viewport" content="initial-scale=0.3333333333,maximum-scale=0.3333333333,minimum-scale=0.3333333333,user-scalable=no">
上面说了那么多,其实仍是有坑的,下面咱们来讲说适配有什么坑。
手淘方案在新出的曲面屏上表现怪异。那是由于他这个方案有一个最大值,而曲面屏超过了这个极限值。解决方案呢两个
惯例补上主讲人文章