前端老鸟都在用的CSS3裁剪神技:rect函数从入门到放弃再到真香实

前端老鸟都在用的CSS3裁剪神技:rect函数从入门到放弃再到真香实
前端老鸟都在用的CSS3裁剪神技:rect函数从入门到放弃再到真香实战
说实话,我第一次看到 clip: rect() 这个属性的时候,内心是拒绝的。那是2018年,我刚入行不久,mentor扔给我一份五年前的项目代码,里面密密麻麻全是这玩意儿。我当时就懵了——这啥啊?都什么年代了还在用这么土的写法?CSS3不是有 clip-path 了吗,多炫酷,多现代,多… 嗯,多不支持IE。
但后来的故事你们都知道了,真香定律虽迟但到。今天咱们就聊聊这个被时代"抛弃"的老家伙,为啥到现在还能在特定场景下救你一命。
都2026年了,谁还在用这"老古董"?
先别急着划走。我知道你想说什么——“现在都2026年了,Flexbox都玩出花了,Grid布局都成标配了,谁还惦记着一个只能切矩形的破属性?”
确实,如果你打开MDN或者Can I Use,clip 属性明晃晃地写着 Deprecated(已废弃)。Mozilla官方都推荐你用 clip-path 替代了。但问题来了:你猜这个世界上还有多少台电脑跑着IE11?又有多少企业的内部系统还在用十年前的前端架构?
我有个朋友在某银行做外包,去年接了个项目,要求兼容IE9。是的,你没听错,2025年,IE9。客户说他们的ATM机系统还是XP内核,换不了。这时候你跟他讲 clip-path?他能把键盘拍你脸上。这种时候,clip: rect() 就是唯一的救命稻草。
而且说实话,有些场景下这玩意儿真的挺好用的。不是那种"勉强能用"的好用,是"恰到好处"的好用。后面我会细说。
这货到底是个啥?跟clip-path那帮新贵有啥本质区别?
咱们先把基础打牢。clip: rect() 是CSS2.1就有的属性,历史悠久到可以追溯到上个世纪。它的作用简单粗暴:给一个绝对定位的元素画个矩形遮罩,框外的内容直接切掉,眼不见为净。
语法长这样:
.clipped-element {
position: absolute; /* 必须!不写这个等于白忙活 */
clip: rect(top, right, bottom, left);
}
注意这四个值的顺序,必须是上、右、下、左,跟咱们写 margin 那种顺时针不一样(虽然 margin 也是上右下左,但很多人记成顺时针会懵)。而且这里的 right 和 bottom 不是距离右边和底边的距离,而是相对于左上角的坐标偏移量。
啥意思呢?举个例子:
/* 假设元素是100x100像素 */
.avatar {
position: absolute;
width: 100px;
height: 100px;
clip: rect(10px, 90px, 90px, 10px);
}
这段代码切出来的是一个 80x80 像素的矩形,起点在 (10, 10),终点在 (90, 90)。很多人误以为 right: 90px 是"距离右边90px",结果写出来的裁剪框完全不对,调试半天找不到原因。
相比之下,clip-path 就现代多了:
.modern-avatar {
/* 切个圆形 */
clip-path: circle(50% at 50% 50%);
/* 或者切个多边形 */
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
/* 甚至能切个SVG路径 */
clip-path: url(#myClip);
}
功能上 clip-path 完胜,圆角、椭圆、贝塞尔曲线,想切啥切啥。而且支持动画过渡,hover一下就能从圆形变星形,丝滑得很。
但 clip-path 的兼容性… 这么说吧,IE全系不支持,连Edge都要到版本79(基于Chromium)才完全支持。如果你需要照顾那些还在用Win7的企业用户,clip: rect() 就是你最后的尊严。
手把手教学:别光看文档,全是坑
好了,进入实战环节。我踩过的坑比你吃的盐还多(虽然我现在吃得清淡),今天全倒出来。
坑一:定位不对,一切白费
这是新手最容易犯的错。clip 属性只对绝对定位元素生效,relative、fixed、sticky 都不行,更别说 static 了。而且注意,是 absolute,不是 relative!很多人以为"相对定位也行吧",结果写了半天不生效,怀疑人生。
/* 错误示范 */
.wrong-way {
position: relative;
clip: rect(10px, 50px, 50px, 10px); /* 完全没效果,浏览器直接无视 */
}
/* 正确姿势 */
.right-way {
position: absolute;
clip: rect(10px, 50px, 50px, 10px); /* 完美生效 */
}
为啥必须absolute?因为 clip 的设计初衷就是针对"脱离文档流"的元素。早期Web有很多复杂的图文混排需求,需要精确控制某个浮动元素的显示区域。这个历史包袱一直背到现在。
坑二:auto值的理解
四个值都可以写 auto,表示"那一边不裁剪"。比如你想只裁剪顶部10像素,其他三边保持原样:
.partial-clip {
position: absolute;
clip: rect(10px, auto, auto, auto); /* 只切掉顶部10px */
}
看起来很方便对吧?但这里有个大坑:一旦用了auto,那一侧的计算会变得很诡异。因为 auto 的实际值取决于元素的宽度和高度,而如果元素是自适应的(比如没写死width/height),结果可能跟你预期的不一样。
我建议新手阶段尽量别用auto,四个值都写死,等玩熟了再尝试骚操作。
坑三:right和bottom的坐标陷阱
再强调一遍:rect(10px, 50px, 50px, 10px) 里的 50px 是坐标,不是距离!
很多人(包括当年的我)会理解成:
- top: 距离顶部10px ✓
- right: 距离右边50px ✗(实际是距离左边50px)
- bottom: 距离底部50px ✗(实际是距离顶部50px)
- left: 距离左边10px ✓
正确的理解是画个坐标系,左上角是原点(0,0),right和bottom是终点的x、y坐标。
/* 如果你想切一个从(10,10)开始,宽高都是40px的矩形 */
.correct-rect {
position: absolute;
width: 100px;
height: 100px;
/* 起点(10,10),终点(50,50),所以是 rect(10, 50, 50, 10) */
clip: rect(10px, 50px, 50px, 10px);
}
完整代码示例:图片局部放大预览
来个实用的例子。假设你要做个电商网站的图片放大镜效果,但老板说不许用第三方库,自己写。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<style>
.zoom-container {
position: relative;
width: 400px;
height: 400px;
border: 2px solid #ccc;
overflow: hidden;
}
/* 原图 */
.original-img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* 放大镜镜片(用clip实现局部显示) */
.magnifier-lens {
position: absolute; /* 必须absolute! */
top: 0;
left: 0;
width: 200px; /* 镜片大小 */
height: 200px;
border: 2px solid #fff;
box-shadow: 0 0 10px rgba(0,0,0,0.5);
/* 初始裁剪:显示左上角100x100区域 */
clip: rect(0px, 100px, 100px, 0px);
overflow: hidden;
display: none; /* 默认隐藏,鼠标移入显示 */
}
/* 镜片里的放大图 */
.magnifier-lens img {
position: absolute;
width: 800px; /* 原图的2倍大 */
height: 800px;
/* 图片定位通过JS动态计算 */
}
</style>
</head>
<body>
<div class="zoom-container" id="zoomContainer">
<img src="product.jpg" alt="商品图" class="original-img" id="originalImg">
<div class="magnifier-lens" id="lens">
<img src="product.jpg" alt="放大图" id="zoomedImg">
</div>
</div>
<script>
const container = document.getElementById('zoomContainer');
const lens = document.getElementById('lens');
const zoomedImg = document.getElementById('zoomedImg');
const originalImg = document.getElementById('originalImg');
// 配置参数
const ZOOM_LEVEL = 2; // 放大倍数
const LENS_SIZE = 200; // 镜片容器大小
const CLIP_SIZE = 100; // 实际显示区域大小(裁剪框)
container.addEventListener('mousemove', function(e) {
// 显示镜片
lens.style.display = 'block';
// 计算鼠标在容器内的相对位置
const rect = container.getBoundingClientRect();
const x = e.clientX - rect.left;
const y = e.clientY - rect.top;
// 边界检查,别跑出图片外
const maxX = rect.width - CLIP_SIZE;
const maxY = rect.height - CLIP_SIZE;
const clampedX = Math.max(0, Math.min(x - CLIP_SIZE/2, maxX));
const clampedY = Math.max(0, Math.min(y - CLIP_SIZE/2, maxY));
// 移动镜片容器(用transform性能更好)
lens.style.transform = `translate(${clampedX}px, ${clampedY}px)`;
// 关键:动态更新clip: rect(),实现局部显示效果
// 我们始终显示镜片内的一个固定区域,通过移动镜片容器来改变位置
const clipTop = 0;
const clipRight = CLIP_SIZE; // 距离左边100px
const clipBottom = CLIP_SIZE; // 距离顶部100px
const clipLeft = 0;
lens.style.clip = `rect(${clipTop}px, ${clipRight}px, ${clipBottom}px, ${clipLeft}px)`;
// 同步移动放大图(反向移动,实现放大效果)
zoomedImg.style.left = -(clampedX * ZOOM_LEVEL) + 'px';
zoomedImg.style.top = -(clampedY * ZOOM_LEVEL) + 'px';
});
container.addEventListener('mouseleave', function() {
lens.style.display = 'none';
});
</script>
</body>
</html>
这段代码的核心思路是:用 clip: rect() 把镜片容器裁剪成一个小窗口,只显示中间100x100的区域,然后通过移动整个容器来改变显示的位置。这比直接操作 width/height 或者 overflow: hidden 要灵活得多,特别是当你需要镜片本身有边框、阴影等视觉效果时,裁剪能保证这些装饰不被切掉。
优缺点大实话:别吹也别黑
咱们客观评价一下这技术。
优点:
- 兼容性无敌:IE6都支持,是的,IE6。对于那些还要照顾老爷机的项目,这是为数不多的选择。
- 性能还行:浏览器底层就是简单的矩形遮罩计算,不涉及复杂的路径运算,比
clip-path的某些高级特性要轻量。 - 写法直观:虽然语法有点反人类,但一旦理解了坐标系,写起来比
clip-path的字符串语法要简单(特别是动态计算的时候)。
缺点:
- 功能单一:只能切矩形,圆角?多边形?想都别想。做个圆形头像裁剪都得靠
border-radius配合,或者直接放弃治疗用clip-path。 - 不支持过渡动画:这是最让人抓狂的。你想做个裁剪区域从小变大的动画?
transition: clip 0.3s完全没反应!因为clip不是可动画属性(在CSS规范里,rect值不支持插值)。 - 语法确实反人类:前面说了,right和bottom是坐标值,这个设计违背直觉,新手入门曲线陡峭。
- 必须absolute定位:这个限制有时候很致命,如果你的布局是基于Flexbox或Grid的,强行改成absolute可能会打乱整个布局结构。
实战场景:别为了用而用,但该用的时候别怂
说了这么多,到底啥时候该掏这把"老枪"?我列几个真实场景。
场景一:卷帘门式图片切换
就是那种老式网站常见的过渡效果,一张图从下往上或者从左往右慢慢展开。用 clip 配合JS定时器实现,虽然有点土,但在不支持CSS动画的老系统里很管用。
<!DOCTYPE html>
<html>
<head>
<style>
.shutter-container {
position: relative;
width: 600px;
height: 400px;
overflow: hidden;
}
.slide {
position: absolute; /* 必须absolute */
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
transition: opacity 0.5s;
}
.slide.active {
opacity: 1;
/* 初始状态:完全裁剪掉(从底部开始显示) */
clip: rect(400px, 600px, 400px, 0px);
}
</style>
</head>
<body>
<div class="shutter-container" id="slider">
<img src="img1.jpg" class="slide active" data-index="0">
<img src="img2.jpg" class="slide" data-index="1">
<img src="img3.jpg" class="slide" data-index="2">
</div>
<script>
const slides = document.querySelectorAll('.slide');
const containerHeight = 400;
const containerWidth = 600;
let currentIndex = 0;
function shutterTransition(nextIndex) {
const currentSlide = slides[currentIndex];
const nextSlide = slides[nextIndex];
// 准备下一张图:先完全裁剪,再显示
nextSlide.style.clip = `rect(${containerHeight}px, ${containerWidth}px, ${containerHeight}px, 0px)`;
nextSlide.classList.add('active');
// 当前图:保持完整显示
currentSlide.style.clip = `rect(0px, ${containerWidth}px, ${containerHeight}px, 0px)`;
// 动画:从下往上展开下一张图(模拟卷帘门)
let progress = 0;
const duration = 1000; // 1秒
const startTime = performance.now();
function animate(now) {
const elapsed = now - startTime;
progress = Math.min(elapsed / duration, 1);
// 缓动函数,让动画更自然
const easeProgress = 1 - Math.pow(1 - progress, 3);
// 计算当前裁剪位置:从底部往顶部移动
const currentTop = containerHeight * (1 - easeProgress);
// 关键:动态更新rect值
// rect(top, right, bottom, left)
nextSlide.style.clip = `rect(${currentTop}px, ${containerWidth}px, ${containerHeight}px, 0px)`;
if (progress < 1) {
requestAnimationFrame(animate);
} else {
// 动画结束,清理当前图
currentSlide.classList.remove('active');
currentIndex = nextIndex;
}
}
requestAnimationFrame(animate);
}
// 每3秒切换一次
setInterval(() => {
const nextIndex = (currentIndex + 1) % slides.length;
shutterTransition(nextIndex);
}, 3000);
</script>
</body>
</html>
这个例子里,我们用 clip: rect() 的 top 值从 400px(完全隐藏)渐变到 0px(完全显示),实现了从下往上的卷帘效果。虽然用 clip-path: inset() 也能做,而且支持CSS过渡,但在需要兼容老浏览器的场景下,这种JS驱动的方式更可靠。
场景二:老旧后台系统的进度条
有些企业后台系统,UI框架还是jQuery EasyUI时代的产物,你很难引入现代CSS特性。但老板突然说要加个进度条,显示文件上传进度。
<!DOCTYPE html>
<html>
<head>
<style>
.legacy-progress {
position: relative;
width: 300px;
height: 20px;
background: #e0e0e0;
border: 1px solid #999;
}
/* 进度填充层 */
.progress-fill {
position: absolute; /* 必须absolute */
top: 0;
left: 0;
width: 100%; /* 实际宽度始终是100%,通过clip控制显示多少 */
height: 100%;
background: linear-gradient(to bottom, #4CAF50, #45a049);
/* 初始状态:完全裁剪掉,显示0% */
clip: rect(0px, 0px, 20px, 0px);
}
/* 条纹效果,让进度条看起来在动 */
.progress-fill::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-image: linear-gradient(
45deg,
rgba(255, 255, 255, .15) 25%,
transparent 25%,
transparent 50%,
rgba(255, 255, 255, .15) 50%,
rgba(255, 255, 255, .15) 75%,
transparent 75%,
transparent
);
background-size: 20px 20px;
}
</style>
</head>
<body>
<div class="legacy-progress">
<div class="progress-fill" id="progressFill"></div>
</div>
<p>上传进度: <span id="progressText">0</span>%</p>
<script>
const progressFill = document.getElementById('progressFill');
const progressText = document.getElementById('progressText');
const containerWidth = 300;
const containerHeight = 20;
function updateProgress(percentage) {
// 计算应该显示的宽度
const visibleWidth = (percentage / 100) * containerWidth;
// 更新clip: rect(top, right, bottom, left)
// right值就是visibleWidth,控制显示多少
progressFill.style.clip = `rect(0px, ${visibleWidth}px, ${containerHeight}px, 0px)`;
progressText.textContent = percentage;
}
// 模拟上传进度
let progress = 0;
const interval = setInterval(() => {
progress += Math.random() * 5;
if (progress >= 100) {
progress = 100;
clearInterval(interval);
}
updateProgress(Math.floor(progress));
}, 200);
</script>
</body>
</html>
这里的关键技巧是:进度条的实际宽度始终是100%,我们通过 clip: rect() 的 right 值来控制"显示多少"。这比直接修改 width 属性性能更好(避免重排),而且在某些老旧的IE版本里,clip 的渲染比 width 动画更流畅。
场景三:头像裁剪预览
用户上传头像后,需要在前端实时预览裁剪效果。虽然现代方案都用Canvas了,但如果项目里连Canvas都不让用(别笑,真有这种项目),clip: rect() 可以救急。
<!DOCTYPE html>
<html>
<head>
<style>
.crop-wrapper {
position: relative;
display: inline-block;
}
/* 原图,变暗表示未选中区域 */
.crop-source {
display: block;
max-width: 400px;
opacity: 0.5;
}
/* 裁剪预览层,完全覆盖在原图上 */
.crop-preview {
position: absolute; /* 必须absolute */
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
/* 初始裁剪区域,后面用JS动态改 */
clip: rect(50px, 250px, 250px, 50px);
}
/* 预览层里的图,保持原亮度 */
.crop-preview img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 1;
/* 不继承父元素的opacity */
}
/* 裁剪框的边框提示 */
.crop-frame {
position: absolute;
border: 2px dashed #fff;
box-shadow: 0 0 0 9999px rgba(0,0,0,0.5); /* 外部遮罩 */
pointer-events: none; /* 让鼠标事件穿透 */
}
</style>
</head>
<body>
<div class="crop-wrapper" id="cropWrapper">
<img src="avatar.jpg" class="crop-source" id="sourceImg">
<div class="crop-preview" id="cropPreview">
<img src="avatar.jpg" id="previewImg">
</div>
<!-- 可视化的裁剪框 -->
<div class="crop-frame" id="cropFrame"></div>
</div>
<script>
const wrapper = document.getElementById('cropWrapper');
const preview = document.getElementById('cropPreview');
const frame = document.getElementById('cropFrame');
// 裁剪参数
let cropArea = {
top: 50,
left: 50,
size: 200 // 正方形裁剪
};
function updateCrop() {
const { top, left, size } = cropArea;
const right = left + size;
const bottom = top + size;
// 更新clip: rect()
preview.style.clip = `rect(${top}px, ${right}px, ${bottom}px, ${left}px)`;
// 同步更新可视化边框位置
frame.style.left = left + 'px';
frame.style.top = top + 'px';
frame.style.width = size + 'px';
frame.style.height = size + 'px';
}
// 支持拖拽调整裁剪区域
let isDragging = false;
let startX, startY, startLeft, startTop;
frame.addEventListener('mousedown', (e) => {
isDragging = true;
startX = e.clientX;
startY = e.clientY;
startLeft = cropArea.left;
startTop = cropArea.top;
e.preventDefault(); // 防止选中文本
});
document.addEventListener('mousemove', (e) => {
if (!isDragging) return;
const dx = e.clientX - startX;
const dy = e.clientY - startY;
// 计算新位置,加上边界检查
const imgRect = wrapper.getBoundingClientRect();
const maxLeft = imgRect.width - cropArea.size;
const maxTop = imgRect.height - cropArea.size;
cropArea.left = Math.max(0, Math.min(startLeft + dx, maxLeft));
cropArea.top = Math.max(0, Math.min(startTop + dy, maxTop));
updateCrop();
});
document.addEventListener('mouseup', () => {
isDragging = false;
});
// 初始化
updateCrop();
</script>
</body>
</html>
这个方案巧妙之处在于:用两层图片,底层变暗表示未选中,上层通过 clip: rect() 只显示选中区域且保持原亮度,再加上一个半透明的边框层作为视觉提示。用户体验上跟现代裁剪工具差不多,但兼容性拉满,IE8都能跑(如果不考虑拖拽的话)。
出问题了咋整?调试指南
写着写着发现不对劲?别慌,按这个路子查:
第一反应:检查position
90%的问题都是忘了写 position: absolute。而且注意,是写在被裁剪的元素上,不是父元素。很多人写在父容器上,然后疑惑为啥不生效。
第二反应:检查值是不是写反了
特别是 right 和 bottom,确认你理解的是"坐标"而不是"距离"。如果你写的是 rect(10px, 50px, 50px, 10px),确保你想切的是一个从(10,10)到(50,50)的矩形,而不是"距离右边50px、距离底部50px"。
第三反应:看看computed样式
打开浏览器开发者工具,检查元素的Computed Styles,看看 clip 属性的实际计算值是什么。有时候会被其他CSS规则覆盖,或者继承了一些奇怪的值。
第四反应:单位!单位!
别裸写数字!虽然现代浏览器很智能,能推断出你想用px,但有些老浏览器(对,就是IE那帮亲戚)不认无单位的值。 Always write 10px, never just 10。
第五反应:尺寸计算错误
如果裁剪区域显示不出来,或者只显示一条线,很可能是你的坐标算错了。比如元素实际只有100px宽,你写了 right: 200px,那当然啥也看不见。
终极方案:降级处理
如果实在搞不定,或者发现某些浏览器有bug(Safari在某些版本里对clip的渲染有问题),准备个降级方案:
.safe-clip {
position: absolute;
/* 现代浏览器用clip-path */
clip-path: inset(10px 50px 50px 10px);
/* 老浏览器用clip */
clip: rect(10px, 50px, 50px, 10px);
}
CSS的层叠特性会自动处理:支持 clip-path 的浏览器会用它(因为它写在后面),不支持的会回退到 clip。
骚操作:让同事直呼内行
虽然这技术老了点,但用好了还是能秀一波的。
骚操作一:JS模拟动画
前面说了 clip 不支持CSS过渡,但我们可以用JS的 requestAnimationFrame 手动插值。虽然麻烦点,但能做到60fps的流畅动画。
// 从rect(0, 0, 100, 0)动画到rect(0, 100, 100, 0)
function animateClip(element, startRect, endRect, duration) {
const startTime = performance.now();
function step(now) {
const elapsed = now - startTime;
const progress = Math.min(elapsed / duration, 1);
// 缓动
const ease = 1 - Math.pow(1 - progress, 3);
// 插值计算
const currentRect = startRect.map((start, i) => {
const end = endRect[i];
return start + (end - start) * ease;
});
element.style.clip = `rect(${currentRect[0]}px, ${currentRect[1]}px, ${currentRect[2]}px, ${currentRect[3]}px)`;
if (progress < 1) {
requestAnimationFrame(step);
}
}
requestAnimationFrame(step);
}
// 使用
const el = document.querySelector('.clipped');
animateClip(el, [0, 0, 100, 0], [0, 100, 100, 0], 1000);
骚操作二:配合transform玩花样
因为 clip 是在元素的本地坐标系里工作的,所以你可以先裁剪,再对整个元素做transform。
.fancy-effect {
position: absolute;
clip: rect(10px, 90px, 90px, 10px);
/* 先裁剪出一个80x80的区域 */
transform: rotate(45deg) scale(1.5);
/* 再旋转45度并放大1.5倍 */
/* 最终效果:旋转的菱形裁剪区域 */
}
这种组合能做出一些奇怪的视觉效果,虽然实际业务中很少用,但在做创意页面或者艺术网站时可能会派上用场。
骚操作三:移动端视网膜屏适配
在高清屏上,如果你用JS计算clip值,记得考虑 devicePixelRatio:
const dpr = window.devicePixelRatio || 1;
const clipSize = 100 * dpr; // 实际像素值要乘以DPR
element.style.clip = `rect(0px, ${clipSize}px, ${clipSize}px, 0px)`;
不过说实话,现代移动端浏览器都支持 clip-path 了,除非你在维护一个十年前的移动端H5页面,否则没必要这么折腾。
最后唠两句
写到这,估计你也看出来了,我对 clip: rect() 的感情挺复杂的。一方面,它确实老了,功能弱,语法别扭,被时代淘汰不冤;但另一方面,在某些特定场景下,它又是唯一能解决问题的工具。
技术这东西,没有高低贵贱,只有适不适合。你拿着 clip-path 去跟IE用户讲现代CSS,就像拿着iPhone 15去跟功能机用户讲iOS生态——不是技术不好,是场景不对。
懂点老技术没坏处。万一哪天老板让你维护个十年前的老系统,或者接了个要兼容ATM机的奇葩需求,你就能从容地掏出 clip: rect(),在同事惊讶的目光中淡定地解决问题。那一刻,你就是救世主。
下次在代码里看到 clip: rect() 别直接划走,说不定哪天它就帮你解决了大麻烦。毕竟,前端这行,活到老学到老,谁知道明天会碰到什么上古神兽呢?
(全文完,代码示例管够,坑也踩完了,剩下的就看你自己了。)
欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
推荐:DTcode7的博客首页。
一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身农奴把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟!
| 专栏系列(点击解锁) | 学习路线(点击解锁) | 知识定位 |
|---|---|---|
| 《微信小程序相关博客》 | 持续更新中~ | 结合微信官方原生框架、uniapp等小程序框架,记录请求、封装、tabbar、UI组件的学习记录和使用技巧等 |
| 《AIGC相关博客》 | 持续更新中~ | AIGC、AI生产力工具的介绍,例如stable diffusion这种的AI绘画工具安装、使用、技巧等总结 |
| 《HTML网站开发相关》 | 《前端基础入门三大核心之html相关博客》 | 前端基础入门三大核心之html板块的内容,入坑前端或者辅助学习的必看知识 |
| 《前端基础入门三大核心之JS相关博客》 | 前端JS是JavaScript语言在网页开发中的应用,负责实现交互效果和动态内容。它与HTML和CSS并称前端三剑客,共同构建用户界面。 通过操作DOM元素、响应事件、发起网络请求等,JS使页面能够响应用户行为,实现数据动态展示和页面流畅跳转,是现代Web开发的核心 | |
| 《前端基础入门三大核心之CSS相关博客》 | 介绍前端开发中遇到的CSS疑问和各种奇妙的CSS语法,同时收集精美的CSS效果代码,用来丰富你的web网页 | |
| 《canvas绘图相关博客》 | Canvas是HTML5中用于绘制图形的元素,通过JavaScript及其提供的绘图API,开发者可以在网页上绘制出各种复杂的图形、动画和图像效果。Canvas提供了高度的灵活性和控制力,使得前端绘图技术更加丰富和多样化 | |
| 《Vue实战相关博客》 | 持续更新中~ | 详细总结了常用UI库elementUI的使用技巧以及Vue的学习之旅 |
| 《python相关博客》 | 持续更新中~ | Python,简洁易学的编程语言,强大到足以应对各种应用场景,是编程新手的理想选择,也是专业人士的得力工具 |
| 《sql数据库相关博客》 | 持续更新中~ | SQL数据库:高效管理数据的利器,学会SQL,轻松驾驭结构化数据,解锁数据分析与挖掘的无限可能 |
| 《算法系列相关博客》 | 持续更新中~ | 算法与数据结构学习总结,通过JS来编写处理复杂有趣的算法问题,提升你的技术思维 |
| 《IT信息技术相关博客》 | 持续更新中~ | 作为信息化人员所需要掌握的底层技术,涉及软件开发、网络建设、系统维护等领域的知识 |
| 《信息化人员基础技能知识相关博客》 | 无论你是开发、产品、实施、经理,只要是从事信息化相关行业的人员,都应该掌握这些信息化的基础知识,可以不精通但是一定要了解,避免日常工作中贻笑大方 | |
| 《信息化技能面试宝典相关博客》 | 涉及信息化相关工作基础知识和面试技巧,提升自我能力与面试通过率,扩展知识面 | |
| 《前端开发习惯与小技巧相关博客》 | 持续更新中~ | 罗列常用的开发工具使用技巧,如 Vscode快捷键操作、Git、CMD、游览器控制台等 |
| 《photoshop相关博客》 | 持续更新中~ | 基础的PS学习记录,含括PPI与DPI、物理像素dp、逻辑像素dip、矢量图和位图以及帧动画等的学习总结 |
| 日常开发&办公&生产【实用工具】分享相关博客》 | 持续更新中~ | 分享介绍各种开发中、工作中、个人生产以及学习上的工具,丰富阅历,给大家提供处理事情的更多角度,学习了解更多的便利工具,如Fiddler抓包、办公快捷键、虚拟机VMware等工具 |
吾辈才疏学浅,摹写之作,恐有瑕疵。望诸君海涵赐教。望轻喷,嘤嘤嘤
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。愿斯文对汝有所裨益,纵其简陋未及渊博,亦足以略尽绵薄之力。倘若尚存阙漏,敬请不吝斧正,俾便精进!
更多推荐
所有评论(0)