高频CSS总结

embedded/2024/10/18 15:58:33/
高频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 来调整子元素的中心点到父元素的中心。该方法可以不定宽高

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

    css">.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 以子元素自己的一半宽高进行负值赋值。该方法必须定宽高

css">.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%之间任意个的分层设置

css">// 如果想要让元素旋转一圈,只需要定义开始和结束两帧即可:
@keyframes rotate{from {transform: rotate(0deg);}to {transform: rotate(360deg);}
}//也可以使用百分比刻画生命周期
@keyframes rotate{0%{transform: rotate(0deg);}50%{transform: rotate(180deg);}100%{transform: rotate(360deg);}
}

定义好了关键帧后

css">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<=75pxdocEl.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属性
画一个三角形
css">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计算宽度

css">.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实现

css">.box {height: 200px;
}.box > div {height: 100%;
}.box-left {width: 200px;float: left;background-color: blue;
}.box-right {overflow: hidden;background-color: red;
}

利用flex实现

css">.box {height: 200px;display: flex;
}.box > div {height: 100%;
}.box-left {width: 200px;background-color: blue;
}.box-right {flex: 1; // 设置flex-grow属性为1,默认为0background-color: red;
}

http://www.ppmy.cn/embedded/127735.html

相关文章

RTOS系统移植

一、完成系统移植 系统移植上官网寻找合适的系统包&#xff0c;下载后将文件移植入工程文件 二、创建任务句柄、内核对象句柄&#xff08;信号量&#xff0c;消息队列&#xff0c;事件标志组&#xff0c;软件定时器&#xff09;、声明全局变量、声明函数 三、创建主函数&#…

Kubernetes ETCD的恢复与备份

在 Kubernetes 中&#xff0c;ETCD 扮演着至关重要的角色&#xff1a; 1. 集群状态存储 2. 服务发现 3. 配置管理 4. 分布式锁和协调 5. 故障恢复 ETCD 存储了 Kubernetes 集群中所有的状态信息&#xff0c;包括节点、Pod、Service、ConfigMap、Secrets 等。ETCD 支持服务发现…

hive_locks字段

一、表结构 CREATE TABLE HIVE_LOCKS (HL_LOCK_EXT_ID bigint NOT NULL,HL_LOCK_INT_ID bigint NOT NULL,HL_TXNID bigint NOT NULL,HL_DB nvarchar(128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,HL_TABLE nvarchar(128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,H…

Scrapy网络爬虫基础

使用Spider提取数据 Scarpy网络爬虫编程的核心就是爬虫Spider组件&#xff0c;它其实是一个继承与Spider的类&#xff0c;主要功能设计封装一个发送给网站服务器的HTTP请求&#xff0c;解析网站返回的网页及提取数据 执行步骤 1、Spider生成初始页面请求&#xff08;封装于R…

力扣 237. 删除链表中的节点【狸猫换太子】

题目 解题 该题中链表节点的值都是唯一的&#xff0c;且只给出待删除的节点 node&#xff0c;而没有给出 head&#xff0c;显然是不可以遍历链表找到相应值来进行删除节点的。注意到题目只要求给定节点的值不在链表中&#xff0c;且链表节点个数减少一个即可&#xff0c;并非严…

VUE 开发——Vue学习(三)—— 智慧商城项目

目录 解释各个模块 api接口模块&#xff1a;发送ajax请求的接口模块utils工具模块&#xff1a;自己封装的一些工具方法模块components组件模块&#xff1a;全局通用的组件router路由模块&#xff1a;封装要所有路由views&#xff1a;各个页面assets&#xff1a;各种资源 van…

Java SE vs Java EE 与 JVM vs JDK vs JRE

Java SE&#xff08;Java Platform&#xff0c;Standard Edition&#xff09;: Java 平台标准版&#xff0c;Java 编程语言的基础&#xff0c;它包含了支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件。Java SE 可以用于构建桌面应用程序或简单的服务器应用程序。…

【Redis安全基线】- 在生产环境中需要注意的安全事项

Redis是一个高性能的键值存储数据库&#xff0c;但在实际使用中&#xff0c;如果没有适当的安全措施&#xff0c;可能会面临严重的安全风险。本文将介绍几种加强Redis安全性的最佳实践&#xff0c;包括防止弱口令、限制危险命令、修改默认端口等。 1. Redis弱口令 场景说明&a…