那些实用且易忘的CSS小技巧
去年跟着 B 站 Pink 老师学过 CSS 基本语法,但平时美化博客时还是会遇到一些 CSS 相关问题,所以再此记录下。
🔥 让 a 标签铺满整个 div
有时候希望点击 div 同时跳转到对应链接,奈何 a 的大小取决于文本大小,但可使用以下方法来铺满整个父盒子,前提是 div 里只有 a 标签一个内容。
1 | a { |
文字颜色渐变
background: -webkit-linear-gradient(...)
为文本元素提供渐变背景。
webkit-text-fill-color: transparent
使用透明颜色填充文本。
webkit-background-clip: text
用文本剪辑背景,用渐变背景作为颜色填充文本。
1 | .custom { |
🔥 毛玻璃特效
1 | background: #ffffffcc; |
saturate()
是增强颜色鲜艳度,可选
input 输入框字体样式
placeholder
1 | input::-webkit-input-placeholder { |
focus 聚焦
1 | input:focus { |
取消 input 的边框
1 | border: none; |
滚动条
scroll-track —— 滚动条轨道
scrollbar-thumb —— 滚动条滑块
scrollbar-button —— 滚动条按钮
scrollbar-corner —— 滚动角
1 | /*css主要部分的样式*/ |
隐藏滚动条
1 | .element { |
自定义滚动条样式(自用)
1 | .element { |
🔥 文字超出隐藏并显示省略号
white-space 👉 处理元素空白,常用值有:nowrap 不换行,其他还有 pre-line、pre-wrap 等
word-break 👉 在合适的点断行。常用值有 break-all 可以在单词内换行,keep-all 只能在半角空格或连字符处换行。我们需要超出盒子部分就换行,所以用 break-all。
box-orient 👉 子元素如何排列。值有 vertical 和 horizontal,分别是垂直排列和水平排列。
line-clamp 👉 控制文本行数。
单行(一定要有宽度)
1 | width: 200px; |
多行
1 | word-break: break-all; |
控制 div 内的元素自动换行
1 | word-wrap: break-word; // 允许长单词换行到下一行 |
纯 CSS 画三角形
1 | <Custom > { |
绝对定位元素居中(水平和垂直方向)
1 | <Cuttom > { |
表格边框合并
1 | table, |
🔥 颜色透明度 16 进制对照表
比如:
#FFFFFFE6
,效果等同于rgba(255, 255, 255, 0.9)
百分比 | 十六进制 |
---|---|
100% | FF |
90% | E6 |
80% | CC |
70% | B3 |
60% | 99 |
50% | 80 |
40% | 66 |
30% | 4D |
20% | 33 |
10% | 1A |
img 图片填充方式
当图片比例不固定时,想要让图片自适应,一般都会用 background-size:cover/contain,但是这个只适用于背景图。这里主要介绍 img 的。
img 有个属性 object-fit
属性 | 功能 |
---|---|
fill | 默认值。内容拉伸填满整个 content box, 不保证保持原有的比例 |
contain | 保持原有尺寸比例。宽度和高度中短的那条边跟容器大小一致,长的那条等比缩放,盒子可能会有留白 |
cover | 保持原有尺寸比例。宽度和高度中长的那条边跟容器大小一致,短的那条等比缩放。图片可能会有部分区域不可见 |
none | 保持原有尺寸比例。同时保持替换内容原始尺寸大小 |
scale-down | 保持原有尺寸比例,如果容器尺寸大于图片内容尺寸,保持图片的原有尺寸,不会放大失真;容器尺寸小于图片内容尺寸,用法跟 contain 一样 |
注意:加上图片盒子的宽高才能实现
object-fit
效果。
背景图片填充方式
参考文章:聊聊 CSS 背景图片的几种填充类型
修改选中文本颜色与背景色
使用 css3 ::selection
属性,该属性用于匹配元素中被用户选中或处于高亮状态的部分,并且支持修改匹配元素的color
, background
, cursor
,和outline
属性
ul, ol 标签去掉前面的点
1 | ul, ol { |
li 圆点放进文本内且其它行缩进至对齐第一行
效果如下:
第一行
第二行
方法1(代码简单,效果一般):
1 | ul, ol { |
方法2(代码复杂,效果完美):
1 | ul, |
俩方法都要根据实际 UI 情况自行调整才会达到不错显示效果。
将页脚 Footer 固定在网页底部
可参考以下代码
1 | html, |
子 div 使用 float 后如何撑开父 div
将父 div 也设置成浮动效果
处理 div 使用 padding 时宽高被撑开的问题
有时候设置宽为固定值,结果发现加了 padding 后宽被撑开了
1 | -moz-box-sizing: border-box; /*Firefox3.5+*/ |
border-radius 完整用法
我们在平时看 border-radius 属性会看到它的语法如下所示:
1 | border-radius: 1-4 length|% / 1-4 length|%; |
很多人可能不知道这是什么意思,其实这是border-radius的完整写法,我们平时写的就是像border-radius:20px;
这种,其实完整的写法应该是:border-radius : 20px 20px 20px 20px / 20px 20px 20px 20px;
,其中前面四个 20px 表示水平半径,后面的四个值则表示垂直半径,我们就是通过设置水平半径和垂直半径来绘制椭圆或者圆形,也可以绘制一些其他有弧度的图形。
🔥 px 和 rem转换关系
浏览器默认是 16px,也就是 1rem,那么每 4px 等于 0.25rem,常用数值如下
px | rem |
---|---|
14 | 0.875 |
16 | 1 |
18 | 1.125 |
20 | 1.25 |
22 | 1.375 |
24 | 1.5 |
26 | 1.625 |
28 | 1.75 |
30 | 1.875 |
32 | 2 |
svg与父盒子无法重合的解决办法
我经常会将 svg 放进空的 div 里,但总会发现下面有个几px的小缝隙
给img或者svg加上vertical-align: top;
、或和height: fit-content;
CSS代码即可,有时候是给图片父盒子加,这个看实际情况,目前我没细研究。
Flex 布局中想让某元素贴尾摆放
原理:将最后一个元素的外边距设置为自动,从而将其推到末尾位置。
1 | .parent { |
子绝父相 / fixed 时,子元素想居中
使用 transform(子绝父相 & fixed)
1 | .parent { |
使用 flex 布局(fixed)
1 | .parent { |
🔥 将 fixed 且 transform 居中的元素的缩放基准设为中点
终于在与ChatGPT一番盘问下得到答案。我经常需要给通过 transform 居中的元素加缩放动画,但奈何总是从右下角开始缩放,我有强迫症受不了。
1 | div { |
🔥 元素进出动画
我只知道元素显示的时候加一个 animation 就可以实现入场动画,但不知道退场如何加动画,有审美强迫症的我每次看到“只进不出”的动画我就心里发痒,但我终于在某一天开窍了,谢谢 ChatGPT。
1 | div { |
JS 这部分也很重要。
思路是设置一个 delay,让动画潇洒运行完再删除元素。CSS 动画则是通过类的有无显示进出动画。
下方 JS代码 参考即可
1 | const hidePreview = () => { |
字体大小随着框架宽度变化
背景:有时候在设计响应式布局时要让字体大小动态变化,一般是通过 @media,其实你也可以考虑直接给
font-size
用 vw单位 赋值。
1 | h1 { |
加遮罩后仍能与文本交互和保持默认光标
1 | .cv__template-mini, |
☕欲知后事如何,
且听下回分解🍵
参考文章
- 那些你总是要用却又死活记不住的 css 属性
- css 文字颜色渐变的三种实现方式
- 颜色透明度 16 进制对照表
- css 图片填充的几种方式
- CSS 修改选中文本颜色与背景色
- 子 Div 使用 Float 后如何撑开父 Div
- border-radius 属性怎么使用-css 教程