高频CSS总结

news2024/10/11 2:15:20
高频CSS
盒模型

IE怪异 width=width+padding+border box-sizing: border-box;

W3C标准 box-sizing: content-box;

BFC

在正常情况下,块级元素的外边距会折叠。当一个元素形成了BFC时,它的外边距不会和其内部的子元素的外边距折叠。

触发条件:

  • 根元素,即HTML元素

  • 绝对定位元素 position: absolute/fixed

  • 行内块元素 display的值为inline-blocktableflexinline-flexgridinline-grid

  • 浮动元素:float值为leftright

  • overflow值不为 visible,为 autoscrollhidden

    BFC对布局的影响

  1. BFC 的区域不会与 float 的元素区域重叠
  2. 计算 BFC 的高度时,浮动子元素也参与计算
  3. 文字层不会被浮动层覆盖,环绕于周围

应用:

  • 阻止margin重叠
  • 自适应两栏布局
  • 可以避免高度塌陷
  • 可以包含浮动元素 —— 清除内部浮动(清除浮动的原理是两个div都位于同一个 BFC 区域之中)
选择器权重计算方式

!important > 内联样式 = 外联样式 > ID选择器 > 类选择器 = 伪类选择器 = 属性选择器 > 元素选择器 = 伪元素选择器 > 通配选择器 = 后代选择器 = 兄弟选择器

清除浮动
  1. 在浮动元素后面添加 clear:both 的空 div 元素
  2. 给父元素添加 overflow:hidden 或者 auto 样式,触发BFC
  3. 使用伪元素,也是在元素末尾添加一个点并带有 clear: both 属性的元素实现的。xxx:after{content: ".";clear: both;}(推荐)
