韩海Tempest

日常样式问题记录

Nov 14, 2020 · 10min

web

标点符号不出现在行首且换行

word-break: normal;
word-wrap: break-word;

多行文字处理

/* 限制文字显示行数 */
word-wrap: break-word;
word-break: normal;
overflow: hidden;
line-clamp: 2;
/* 控制文字超出显示省略号 */
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
/* 多行文字溢出打点 */
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
-webkit-line-clamp: 2; /* 行数 */
-webkit-box-orient: vertical;

移动端android line-height不居中的问题解决方法

一般文本垂直居中都是通过line-height来实现的,但是有些时候在安卓端line-height是不生效的

span {
  height: 30px;
  line-height: 30px; /* 此处的line-height在Android上是不生效的 */
}

解决方法是给文本包裹元素的before伪元素添加以下css属性:

span::before {
  content: '';
  display: inline-block;
  vertical-align: middle;
  width: 0;
  height: 100%;
  margin-top: 1px;
}

ios键盘弹出导致表单input select等表单填写标签focus移位

原因:由于键盘弹出使得页面整体上移,键盘消失后,页面上移的元素不能回到原来的地方 解决方法:标签添加blur事件,通过window.scrollTo(0,0)使得页面回滚到原来的位置,有时候会有输入框点击不灵敏的情况出现,可以通过手动点击事件获取焦点

<div @click="focus($event)">
  <textarea
    v-model="slogan.value"
    :placeholder="slogan.slogan_placeholder"
    @blur="blur"
    class="dialog-form-item"
  ></textarea>
</div>
focus(e) {
  clearTimeout(this.blurTimer);
  e.target.focus();
}
blur() {
  this.blurTimer=setTimeout(()=>{
    window.scrollTo(0,0);
  },300);
}

禁止微信自带的下拉弹性效果

document.body.addEventListener('touchmove', (e) => {
  e.preventDefault()
}, { passive: false })
// 安卓只有e.preventDefault就可以
// ios必须加上{ passive: false }才可以
// 就不需要fixed定位了

css动画使用

css控制dom元素的变换 Background-position 控制背景图片移动在手机端可能会有效果(卡顿)性能问题 使用transform:translate() 效果更佳 使用transform:translate3d(0,0,0)可开启GPU渲染

视频自动播放

安卓不能自动播放,需要有点击事件的触发,才可以调用video的play方法

布局屏幕适配解决方案

1、通过百分比设置宽高(vh, vw) 2、通过flex布局,给固定内容指定高度不变,其他部分可以通过自适应方式解决 例如对于页面分为两块的,上面自适应,下面高度固定:

div {
  display: flex;
  div {
    flex: 1;
  }
  div {
    height: 500px;
  }
}

样式冲突问题

1、样式隔离 2、特殊命名

flex布局下,子元素内容超出打点省略

在下面的左右两栏布局中,我们要实现的是在最外层父级元素自适应宽度(跟随屏幕宽度)的情况下,子元素不定宽实现内容自适应超出打点省略。即 container 自适应宽度(跟随屏幕宽度),right定宽,left自适应宽度。实现left下context内容不换行超出打点省略,则需要在left元素上添加overflow: hidden属性即可实现。

<div class="container">
  <div class="wrap">
    <div class="left">
      <div class="title">我是一个title</div>
      <div class="sub-title">
        <div class="context">此处是需要打点省略的长文案</div>
      </div>
    </div>
    <div class="right">取消按钮</div>
  </div>
</div>

通过css实现如下:

.container {
  display: inline-block;
  width: 240px; /* 此处宽度为模拟屏幕宽度(可理解为定宽) */
  background-color: #ccc;
}
.wrap {
  display: flex;
}
.left {
  border: 2px solid #f40;
  border-radius: 5px;
  overflow: hidden;
}
.left .title {
  font-size: 24px;
  font-weigth: 500;
}
.left .sub-title .context {
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
.right {
  width: 80px;
  text-align: center;
  height: 40px;
  line-height: 40px;
  border: 2px solid #111;
  border-radius: 5px;
}

实现1px的边框

<div class="border">按钮</div>
.border {
  position: relative;
  padding: 5px 10px;
  display: inline-block;
}
.border::after {
  position: absolute;
  left: 0;
  top: 0;
  content: '';
  display: inline-block;
  box-sizing: border-box;
  width: 200%;
  height: 200%;
  border: 1px solid #f40;
  border-radius: 4px;
  background-color: rgba(0, 0, 0, 0);
  transform: scale(0.5);
  transform-origin: left top;
}
>
CC BY-NC-SA 4.0 2021-PRESENT © 韩海Tempest