你在写css时,一定遇到过这些问题:
想让一个盒子的高度总是宽度的一半
希望字体大小能随着屏幕宽度自动调整
需要元素在动画中平滑移动
过去,这些效果往往需要JavaScript帮忙计算。但现在,CSS自己就能搞定。
CSS的数学函数让样式变得聪明起来。从基本的计算到复杂的三角函数,这些工具让布局和动画变得更加灵活。
calc() 是CSS中最常用的数学函数。它能在样式里直接进行数学运算,支持加减乘除。
.container {
  width: 80%;
  height: calc(100vh - 100px);
}
.center-box {
  width: 300px;
  height: 200px;
  position: absolute;
  left: calc(50% - 150px);
  top: calc(50% - 100px);
}第一个例子让容器高度总是视口高度减去100像素。第二个例子实现了元素的精确居中。
使用 calc() 时要注意:
乘号两边至少要有一个是数字(不能带单位)
除号右边必须是数字,不能是0
加减号两边要有空格
可以直接用括号,不需要再写 calc()
/* 正确 */
width: calc(100% - 20px);
height: calc(50vh + (100px * 2));
/* 错误 */
width: calc(100%-20px); /* 缺少空格 */
height: calc(100px / 0); /* 除数为0 */响应式设计中,我们经常需要元素在不同屏幕上都能正常显示。比较函数就是为此而生。
.content {
  width: min(800px, 90vw);
}在小屏幕上,宽度是视口的90%。在大屏幕上,宽度不会超过800像素。这样就避免了元素被拉伸得太宽。
.sidebar {
  width: max(200px, 15%);
  font-size: max(14px, 1.2rem);
}侧边栏宽度至少200像素,字体至少14像素。这在移动端特别有用,确保文字不会太小。
.title {
  font-size: clamp(16px, 4vw, 24px);
  margin: clamp(10px, 2vh, 30px);
}clamp(最小值, 理想值, 最大值) 让字体大小在16到24像素之间变化,根据视口宽度自动调整。永远不会太小,也不会太大。
.card {
  margin-left: abs(calc(50% - 400px));
}确保margin-left始终是正数,避免布局问题。
.slider {
  transform: translateX(calc(100px * var(--direction)));
}
.slider:hover {
  --direction: 1; /* 向右 */
}
.slider:active {
  --direction: -1; /* 向左 */
}通过改变方向变量,控制元素的移动方向。
CSS现在支持正弦、余弦等三角函数,可以创建复杂的动画效果。
.clock-face {
  position: relative;
  width: 300px;
  height: 300px;
  border-radius: 50%;
}
.hour-marker {
  position: absolute;
  width: 20px;
  height: 20px;
  left: calc(150px + 140px * cos(calc(30deg * var(--hour))));
  top: calc(150px + 140px * sin(calc(30deg * var(--hour))));
}用 sin() 和 cos() 实现时钟表盘的刻度布局。
.orbiting-element {
  animation: orbit 5s linear infinite;
}
@keyframes orbit {
  0% {
    transform: 
      translateX(calc(100px * cos(0deg)))
      translateY(calc(100px * sin(0deg)));
  }
  25% {
    transform: 
      translateX(calc(100px * cos(90deg)))
      translateY(calc(100px * sin(90deg)));
  }
  100% {
    transform: 
      translateX(calc(100px * cos(360deg)))
      translateY(calc(100px * sin(360deg)));
  }
}让元素围绕中心点做圆周运动。
.fade-in {
  opacity: pow(0.1, var(--step));
  animation: appear 2s ease-in;
}创建非线性的淡入效果,更加自然。
.growing-circle {
  width: calc(100px * sqrt(var(--scale)));
  height: calc(100px * sqrt(var(--scale)));
}圆形面积的变化更加平滑,符合视觉感受。
.grid-item {
  width: round(nearest, 33.333%, 25%);
}
.pixel-perfect {
  font-size: round(up, 15.7px, 1px); /* 向上取整为16px */
  box-shadow: round(down, 3.8px, 1px); /* 向下取整为3px */
}确保数值是整数,避免模糊渲染。
.striped-bg {
  background-color: hsl(calc(mod(var(--index), 12) * 30), 70%, 50%);
}
.alternating-items {
  margin-left: calc(rem(var(--index), 2) * 20px);
}mod() 用于创建循环效果,rem() 用于交替样式。
.card-grid {
  display: grid;
  gap: clamp(10px, 2vw, 30px);
  grid-template-columns: repeat(auto-fit, 
    minmax(clamp(250px, 30vw, 400px), 1fr));
}
.card {
  padding: max(15px, 3%);
  font-size: clamp(14px, 1.5vw, 18px);
}这个布局在各种屏幕尺寸下都能良好显示。
.parallax-layer {
  transform: translateY(calc(var(--scroll) * sin(var(--angle))));
  transition: transform 0.1s linear;
}创建自然的视差滚动效果。
:root {
  --base-unit: 8px;
  --scale: 1.2;
}
.space-sm {
  margin: calc(var(--base-unit) / var(--scale));
}
.space-lg {
  margin: calc(var(--base-unit) * pow(var(--scale), 2));
}建立有规律的间距系统,保持设计的一致性。
性能考虑:复杂的计算可能影响性能,尽量避免在动画中频繁使用
浏览器支持:新函数需要检查兼容性
.fallback {
  width: 300px; /* 回退值 */
  width: clamp(250px, 50vw, 400px);
}调试技巧:先用固定值测试,再换成函数
可读性:复杂的计算要添加注释
/* 圆形布局:半径150px,12个均分点 */
.point {
  --angle: calc(360deg / 12 * var(--index));
  left: calc(150px + 120px * cos(var(--angle)));
}CSS数学函数让样式设计变得更加灵活和强大。你不再需要为每个尺寸单独写样式,也不需要依赖JavaScript来实现动态效果。
从简单的自适应布局到复杂的动画效果,这些函数都能帮你实现。开始尝试在项目中使用它们,你会发现CSS比想象中更加智能。
记住,好的工具要用在合适的地方。不要过度使用复杂的计算,保持代码的可读性和维护性同样重要。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!
css两端对齐,通过margin负值、justify、space-between、column-count等多种方式来实现css的两端对齐。
flex布局(Flexible Box)是对界面css盒模型的一个优化,适应不同尺寸的屏幕,被定义flex的容器可以控制子元素的排列方向和大小,能够用更简单清晰的代码来完成复杂的布局。
 在我们的实际开发中,经常会遇到页面中需要悬浮效果,本文将介绍通过fixed的实现,以及通过原生Js实现滚动到一定位置,实现div的悬浮