垂直居中
  1. 利用绝对定位+transform,设置 left: 50%top: 50% 现将子元素左上角移到父元素中心位置,然后再通过 translate 来调整子元素的中心点到父元素的中心。该方法可以不定宽高

    .father {
      position: relative;
    }
    .son {
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
    
  2. 利用绝对定位+margin:auto,子元素所有方向都为 0 ,将 margin 设置为 auto ,由于宽高固定,对应方向实现平分,该方法必须盒子有宽高

    .father {
      position: relative;
    }
    .son {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0px;
      margin: auto;
      height: 100px;
      width: 100px;
    }
    
  3. 利用绝对定位+margin:负值,设置 left: 50%top: 50% 现将子元素左上角移到父元素中心位置,然后再通过 margin-leftmargin-top 以子元素自己的一半宽高进行负值赋值。该方法必须定宽高

.father {
  position: relative;
}
.son {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 200px;
  height: 200px;
  margin-left: -100px;
  margin-top: -100px;
}
  1. 利用 flex ,最经典最方便,可以不定宽高
 .father {
        display: flex;
        justify-content: center;
        align-items: center;
    }
  1. grid网格布局可以不定宽高
.father {
  display: grid;
  align-items:center;
  justify-content: center;
}
  1. table布局
 .father {
        display: table-cell;
        vertical-align: middle;
        text-align: center;
    }
    .son {
        display: inline-block;
    }
内联元素居中布局
  • 水平居中
    • 行内元素可设置:text-align: center
    • flex布局设置父元素:display: flex; justify-content: center
  • 垂直居中
    • 单行文本父元素确认高度:height === line-height
    • 多行文本父元素确认高度:display: table-cell; vertical-align: middle
块级元素居中布局
  • 水平居中

    • 定宽: margin: 0 auto
    • 绝对定位+left:50%+margin:负自身一半
  • 垂直居中

    • position: absolute设置lefttopmargin-leftmargin-top(定高)
    • display: table-cell
    • transform: translate(x, y)
    • flex
    • grid,兼容性相对比较差
CSS3新特性
选择器
新样式
  1. 三个边框属性,分别是:
  • border-radius:创建圆角边框
  • box-shadow:为元素添加阴影
  • border-image:使用图片来绘制边框
  1. box-shadow 设置元素阴影(水平阴影和垂直阴影是必须设置的)
  • 水平阴影
  • 垂直阴影
  • 模糊距离(虚实)
  • 阴影尺寸(影子大小)
  • 阴影颜色
  • 内/外阴影
  1. 背景
  • background-clip

    • background-clip: border-box; 背景从border开始显示
    • background-clip: padding-box; 背景从padding开始显示
    • background-clip: content-box; 背景显content区域开始显示
    • background-clip: no-clip; 默认属性,等同于border-box
  • background-origin:决定图片以哪个边进行左上角对齐

    • background-origin: border-box; 从border开始计算background-position
    • background-origin: padding-box; 从padding开始计算background-position
    • background-origin: content-box; 从content开始计算background-position
    • 默认情况是padding-box,即以padding的左上角为原点
  • background-size

  • background-break

    • background-break: continuous; 默认值。忽略盒之间的距离(也就是像元素没有分成多个盒子,依然是一个整体一样)
    • background-break: bounding-box; 把盒之间的距离计算在内;
    • background-break: each-box; 为每个盒子单独重绘背景
  1. 文字
  • word-wrap: normal|break-word
    • normal:使用浏览器默认的换行
    • break-all:允许在单词内换行
  • text-overflow
    • clip:修剪文本
    • ellipsis:显示省略符号
  • text-shadow
  • text-decoration
    • text-fill-color: 设置文字内部填充颜色
    • text-stroke-color: 设置文字边界填充颜色
    • text-stroke-width: 设置文字边界宽度
  1. 颜色
  • css3新增了新的颜色表示方式rgbahsla
    • rgba分为两部分,rgb为颜色值,a为透明度
    • hala分为四部分,h为色相,s为饱和度,l为亮度,a为透明度
transition 过渡

display:none<->display:block不能用过渡

transition: CSS属性,花费时间,效果曲线(默认ease),延迟时间(默认0)
  • transition-property:填写需要变化的css属性

  • transition-duration:完成过渡效果需要的时间单位(s或者ms)默认是 0

  • transition-timing-function:完成效果的速度曲线

    • linear匀速(等于 cubic-bezier(0,0,1,1)
      ease从慢到快再到慢(cubic-bezier(0.25,0.1,0.25,1)
      ease-in慢慢变快(等于 cubic-bezier(0.42,0,1,1)
      ease-out慢慢变慢(等于 cubic-bezier(0,0,0.58,1)
      ease-in-out先变快再到慢(等于 cubic-bezier(0.42,0,0.58,1)),渐显渐隐效果
      cubic-bezier(*n*,*n*,*n*,*n*)cubic-bezier 函数中定义自己的值。可能的值是 01 之间的数值
  • transition-delay: (规定过渡效果何时开始。默认是0

transform 转换

一般配合transition过度使用。transform不支持inline元素,使用前把它变成block

  • transform属性允许你旋转,缩放,倾斜或平移给定元素
  • transform-origin:转换元素的位置(围绕那个点进行转换),默认值为(x,y,z):(50%,50%,0)

使用方式:

  • transform: translate(120px, 50%):位移
  • transform: scale(2, 0.5):缩放
  • transform: rotate(0.5turn):旋转
  • transform: skew(30deg, 20deg):倾斜
animation 动画
  • animation-name:动画名称
  • animation-duration:动画持续时间
  • animation-timing-function:动画时间函数
  • animation-delay:动画延迟时间
  • animation-iteration-count:动画执行次数,可以设置为一个整数,也可以设置为infinite,意思是无限循环
  • animation-direction:动画执行方向。normalreversealternatealternate-reverse
  • animation-play-state:动画播放状态。runningpauser
  • animation-fill-mode:动画填充模式。forwardsbackwardsboth

CSS 动画只需要定义一些关键的帧,而其余的帧,浏览器会根据计时函数插值计算出来,

@keyframes定义关键帧,可以是from->to(等同于0%100%),也可以是从0%->100%之间任意个的分层设置

// 如果想要让元素旋转一圈,只需要定义开始和结束两帧即可:
@keyframes rotate{
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

//也可以使用百分比刻画生命周期
@keyframes rotate{
  0%{
    transform: rotate(0deg);
  }
  50%{
    transform: rotate(180deg);
  }
  100%{
    transform: rotate(360deg);
  }
}

定义好了关键帧后

animation: rotate 2s;
渐变
  • linear-gradient:线性渐变 background-image: linear-gradient(direction, color-stop1, color-stop2, ...);
  • radial-gradient:径向渐变 radial-gradient(0deg, red, green)
其他
  • Flex弹性布局
  • Grid栅格布局
  • 媒体查询 @media screen and (max-width: 960px) {}还有打印print
隐藏页面元素
  • opacity:0:本质上是将元素的透明度将为0,就看起来隐藏了,但是依然占据空间且可以交互
  • display:none: 这个是彻底隐藏了元素,元素从文档流中消失,既不占据空间也不交互,也不影响布局
  • visibility:hidden: 与上一个方法类似的效果,占据空间,但是不可以交互了
  • overflow:hidden: 这个只隐藏元素溢出的部分,但是占据空间且不可交互
  • z-index:-9999: 原理是将层级放到底部,这样就被覆盖了,看起来隐藏了
  • transform:scale(0,0): 平面变换,将元素缩放为0,但是依然占据空间,但不可交互
em/px/rem/vh/vw区别
相对长度单位emexchremvwvhvminvmax%
绝对长度单位cmmminpxptpc
  1. em相对于浏览器的默认字体尺寸(1em = 16px):为了简化 font-size 的换算,可以在css中的 body 选择器中声明font-size= 62.5%,这就使 em 值变为 16px*62.5% = 10px
  • em 的值并不是固定的

  • em 会继承父级元素的字体大小

  • em 是相对长度单位。

  • 任意浏览器的默认字体高都是 16px

  1. rem (动态值,根据屏幕展示大小会缩放)
  • 根据屏幕的分辨率动态设置html的文字大小,达到等比缩放的功能
  • 保证html最终算出来的字体大小,不能小于12px
  • 在不同的移动端显示不同的元素比例效果
  • 如果htmlfont-size:20px的时候,那么此时的1rem = 20px
  • rem做盒子的宽度,viewport缩放
// rem适配用这段代码动态计算html的font-size大小
(function(win) {
    var docEl = win.document.documentElement;
    var timer = '';

    function changeRem() {
      var width = docEl.getBoundingClientRect().width;
      if (width > 750) { // 750是设计稿大小
          width = 750;
      }
      var fontS = width / 10; // 把设备宽度十等分 1rem<=75px
      docEl.style.fontSize = fontS + "px";
    }
    win.addEventListener("resize", function() {
      clearTimeout(timer);
      timer = setTimeout(changeRem, 30);
    }, false);
    win.addEventListener("pageshow", function(e) {
      if (e.persisted) { //清除缓存
        clearTimeout(timer);
        timer = setTimeout(changeRem, 30);
      }
    }, false);
    changeRem();
})(window)
flex布局
  • flex-grow: 1 :该属性默认为 0 ,如果存在剩余空间,元素也不放大。设置为 1 代表会放大。
  • flex-shrink: 1 :该属性默认为 `1 ,如果空间不足,元素缩小。
  • flex-basis: 0% :该属性定义在分配多余空间之前,元素占据的主轴空间。默认值为 auto ,即项目本身大小。设置为 0% 之后,因为有 flex-growflex-shrink 的设置会自动放大或缩小。在做两栏布局时,如果右边的自适应元素 flex-basis 设为auto 的话,其本身大小将会是 0
CSS提高性能
  • 内联首屏关键CSS

    • 使渲染时间提前
    • 较大的css代码并不合适内联(初始拥塞窗口、没有缓存)
  • 异步加载CSS

    • 使用javascript将link标签插到head标签最后

    • 设置link标签media属性为noexist,浏览器会认为当前样式表不适用当前类型,会在不阻塞页面渲染的情况下再进行下载。加载完成后,将media的值设为screenall,从而让浏览器开始解析CSS

    • 通过rel属性将link元素标记为alternate可选样式表,也能实现浏览器异步加载。同样别忘了加载完成之后,将rel设回stylesheet

      • <link rel="alternate stylesheet" href="mystyles.css" onload="this.rel='stylesheet'"
        
  • **资源压缩 **webpackgulp/gruntrollup

  • 合理使用选择器

    • css匹配的规则是从右往左开始匹配
    • 如果嵌套的层级更多,页面中的元素更多,那么匹配所要花费的时间代价自然更高。最好不要三层以上。
    • 使用id选择器就没必要再进行嵌套
    • 通配符和属性选择器效率最低,避免使用
  • 减少使用昂贵的属性

在页面发生重绘的时候,昂贵属性如box-shadow/border-radius/filter/透明度/:nth-child等,会降低浏览器的渲染性能

  • 不要使用@import

    • @import会影响浏览器的并行下载,使得页面在加载时增加额外的延迟,增添了额外的往返耗时
    • 而且多个@import可能会导致下载顺序紊乱
  • 其它

    • 减少重排操作,以及减少不必要的重绘
    • css Sprite,合成所有icon图片,用宽高加上backgroud-position的背景图方式显现出我们要的icon图,减少了http请求
    • 把小的icon图片转成base64编码
    • CSS3动画或者过渡尽量使用transformopacity来实现动画,不要使用lefttop属性
画一个三角形
div {
  width:0px;
  height:0px;
  border-top:10px solid red; 
  border-right:10px solid transparent; 
  border-bottom:10px solid transparent; 
  border-left:10px solid transparent;
}
两栏布局:左边定宽,右边自适应方案

利用float + margin实现

<div class="box">
  <div class="box-left"></div>
  <div class="box-right"></div>
</div>

.box {
 height: 200px;
}

.box > div {
  height: 100%;
}

.box-left {
  width: 200px;
  float: left;
  background-color: blue;
}

.box-right {
  margin-left: 200px;
  background-color: red;
}

利用calc计算宽度

.box {
 height: 200px;
}

.box > div {
  height: 100%;
}

.box-left {
  width: 200px;
  float: left;
  background-color: blue;
}

.box-right {
  width: calc(100% - 200px);
  float: right;
  background-color: red;
}

利用float + overflow实现

.box {
 height: 200px;
}

.box > div {
  height: 100%;
}

.box-left {
  width: 200px;
  float: left;
  background-color: blue;
}

.box-right {
  overflow: hidden;
  background-color: red;
}

利用flex实现

.box {
  height: 200px;
  display: flex;
}

.box > div {
  height: 100%;
}

.box-left {
  width: 200px;
  background-color: blue;
}

.box-right {
  flex: 1; // 设置flex-grow属性为1,默认为0
  background-color: red;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2203856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 买卖股票的最佳时机

这段代码的目的是解决“买卖股票的最佳时机”这个问题&#xff0c;即在给定的股票价格数组中&#xff0c;找到一次买入和卖出所能获得的最大利润。 算法思想&#xff1a; 定义两个变量&#xff1a; minPrice: 这个变量用于记录迄今为止遇到的最小股票价格&#xff08;买入价格…

软件项目必须进行验收测试吗?专业验收测试报告如何获取?

软件项目验收测试是一种关键的质量保证活动&#xff0c;旨在确保软件产品符合用户需求和预期功能。它通常是在软件开发完成后&#xff0c;由客户或第三方测试机构进行的最终测试环节。验收测试的目的是确认软件的性能、功能、安全性和其他特性&#xff0c;以确保交付的产品能够…

【开源免费】基于SpringBoot+Vue.JS医院电子病历管理系统(JAVA毕业设计)

本文项目编号 T 008 &#xff0c;文末自助获取源码 \color{red}{T008&#xff0c;文末自助获取源码} T008&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 医…

5G NR UE初始接入信令流程

文章目录 5G NR UE初始接入信令流程 5G NR UE初始接入信令流程 用户设备向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息&#xff0c;如果 UE 被接纳&#xff0c;则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置&#xff0c;并将其传输到 gNB-CU…

RK3568启动配置

硬件环境 连上电脑&#xff0c;这时候默认是uboot启动linux&#xff0c;因此我们需要进入uboot的命令行界面&#xff0c;通过网络加载oneos运行。启动后按空格&#xff1a; Rockchip watchdog timeout: 15 sec Net: eth0: ethernetfe2a0000, eth1: ethernetfe010000 Hit key…

视频去水印的3款软件:助你轻松一键去水印

在视频创作的世界里&#xff0c;水印往往是一个让人头疼的问题。无论是从网络上下载的素材&#xff0c;还是其他平台分享的视频&#xff0c;都可能带有水印&#xff0c;影响整体美观。今天&#xff0c;就为大家介绍三款视频去水印软件&#xff0c;它们分别是影忆、Online Water…

数据结构-二叉树_堆

一. 树的概念 树在我们的日常生活中随处可见&#xff0c;人们将生活中的树转换成存放数据的树形结构&#xff0c;就成了数据结构中的“树”。 如上图所示&#xff0c;自然界中的树有树根&#xff0c;有树枝&#xff0c;有树叶&#xff0c;当我们将其转换成树形结构时&#xf…

ModBus Pull的详细安装教程

目录 一.导航 二 .安装 三.激活 四.使用 一.导航 modbus poll 和 modbus slave 是两种Modbus协议的软件工具 。 Modbus Poll&#xff1a;Modbus Poll 是一个客户端&#xff08;或主站&#xff09;软件&#xff0c;它允许用户与支持Modbus协议的设备进行通信。 Modbus Sla…

英国毕业论文问卷及采访设计思路解析

在大多数情况下&#xff0c;英国毕业论文都需要学生收集一手资料。而在一手资料的收集过程中&#xff0c;学生可以通过设计试验&#xff0c;观察&#xff0c;问卷和采访等方式从目标人群或者实验人群中收集到所需的一手数据。在本文中&#xff0c;我们将针对商科和教育学之类的…

Linux——echo-tail-重定向符

echo命令 类似printf 输出 反引号 重定向符 > 和 >> > 覆盖 >> 追加 tail命令 查看文件尾部内容&#xff0c;追踪文件最新更改 tail -num 从尾部往上读num行&#xff0c;默认10行 tail -f 持续跟踪

使用 Go 语言与 Redis 构建高效缓存与消息队列系统

什么是 Redis&#xff1f; Redis 是一个开源的内存数据库&#xff0c;支持多种数据结构&#xff0c;包括字符串、列表、集合、哈希和有序集合。由于 Redis 运行在内存中&#xff0c;读写速度极快&#xff0c;常被用于构建缓存系统、实时排行榜、会话存储和消息队列等高并发场景…

论文《OneLLM:One Framework to Align All Modalities with Language》

&#xff08;没有会员只有做100个节点&#xff0c;mindmaster金主爸爸可不可以给我一个会员啊啊啊啊呜呜呜~&#xff09; 欣赏论文的图和表&#xff1a; 表中作者将自己的模型那一行选择灰色作为背景&#xff0c;更加凸显自己的数据&#xff0c;另外对于最好的结果用加粗黑体…

threads_created增加过大?

set global thread_cache_size128; 在my.cnf文件中直接加上thread_cache_size128 原值为58 MySQL中的Threads线程相关指标解读 - SRE Work mysql性能优化(thread_created) - 八戒vs - 博客园 MySQL :: MySQL 8.4 Reference Manual :: 7.1.10 Server Status Variables

基于Vue3+axios+element-plus等技术开发的新闻发布管理系统

新闻发布管理系统是一个基于Vue3piniavue-routeraxioselement-plus等开发的系统&#xff0c;主要功能包括&#xff1a;登录模块、注册模块、新闻分类管理模块、新闻管理模块、个人中心模块&#xff08;包括基本资料、更换头像、重置密码功能&#xff09;等。 代码下载&#xf…

凡事预则立,不预则废

在交易的竞技场上&#xff0c;每位交易员都拥有自己的一套打法&#xff0c;这些独特的交易风格不仅塑造了他们的个人特点&#xff0c;更是他们成功的关键所在。今天采访的Eagle Trader交易员刘先生&#xff0c;就给我一种很稳妥的感觉&#xff0c;那么&#xff0c;刘先生的“稳…

Linux使用Docker部署Paperless-ngx结合内网穿透打造无纸化远程办公

文章目录 前言1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux系统本地部署Paperless-ngx开源文档管理系统&#xff0c;并结合cpolar内网穿透工具解决本地部署…

腾讯云License 相关

腾讯云视立方 License 是必须购买的吗&#xff1f; 若您下载的腾讯云视立方功能模块中&#xff0c;包含直播推流&#xff08;主播开播和主播观众连麦/主播跨房 PK&#xff09;、短视频&#xff08;视频录制编辑/视频上传发布&#xff09;、终端极速高清和腾讯特效功能模块&…

【springboot9734】基于springboot+vue的财务管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 随着信息技术和网络技术的飞速发展&#xff0c;人类已进…

2024 kali虚拟机安装教程,分两大步骤,图文讲解(2)

准备工作&#xff1a; 按照图文讲解&#xff08;1&#xff09;搭建好虚拟机&#xff0c;继续以下步骤 2024 kali虚拟机安装教程&#xff0c;分两大步骤&#xff0c;图文讲解&#xff08;1&#xff09;-CSDN博客 正式开始 1.开启&#xff0c;↑ ↓ 方向键&#xff0c;选择第一…

2024双十一有什么值得买?2024年双十一必买清单大全!

双十一购物狂欢节即将到来&#xff0c;这是一年中家电和数码产品打折的绝佳时机。然而&#xff0c;随着产品的多样化&#xff0c;选择一款合适的商品变得越来越困难。今天&#xff0c;我将为大家分享一些在双十一期间值得选购的高品质好物&#xff0c;让我们一起探索这些精选商…