当前位置: 首页 > news >正文

CSS:水平垂直居中

一、使用 Flexbox 布局

<script setup lang="ts">
// 不需要额外逻辑,纯CSS实现
</script><template><div class="flex-center"><div class="content">我是居中内容</div></div>
</template><style scoped>
.flex-center {display: flex;justify-content: center; /* 水平居中 */align-items: center;     /* 垂直居中 */height: 100%;          /* 视口高度 */width: 100%;            /* 宽度 */
}.content {/* 可选样式 */padding: 20px;background-color: #f0f0f0;border-radius: 8px;
}
</style>

二、使用 Grid 布局

<script setup lang="ts">
// 不需要额外逻辑,纯CSS实现
</script><template><div class="grid-center"><div class="content">我是居中内容</div></div>
</template><style scoped>
.grid-center {display: grid;place-items: center; /* 同时设置水平和垂直居中 */height: 100%;width: 100%;
}.content {/* 可选样式 */padding: 20px;background-color: #f0f0f0;
}
</style>

三、使用绝对定位 + transform

<script setup lang="ts">
// 不需要额外逻辑,纯CSS实现
</script><template><div class="absolute-center"><div class="content">我是居中内容</div></div>
</template><style scoped>
.absolute-center {position: relative;height: 100%;width: 100%;
}.content {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%); /* 反向偏移自身宽高的50% *//* 可选样式 */padding: 20px;background-color: #f0f0f0;
}
</style>

四、使用 margin: auto (需要固定尺寸)

<script setup lang="ts">
// 不需要额外逻辑,纯CSS实现
</script><template><div class="margin-auto-center"><div class="content">我是居中内容</div></div>
</template><style scoped>
.margin-auto-center {display: flex;height: 100%;width: 100%;
}.content {margin: auto; /* 需要在flex或grid容器中,且元素需要有尺寸 */width: 200px;  /* 需要固定宽度 */height: 100px; /* 需要固定高度 *//* 可选样式 */padding: 20px;background-color: #f0f0f0;
}
</style>

五、使用 CSS 表格布局

<script setup lang="ts">
// 不需要额外逻辑,纯CSS实现
</script><template><div class="table-center"><div class="content">我是居中内容</div></div>
</template><style scoped>
.table-center {display: table;width: 100%;height: 100%;
}.table-center > .content {display: table-cell;text-align: center; /* 水平居中 */vertical-align: middle; /* 垂直居中 */
}
</style>

六、使用 JavaScript 动态计算 (响应式)

<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount } from 'vue'const position = ref({ x: 0, y: 0 })
const contentRef = ref<HTMLElement>()const updatePosition = () => {if (contentRef.value) {const parent = contentRef.value.parentElementif (parent) {position.value = {x: (parent.clientWidth - contentRef.value.offsetWidth) / 2,y: (parent.clientHeight - contentRef.value.offsetHeight) / 2}}}
}onMounted(() => {updatePosition()window.addEventListener('resize', updatePosition)
})onBeforeUnmount(() => {window.removeEventListener('resize', updatePosition)
})
</script><template><div class="js-center"><div ref="contentRef" class="content" :style="{ transform: `translate(${position.x}px, ${position.y}px)` }">我是JS计算的居中内容</div></div>
</template><style scoped>
.js-center {position: relative;height: 100%;width: 100%;
}.content {position: absolute;/* 初始位置,会被JS覆盖 */top: 0;left: 0;/* 可选样式 */padding: 20px;background-color: #f0f0f0;transition: transform 0.3s ease; /* 平滑过渡 */
}
</style>

七、使用 CSS 变量和 calc()

<script setup lang="ts">
// 不需要额外逻辑,纯CSS实现
</script><template><div class="calc-center"><div class="content">我是使用calc居中的内容</div></div>
</template><style scoped>
.calc-center {position: relative;height: 100%;width: 100%;
}.content {position: absolute;width: 200px;height: 100px;left: calc(50% - 100px); /* 50% - 宽度的一半 */top: calc(50% - 50px);  /* 50% - 高度的一半 *//* 可选样式 */padding: 20px;background-color: #f0f0f0;
}
</style>

Flexbox - 最简单、最现代的方式,推荐使用

Grid - 代码最简洁,但兼容性略低于Flexbox

绝对定位 + transform - 兼容性好,适合复杂场景

margin: auto - 需要固定尺寸,适合简单场景

CSS表格 - 较老的方法,不推荐在新项目中使用

JavaScript计算 - 适合需要动态调整的复杂场景

CSS calc() - 需要知道元素尺寸,灵活性较低

在大多数现代项目中,Flexbox 或 Grid 方法是首选,因为它们简洁、高效且易于维护。

以上方法均经过测试

八、欢迎交流指正

http://www.lryc.cn/news/624676.html

相关文章:

  • 【银河麒麟桌面系统】配置匿名文件夹与用户认证共享服务
  • 2025年秋招Java后端面试场景题+八股文题目
  • AI 推荐系统云端部署实战:基于亚马逊云科技免费资源的工程实现
  • 从财务整合到患者管理:德国医疗集团 Asklepios完成 SAP S/4HANA 全链条升级路径
  • CAN总线的安全性
  • Linux小白加油站,第三周周考
  • 世界模型之自动驾驶
  • 想找出版社出书?这样选就对了!
  • 《P1195 口袋的天空》
  • OVS:ovn是如何支持组播的?
  • GPT-5之后:当大模型更新不再是唯一焦点
  • 多硬盘构建lvm存储
  • GPT-5博士级AI使用教程及国内平替方案
  • 基于SpringBoot+Uniapp的互联网订餐小程序(协同过滤算法、Echarts图形化分析)
  • “Let it Crash“:分布式系统设计的涅槃重生哲学
  • 【笔记】位错的定义和分类
  • 【2025CVPR-目标检测方向】学习稳健且硬件自适应的对象检测器,以应对边缘设备的延迟攻击
  • Image-to-Music API 接入文档(图片生成音乐)
  • 综合布线系统的网络分线箱计量-文字查找精准定位
  • 区块链技术原理(16)-以太坊节点与客户端
  • 从0-1使用Fastmcp开发一个MCP服务,并部署到阿里云百炼 -持续更新中
  • 深入理解浏览器渲染机制:重排(Reflow)与重绘(Repaint)
  • 深入剖析以太坊虚拟机(EVM):区块链世界的计算引擎
  • 【低空安全】低空安全简介
  • OCR库pytesseract安装保姆级教程
  • 【LLM1】大型语言模型的基本生成机制
  • 特种行业许可证识别技术:通过图像处理、OCR和结构化提取,实现高效、准确的许可证核验与管理
  • 力扣32:最长有效括号
  • Docker小游戏 | 使用Docker部署文字风格冒险网页小游戏
  • 【Linux开发】错误更改bash.sh导致PATH环境变量被破坏所有命令不可用的解决方法