关于前端的一些常用方法

93 阅读4分钟

--css篇

1. css 一行文本超出...

overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;

2.多行文本超出显示...

display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;

3.IOS 手机容器滚动条滑动不流畅

overflow: auto;
-webkit-overflow-scrolling: touch;

4.修改滚动条样式

隐藏 div 元素的滚动条

div::-webkit-scrollbar {    
    display: none;
}
div::-webkit-scrollbar 滚动条整体部分
div::-webkit-scrollbar-thumb 滚动条里面的小方块,能向上向下移动(或往左往右移动,取决于是垂直滚动条还是水平滚动条
div::-webkit-scrollbar-track 滚动条的轨道(里面装有 
Thumbdiv::-webkit-scrollbar-button 滚动条的轨道的两端按钮,允许通过点击微调小方块的位置
div::-webkit-scrollbar-track-piece 内层轨道,滚动条中间部分(除去
div::-webkit-scrollbar-corner 边角,即两个滚动条的交汇处
div::-webkit-resizer 两个滚动条的交汇处上用于通过拖动调整元素大小的小控件注意此方案有兼容性问题,一般需要隐藏滚动条时我都是用一个色块通过定位盖上去,或者将子级元素调大,父级元素使用 overflow-hidden 截掉滚动条部分。暴力且直接。

5.使用 css 写出一个三角形角标

元素宽高设置为 0,通过 border 属性来设置,让其它三个方向的 border 颜色为透明或者和背景色保持一致,剩余一条 border 的颜色设置为需要的颜色。

div {    
    width: 0;
    height: 0;
    border: 5px solid #transparent;
    border-top-color: red;
}

6.水平垂直居中

我一般只使用两种方式 定位 或者 flex,我觉得够用了。

div {
    width: 100px;
    height: 100px;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    margin: auto;
}

.parent {
    display: flex;
    justify-content: center;
    align-items: center;
}

7.css计算-calc

这是一个 css 属性,我一般称之为 css 表达式。可以计算 css 的值。最有趣的是他可以计算不同单位的差值。很好用的一个功能,缺点是不容易阅读。接盘侠没办法一眼看出 20px 是啥。

div {
    width: calc(25% - 20px);
}

8.设置input 的默认样式

//设置input占位符的样式
input::-webkit-input-placeholder {    /* Chrome/Opera/Safari */
    color: red;
}
input::-moz-placeholder { /* Firefox 19+ */  
    color: red;
}
input:-ms-input-placeholder { /* IE 10+ */
    color: red;
}
input:-moz-placeholder { /* Firefox 18- */
    color: red;
}
//聚焦时的样式
input:focus {   
    background-color: red;
}
//取消边框
input{
    border: none;
    outline: none;
}
<input type="text" placeholder="请设置用户名">

9.虚线框绘制技巧

.border {
  width: 800px;
  margin: auto;
  padding: 20px;
  border: 1px dashed transparent;
  background: linear-gradient(white, white) padding-box, repeating-linear-gradient(-45deg, red 0, #ccc .25em, white 0, white .75em);
}

10.卡券效果制作

.coupon {
 width: 300px;
  height: 100px;
  line-height: 100px;
  margin: 50px auto;
  text-align: center;
  position: relative;
  background: radial-gradient(circle at right bottom, transparent 10px, #ffffff 0) top right /50% 51px no-repeat,
  radial-gradient(circle at left bottom, transparent 10px, #ffffff 0) top left / 50% 51px no-repeat,
  radial-gradient(circle at right top, transparent 10px, #ffffff 0) bottom right / 50% 51px no-repeat,
  radial-gradient(circle at left top, transparent 10px, #ffffff 0) bottom left / 50% 51px no-repeat;
  filter: drop-shadow(2px 2px 2px rgba(0, 0, 0, .2));
}
.coupon span {
  display: inline-block;
  vertical-align: middle;
  margin-right: 10px;
  color: red;
  font-size: 50px;
  font-weight: 400;
}<p class="coupon">
 <span>200</span>优惠券
</p>

11.表格边框合并

table{
  border-collapse: collapse;
}

--JS篇

1.解决 ios audio 无法自动播放、循环播放的问题

ios 手机在使用 audio 或者 video 播放的时候,个别机型无法实现自动播放,可使用下面的代码 hack

// 解决ios audio无法自动播放、循环播放的问题
var music = document.getElementById('video');
var state = 0;
document.addEventListener('touchstart', function(){
    if(state==0){
        music.play();
        state=1;
    }}, false);
document.addEventListener("WeixinJSBridgeReady", function () {
    music.play();},
 false);
//循环播放
music.onended = function () {
    music.load();
    music.play();
}

2.解析 get 参数

通过 replace 方法获取 url 中的参数键值对,可以快速解析 get 参数。

const q = {};
location.search.replace(/([^?&=]+)=([^&]+)/g,(_,k,v)=>q[k]=v);
console.log(q);

--html篇

使用<a>能快速调用移动设备的电话/短信/邮件三大通讯功能,使用<input>能快速调用移动设备的的图库/文件

这些功能方便了页面与系统的交互,关键在于调用格式一定要准确,否则会被移动端浏览器忽略。

<!-- 拨打电话 --><a href="tel:10086">拨打电话给10086小姐姐</a>

<!-- 发送短信 -->
<a href="sms:10086">发送短信给10086小姐姐</a>

<!-- 发送邮件 -->
<a href="mailto:young.joway@aliyun.com">发送邮件给JowayYoung</a>

<!-- 选择照片或拍摄照片 -->
<input type="file" accept="image/*">

<!-- 选择视频或拍摄视频 -->
<input type="file" accept="video/*">

<!-- 多选文件 -->
<input type="file" multiple>

忽略自动识别

有些移动端浏览器会自动将数字字母符号识别为电话/邮箱并将其渲染成上述调用系统功能里的<a>。虽然很方便却有可能违背需求。

<!-- 忽略自动识别电话 -->
<meta name="format-detection" content="telephone=no">

<!-- 忽略自动识别邮箱 -->
<meta name="format-detection" content="email=no">

<!-- 忽略自动识别电话和邮箱 -->
<meta name="format-detection" content="telephone=no, email=no">

禁止页面缓存

Cache-Control指定请求和响应遵循的缓存机制,不想使用浏览器缓存就禁止呗!