CSS中Grid是一种二维网格式布局方式,Grid是为了解决二维布局问题而创建的CSS模块。使用Gird的好处,Gird在浏览器的兼容性,Grid布局的示例源码...
flex常用布局:经典的上-中-下布局。在上-中-下布局的基础上,加了左侧定宽 sidebar。左边是定宽 sidebar,右边是上-中-下布局。还是上-中-下布局,区别是 header 固定在顶部,不会随着页面滚动。左侧 sidebar 固定在左侧且与视窗同高,当内容超出视窗高度时,在 sidebar 内部出现滚动条。
本文中,所有的图形都是在单个标签内实现的,大量使用了 CSS3 中的 ::before 、::after 伪元素,transparent 、border,多重线性与径向渐变,多重内外阴影,如果你的效果不尽人意,请尝试在 Chrome 浏览器下预览。
html实现用时间点来展示事件发生点来代替用table展示一条条数据,能够给人清晰、一目了然能够看清事情发生的过程,UI页面也显示的那么清晰。如何用css+html做出时间轴展示事件点的?
 这篇文章主要整理一些关于基于jquery,实现横向/纵向时间轴的插件推荐:jquery.jqtimeline插件、timeline.js插件、Timeglider.js插件、Melon HTML5 、jQuery Timelinr、Timeline Porfolio
 css可以通过为元素设置一个position属性值,position定位是指定位置的定位,以下为常用的几种:static(静态定位)、relative定位(相对定位)、absolute定位(绝对定位)、fixed(固定定位)、inherit定位
css圣杯布局思路:外面一个大div,里面三个小div(都是浮动)。实现左右两栏宽度固定,中间宽度自适应。中间栏优先渲染。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!