## 1px边框
在移动端中,如果给元素设置一个像素的边框,在手机上看起来是会比一个像素粗的。**解决方法:使用伪类元素模拟边框,使用transform缩放**
```
.button{
height: 36px;
line-height: 36px;
font-size: 14px;
padding: 0px;
margin: 0px;
padding-left: 16px;
padding-right: 16px;
background-color: white;
border: none;
outline: none;
box-sizing: border-box;
border-radius: 5px;
position: relative;
-webkit-user-select: none;
-ms-user-select: none;
-moz-user-select: none;
text-decoration: none;
display: block;
}
.button:after{
content: '';
z-index: 1;
position: absolute;
border: 1px solid rgba(0,0,0,0.23);
pointer-events: none;
box-sizing: border-box;
transform-origin: 0 0;
transform: scale(calc(1/1));
top: 0px;
left: 0px;
width: calc(100% * 1);
height: calc(100% * 1);
border-radius: calc(5px * 1);
transition: all ease-in-out 150ms;
background-color: rgba(0,0,0,0);
}
.button:active:after{ background-color: rgba(0,0,0,0.1); }
.button.button-blue{
background-color: #3F51B5;
color: white;
}
.button.button-blue:active:after{ background-color: rgba(0,0,0,0.15); }
@media screen and (-webkit-min-device-pixel-ratio: 2)
{
.button:after
{
border-radius: calc(5px * 2);
width: calc(100% * 2);
height: calc(100% * 2);
transform: scale(calc(1/2));
}
}
@media screen and (-webkit-min-device-pixel-ratio: 3)
{
.button:after
{
border-radius: calc(5px * 3);
width: calc(100% * 3);
height: calc(100% * 3);
transform: scale(calc(1/3));
}
}
@media screen and (-webkit-min-device-pixel-ratio: 4)
{
.button:after
{
border-radius: calc(5px * 4);
width: calc(100% * 4);
height: calc(100% * 4);
transform: scale(calc(1/4));
}
}
```
```
.a::after {
content: '';
display: block;
width: 100%;
height: 1px;
background: #333;
position: absolute;
left: 0;
bottom: 0;
transform: scaleY(0.5)
}
```
- web知识概览
- 2020年web 开发十大趋势
- 渐进式web应用(PWA)
- 热更新和热重载
- 前端架构
- 模块化
- DOM渲染方式
- 前端网页的构成
- web缓存
- web缓存
- web缓存之浏览器缓存
- 缓存副作用
- URL中的特殊字符
- 算法或场景
- 下拉刷新和上拉加载
- 下拉刷新和上拉加载实现原理
- 防抖和节流
- 去除数组中重复的内容
- 有效的括号
- N数之和
- No.1 两个数之和
- No.15 三个数之和
- No.16 最接近的三数之和
- No.18 四个数之和
- No.454 四个数之和
- 优化问题
- 性能优化问题
- 减少页面加载时间的方法
- 优化图片加载
- 网站重构
- HTML5
- HTML5应用程序缓存和浏览器缓存区别
- HTML5应用程序缓存具体实现
- 如何判断在线还是离线状态?
- 语义化的理解
- Canvas和SVG图形的区别
- localStorage&seesionStorage&Cookie&Session
- 绘制摩天轮
- HTML5新增特性
- HTML5布局
- CSS
- CSS选择器及优先级
- Sass&Less
- CSS元素垂直居中方法
- 两个div垂直居中
- 一个div,相对于body垂直居中
- 让一个不定宽高的盒子水平垂直居中
- CSS优化、提高性能的方法
- 相近标签区别
- css盒子模型,box-sizing属性
- CSS3新增特性
- CSS Reset
- 浏览器的默认样式
- CSS Reset 历史演变
- Normalize.css 介绍
- CSS Reset 与 Normalize.css区别
- Normalize.css源码解读
- v3.0.3
- V8.0.1
- 制定CSS基础代码库
- CSS布局 layout
- 概述
- Grid 布局
- 基本概念
- Grid 布局属性
- 示例代码
- 容器属性
- 项目属性
- 容器属性&项目属性
- Flex 布局
- 基本概念
- Flex布局属性
- 容器属性
- 项目属性
- javascript
- promise
- 为什么有会Promise?
- Promise是什么?
- Promise基本用法
- Promise.prototype.then()
- Promise.prototype.catch()
- then()+catch()
- Promise.prototype.finally()
- Promise.all()
- Promise.race()
- Promise.all()&Promise.race()
- 闭包
- javascript数据类型
- 数据类型
- String
- Number
- Boolean
- Symbol
- Undefined
- Null
- Object
- BigInt
- Typeof
- JS基础知识
- 体现JS综合能力的面试题
- 关于闭包
- 原型和原型链
- ES5继承和ES6继承
- 原生AJAX请求步骤
- 事件委托
- 事件委托
- 使用事件委托和不使用的实现方式
- 封装一个事件委托
- 事件流
- 考作用域
- 宏任务&微任务
- 相关概念
- 具体实例
- 实例1-考察微任务宏任务的经典
- 实例2
- 实例3-在浏览器中的表现
- 实例4
- await
- 浅拷贝与深拷贝
- 概念
- 赋值、浅拷贝、深拷贝
- 浅拷贝的实现方式
- 深拷贝的实现方式
- Object.create() 和 new Object()
- JS阻止事件冒泡的方法
- jquery $()
- JS添加监听事件
- Polyfill
- typescript
- 什么是TypeScript
- JavaScript 与 TypeScript 的区别
- TypeScript 安装
- tsc 常用编译参数
- Hello TypeScript
- TypeScript基础语法
- TypeScript 基础类型
- js数据类型
- string 字符串
- number 数值
- boolean 布尔值
- Null 和 Undefined
- void空值
- Any 类型
- never 类型
- 数组的类型
- 元组
- 枚举
- Number(数值)
- String(字符串)
- Array(数组)
- 联合类型
- 对象的类型——接口
- 联合类型和接口
- 接口和数组
- 类
- 类的概念
- ES6 中类的用法
- ES7 中类的用法
- TypeScript 中类的用法
- TypeScript 创建类
- 类和接口
- 对象
- 函数的类型
- TypeScript 变量声明
- TypeScript变量作用域
- 类型断言(Type Assertion)
- 类型断言VS类型转换VS类型声明VS 泛型
- 类型推论
- TypeScript 忽略错误
- TypeScript 命名空间
- TypeScript 模块
- TypeScript 声明文件
- 声明文件
- 概要
- declare var 声明全局变量
- declare function 声明全局方法
- declare class 声明全局类
- declare enum 声明全局枚举类型
- declare namespace 声明(含有子属性的)全局对象
- interface 和 type 声明全局类型
- declare global 扩展全局变量
- declare module 扩展模块
- export 导出变量
- export namespace 导出(含有子属性的)对象
- export default ES6 默认导出
- export = commonjs 导出模块
- export as namespace UMD 库声明全局变量
- /// <reference /> 三斜线指令
- 书写声明文件-库的使用场景
- ES6
- var、let、const区别
- 箭头函数
- set/map
- 解构赋值及原理
- ES6转ES5
- 浏览器
- 同源&跨源
- 同源策略
- 浏览器为什么不支持跨域
- 跨源网络访问
- 跨域解决方案
- CORS 跨来源资源共享
- 简单请求
- 复杂请求
- 浏览器支持
- 简单请求与复杂请求跨域设置
- 浏览器内核
- CSS Hack
- 输入URL到页面显示的过程
- 输入URL到页面加载显示完成,这个过程发生了什么?
- 输入URL到页面显示,浏览器内部到底发生了什么?
- 概述-输入URl到页面显示,过程发生了什么?
- 概述-输入URL到页面显示,浏览器内部发生了什么?
- 怎么与服务端保持连接
- 重绘和回流
- CDN
- web前端攻击方式
- 谷歌浏览器
- chrome浏览器支持ajax请求本地文件
- 浏览器可以产生的cookie及每个cookie大小
- 浏览器的并发数列表
- vue
- vue2.X VS vue3.0
- vue3.0
- Vuex
- Vuex安装及使用
- Vuex是什么?
- Vuex核心概念
- State
- Getter
- Mutation
- Action
- Module
- 项目结构
- 插件
- 严格模式
- 热重载
- vuex数据流动过程
- vuex组织及管理
- Vue2.X
- NodeJS安装
- 安装VUE2.X
- 创建一个基于webpage的新项目
- vue.js 提供一个命令行工具,可用于快速搭建大型单页应用
- 创建一个基于webpack-simple的项目
- methods 方法
- 选项/数据
- data
- 概念、理论
- Vue响应式原理
- vue生命周期
- 细小知识
- computed 的实现原理
- Vue 中的 key 到底有什么用?
- nextTick 的原理
- vue 是如何对数组方法进行变异的
- Vue 组件 data 为什么必须是函数
- Vue 的渲染过程
- keep-alive 的实现原理和缓存策略
- vm.$set()实现原理
- 单页应用,如何实现其路由功能
- Vue的路由实现
- vue开发中遇到的问题
- 自定义及引入
- 插件使用
- 自定义插件
- 组件引入
- 自定义组件
- 自定义过滤器
- 自定义指令
- 封装 vue 组件&传参
- 父子组件生命周期执行顺序
- 虚拟 DOM
- 热重载 vue-loader
- 基于Vue的SPA如何优化页面加载速度
- 通过prerender-spa-plugin插件进行SEO优化
- 搜索引擎蜘蛛
- gzip压缩-webpack构建的项目开启gzip压缩及nginx配置gzip
- Vue 可视化项目管理器 vue-ui
- vue项目打包之后文件太大的优化
- vue 页面跳转方式及传参
- watch对象
- Vue + Vue-router + Element-ui搭建项目
- 简介
- vue-cli 安装模板及初始化项目
- 安装Element UI&初始化页面布局
- 侧边菜单栏
- 侧边菜单栏优化
- Hearder优化
- 组件路由与懒加载
- Vue router / Element 重复点击导航路由报错
- 打包部署
- Vue引入ElementUI
- Vue Router
- 路由懒加载
- 导航守卫
- axios模块化
- vue应用
- 使用 canvas 实现手写电子签名
- HTTP
- HTTP简介
- HTTP工作原理
- HTTP请求格式和响应格式
- HTTP请求方法
- HTTP状态码
- HTTP和HTTPS
- HTTP1.0、HTTP1.1、HTTP2.0
- 强缓存和协商缓存
- webpack
- webpack介绍
- webpack概念
- loader
- 从零构建webpack项目
- 01 版本配置和安装
- Step01 初始化项目,生成package.json
- Step02 安装WebPack和初始化WebPack
- 01 安装项目依赖
- 02 新建src/index.js,然后执行webpack打包命令
- 03 通过index.html访问test.js文件
- 04 http-server服务安装并启动
- Step03 优化WebPack配置
- Step04 webpack-dev-server开发服务器
- Step05 动态文件打包,多文件打包
- Step06 编译WebPack项目中的HTML类型
- webpack.config.js &package.json
- 区分生成环境和开发环境
- 前期准备
- 插件安装及说明
- package.json
- webpack.conf.js
- webpack.dev.conf.js
- webpack.prod.conf.js
- plugin
- 介绍
- html-webpack-plugin
- 删除文件 clean-webpack-plugin
- 复制到打包文件 copy-webpack-plugin
- 将CSS提取为独立的文件 mini-css-extract-plugin && extract-text-webpack-plugin
- 优化或压缩CSS资源 optimize-css-assets-webpack-plugin
- JS压缩 terser-webpack-plugin && uglifyjs-webpack-plugin
- gzip压缩 compression-webpack-plugin
- SEO优化 prerender-spa-plugin&vue-meta-info
- 生成分析图 webpack-bundle-analyzer
- 代码分割 LimitChunkCountPlugin
- 生成分析报告 BundleAnalyzerPlugin
- 第三方包分离 CommonsChunkPlugin
- 项目打包防止缓存
- 项目应用
- 压缩代码
- bigScreenChart
- bigScreenChart01
- 知识点
- 移动端常见问题
- 安卓浏览器看背景图片,有些设备会模糊
- 图片加载
- 防止手机中页面放大和缩小
- 上下拉动滚动条时卡顿、慢
- 长时间按住页面出现闪退
- iphone及ipad下输入框默认内阴影
- ios和android下触摸元素时出现半透明灰色遮罩
- active兼容处理 即伪类:active失效
- 1px边框
- webkit mask兼容处理
- pc端与移动端字体大小的问题
- transition闪屏
- 圆角bug
- click的300ms延迟问题
- 响应式图片
- 点透bug的产生
- 设置Web应用是否以全屏模式运行
- html5调用安卓或者ios的拨号功能
- 禁止复制、选中文本
- 动画定义3D启用硬件加速
- 移动端 HTML5 audio autoplay 失效问题
- 通过transform进行skew变形,rotate旋转会造成出现锯齿现象
- 设置缓存、桌面图标、启动画面
- 移动端适配方案
- 移动端适配的技术方案及实例
- Web API
- MutationObserver
- Angular
- AngularJS & Angular 版本
- AngularJS
- Angular
- Angular Common
- Angular 文档
- Angular安装
- 哪些措施可以改善Angular 性能
- 如何进行angular的单元测试
- Angular 指令
- 组件
- 属性型指令
- 结构型指令
- angular 内置指令
- 内容投影 ViewChild和ContentChild
- Angular 路由
- Angular 2
- Angular 2
- JavaScript 环境配置
- TypeScript 环境配置
- Angular 2 架构
- 模块
- Angular 4
- Angular 5
- Angular 6
- Angular中的区域(Zone)
- 更新或升级angular cli版本
- 在Angular中生成模块
- Angular6 新功能
- 在Angular cli中的特定模块中生成组件的命令
- Angular 7
- Angular 7有什么新特性?
- IVY渲染器? Angular 7是否受支持?
- Angular7的核心依赖
- 在Angular 7中如何处理事件
- 如何将Angular 4,5,6更新为Angular 7
- Bazel 一个测试工具
- 在Angular中创建装饰器
- Angular中Structural和Attribute指令区别
- 使用CLI在Angular 7中生成类
- Angular 8
- Angular 9
- AngularJS和Angular区别
- Angular、Ionic、TypeScript、es6的关系
- Git
- git 安装及配置
- git常用命令
- 提交代码
- 拉分支和合并分支
- git 查看远程分支提交信息
- git clone时RPC failed; curl 18 transfer closed with outstanding read data remaining
- Git 克隆错误RPC failed; curl 56 Recv failure: Connection was reset.’
- WebAssembly
- 概念
- 引导-快速开始
- nodejs
- npm error
- code ELIFECYCLE
- webpack: Failed to compile.
- npm install报错Maximum call stack size exceeded
- npm常用命令
- 关于node js和 npm 版本不匹配
- Window下完全卸载删除Nodejs