Skip to content

CSS常见需求

清除浮动

  • BFC清除浮动 overflow: hidden
  • 通过clear清除浮动 clear:
.clearfix {
    zoom: 1;
}
.clearfix::after {
    content: "";
    display: block;
    clear: both;
}

1px边框解决方案

高分屏比普通屏幕分辨率更高,所以移动端的1px边框就会看起来较粗 解决方案:

  • 使用0.5px边框 先查询浏览器是否支持设置0.5px边框 无法兼容安卓及IOS 8以下
  • border-image
  • background-image
  • 多背景渐变实现
  • 使用box-shadow模拟边框
  • viewport + rem 实现 全局修改,适合新项目
  • 伪类 + transform 实现 (先去掉边框 再添加一个伪类 在伪类中实现边框 并通过transform scale(0.5)来解决1px边框问题) 适合老项目,局部修改

清除浏览器默认样式

reset.css 及 后来的 Normalize.css

长文本处理

超出部分换行 overflow-wrap:break-word

字符超出位置使用连字符 hyphens: auto

单行文本超出显示省略号

.ellipsis {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

多行文本超出显示省略号

.ellipsis {
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}

水平垂直居中

场景:

  • 单行文本、inline或inline-block元素
  • 固定宽高的块级盒子
  • 不固定宽高的块级盒子

单行文本、inline或inline-block元素

  • 水平居中 text-align: center
  • 垂直居中
    • 通过设置上下内边距一致,达到垂直居中的效果
    • 通过设置height和line-height来达到垂直居中

固定宽高的块级盒子

  • absolute + 负margin left、top 50%,margin负的盒子的一半
  • absolute + margin auto left、top、right、bottom全为0,margin:auto
  • absolute + calc left: calc(50% - 50px)

不固定宽高的块级盒子

  • absolute + transform
  • inline-block + text-align + vertical-align
  • writing-mode
  • table-cell
  • flex
  • grid

常用布局

两栏布局 左侧固定,右侧自适应

  • float + overflow(BFC原理)
  • float + margin
  • flex
  • grid

三栏布局 两侧栏宽度固定 中间自适应

  • 圣杯布局 浮动 + 相对定位 + 负margin
  • 双飞翼布局 浮动 + margin
  • float + overflow(BFC原理)
  • flex
  • grid

多列等高布局

  • 浮动 + padding + 负margin
  • 设置父级背景图片 + 百分比

三行布局(头尾定高主栏自适应)

  • calc
  • absolute
  • flex
  • grid

PostCSS、Sass、Less异同,以及配置使用

  • 编译环境不同:Sass安装需要Ruby环境,在服务端处理,Less需要引入less.js来处理代码
  • 变量符号不一样,less是@,Scss是$
  • 输出设置不一样,Less没有输出设置,Sass提供4种输出选项:nested、compact、compressed、expanded
  • 处理条件语句不一样:Sass支持条件语句,可以使用if else for等,Less的条件语句是when等关键词
  • 引用外部文件,文件名如果以下划线_开头,Sass回认为该文件是一个引用文件,不会编译成css文件,less引用外部文件和css中@import没什么差异
  • 工具库不一样,Sass工具库Compass,less有UI组件库Bootstrap
  • PostCSS的主要功能只有两个 第一个就是把CSS解析成JS可以操作的AST,第二个就是调用插件来处理AST并得到结果。PostCSS一般不单独使用,而是与已有的构建工具进行集成

如何防止CSS阻塞渲染

使用媒体类型和媒体查询

<link href="style.css" rel="stylesheet">  //阻塞
<link href="print.css" rel="stylesheet" media="print">  // 不阻塞
<link href="other.css" rel="stylesheet" media="(min-width: 40em)"> // 符合媒体查询条件时阻塞

移动端样式问题汇总

input 框disable时的样式问题

  • 在ios下,disable状态的输入框 会默认加上一个透明度,导致字体颜色变化
  <!-- 解决方案 -->
  input:disabled, input[disabled], textarea:disabled, textarea[disabled]{
    color: #af8867!important;
    -webkit-text-fill-color:#af8867!important; // ios 和 安卓9.0 必须添加此属性,才会生效
    background-color: transparent!important;
    opacity: 1!important;
  }

移动端手机点击输入框的时候输入框(页面)会变大

  • 由于弹出了输入框,导致输入框及页面变大 在head的meta标签中添加 user-scalable=no 可以解决
<!-- 解决方案   在head下添加以下代码 -->
<meta content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0, user-scalable=no, width=device-width" name="viewport">

手机端点击时的背景色设置

用vue3开发移动端项目时,当点击一个元素时,元素会有一个默认的背景颜色,半透明的灰色 可以禁用默认背景颜色 -webkit-tag-highlight-color: transparent; 这个属性是设定元素在移动设备上触发点击事件时 相应的背景框的颜色

浏览器兼容性问题汇总

IE兼容性问题

  • ie下input事件会在(jq中)初始化时触发一次,解决方案是先初始化focus事件,在focus事件中绑定input事件

firefox兼容性问题

  • 不支持 overflow: overlay; 属性 需要用 overflow:auto; 做兼容处理