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

css3基于伸缩盒模型生成一个小案例

css3基于伸缩模型生成一个小案例

在前面学习了尚硅谷天禹老师的css3内容后,基于伸缩盒模型做的一个小案例,里面使用了 flex 布局,以及主轴切换,以及主轴平分等特性,分为使用css3 伸缩盒模型方式,已经传统的 margin 等实现的两种方式;

效果预览

在这里插入图片描述

原型分析

重置样式:
* { font-family: Arial; font-size: 14px; margin: 0; padding: 0; border: none; }a { text-decoration: none; }ul { list-style: none; }
背景:铺满全屏
头部:
高度 70pX
背景色 rgba(0,0,0,0.7)
左右各种 20px内边距
导航文字:白色文字、1px白色边框、圆角8px、内边距10px、间距20px中间大导航:宽:1000px高300px在内容区水平垂直居中大导航里的每一个导航项宽:180px高度:200px五个大导航,颜色分别为:#595CA8;#FF9D2E;#01A6DE;#015E91;#1DC128;#01A6DE;

结构拆分详解

我们将页面整个元素分为上中结构。

  • 上方(导航头)

    ​ 设置高度为 70px,里面包含了一个左右的布局,我们需要将容器里面的两个元素左右排列,这个时候我们就需要将整个header 开启伸缩容器,然后设置为 主轴对齐方式,左右两边顶到边上,利用justify-content: space-between;

    • 侧轴,水平居中 ,我们只有一行 align-items: center;
  • 中间部分(内容区)

    我们需要让中间容器铺满整个视口,中间的导航栏居中对齐;

    • 设置外层视口高度 (100vh - 70px ) ,将外层变为伸缩容器
    • 里面伸缩项目设置 margin:auto 这个时候就水平,垂直对齐了

css3新特性实现

<title>14.案例(方案1)</title><style>* { font-family: Arial; font-size: 14px; margin: 0; padding: 0; border: none; }a { text-decoration: none; }ul { list-style: none; }body {background-image: url('./images-v1/bg.jpg');background-repeat: no-repeat;}/* 头部 */.page-header {height: 70px;background-color: rgba(0,0,0,0.7);padding: 20px;display: flex;justify-content: space-between;align-items: center;}.page-header ul {display: flex;}.page-header ul li {color: white;border: 1px solid white;border-radius: 8px;padding: 10px;margin-right: 20px;}.page-header ul li a {color: white;}.page-header ul li:last-child {margin-right: 0;}/* 中间部分 */.container {height: calc(100vh - 70px);display: flex;}.content-nav {width: 1000px;height: 300px;margin: auto;display: flex;justify-content: space-evenly;align-items: center;}.content-nav li {width: 180px;height: 200px;display: flex;flex-direction: column;justify-content: space-around;align-items: center;cursor: pointer;transition: 0.2s linear;}.content-nav li:hover {box-shadow: 0 0 20px black;}.content-nav li span {font-size: 20px;color: white;}.content-nav li:nth-child(1) {background-color: #595CA8;}.content-nav li:nth-child(2) {background-color: #FF9D2E;}.content-nav li:nth-child(3) {background-color: #01A6DE;}.content-nav li:nth-child(4) {background-color: #015E91;}.content-nav li:nth-child(5) {background-color: #1DC128;}.content-nav li:nth-child(6) {background-color: #01A6DE;}</style>
</head>
<body><!-- 头部 --><header class="page-header"><a href="#"><img src="./images-v1/logo.png" alt="logo"></a><ul><li><a href="#">国内校区</a></li><li><a href="#">美国校区</a></li><li><a href="#">加拿大校区</a></li><li><a href="#">英国校区</a></li><li><a href="#">日本校区</a></li></ul></header><!-- 中间部分 --><div class="container"><ul class="content-nav"><li><img src="./images-v1/item1.png" alt=""><span>我的邮箱</span></li><li><img src="./images-v1/item2.png" alt=""><span>云服务</span></li><li><img src="./images-v1/item3.png" alt=""><span>手机课堂</span></li><li><img src="./images-v1/item4.png" alt=""><span>微信服务</span></li><li><img src="./images-v1/item5.png" alt=""><span>在线客服</span></li></ul></div></body>

css3部分

中间部分使用了一部分css3的新特性,以及使用margin 属性,利用文本居中对齐,所以说我们实现效果是有多种方式,并不是只局限于某一种方案

效果

在这里插入图片描述

代码

 <title>14.案例(方案2)</title><style>* { font-family: Arial; font-size: 14px; margin: 0; padding: 0; border: none; }a { text-decoration: none; }ul { list-style: none; }body {background-image: url('./images-v1/bg.jpg');background-repeat: no-repeat;}/* 头部 */.page-header {height: 70px;background-color: rgba(0,0,0,0.7);padding: 20px;display: flex;justify-content: space-between;align-items: center;}.page-header ul {display: flex;}.page-header ul li {color: white;border: 1px solid white;border-radius: 8px;padding: 10px;margin-right: 20px;}.page-header ul li a {color: white;}.page-header ul li:last-child {margin-right: 0;}/* 中间部分 */.container {height: calc(100vh - 70px);display: flex;}.content-nav {width: 1000px;height: 300px;margin: auto;display: flex;justify-content: space-evenly;align-items: center;}.content-nav li {width: 180px;height: 200px;text-align: center;cursor: pointer;transition: 0.2s linear;}.content-nav li:hover {box-shadow: 0 0 20px black;}.content-nav li img {margin-top: 30px;}.content-nav li span {font-size: 20px;color: white;display: block;margin-top: 20px;}.content-nav li:nth-child(1) {background-color: #595CA8;}.content-nav li:nth-child(2) {background-color: #FF9D2E;}.content-nav li:nth-child(3) {background-color: #01A6DE;}.content-nav li:nth-child(4) {background-color: #015E91;}.content-nav li:nth-child(5) {background-color: #1DC128;}.content-nav li:nth-child(6) {background-color: #01A6DE;}</style>
</head>
<body><!-- 头部 --><header class="page-header"><a href="#"><img src="./images-v1/logo.png" alt="logo"></a><ul><li><a href="#">国内校区</a></li><li><a href="#">美国校区</a></li><li><a href="#">加拿大校区</a></li><li><a href="#">英国校区</a></li><li><a href="#">日本校区</a></li></ul></header><!-- 中间部分 --><div class="container"><ul class="content-nav"><li><img src="./images-v1/item1.png" alt=""><span>我的邮箱</span></li><li><img src="./images-v1/item2.png" alt=""><span>云服务</span></li><li><img src="./images-v1/item3.png" alt=""><span>手机课堂</span></li><li><img src="./images-v1/item4.png" alt=""><span>微信服务</span></li><li><img src="./images-v1/item5.png" alt=""><span>在线客服</span></li></ul></div></body>

注意部分

经测试,部分浏览器不支持主轴对齐均分方式,justify-content: space-evenly; 请使用谷歌浏览器测试,否则不起作用

总结部分

愿我们每个人都能有一份工匠精神,我们应该给代码赋予生命的神圣任务,该简写就绝不多写无用代码,该加注释就写注释;最终希望我们每个人看他人的代码不在痛苦。

最佳实践

  1. 移动优先‌:优先使用 Flexbox 实现移动端布局,再通过媒体查询扩展桌面端适配
  2. 渐进增强‌:对不支持 Flexbox 的浏览器(如旧版 IE)提供传统布局兜底方案
  3. 语义化约束‌:避免过度嵌套 Flex 容器,合理结合 Grid 布局处理二维复杂场

flex布局解决的问题

  1. 布局灵活性不足
    传统布局依赖 floatpositiondisplay 属性组合,难以处理动态内容或未知尺寸元素的排列16。Flexbox 通过主轴和交叉轴的抽象概念,允许容器自动调整子元素的尺寸和位置,实现动态适应能力36。
  2. 对齐与分布困难
    传统布局中垂直居中、多元素间距均匀分配等场景需复杂计算,而 Flexbox 仅需通过 justify-contentalign-items 等属性即可实现多种对齐模式45。
  3. 响应式适配低效
    传统布局需媒体查询频繁调整,而 Flexbox 内置自适应逻辑(如 flex-wrap 换行、flex-grow 比例分配),简化了不同屏幕尺寸的适配流程28。
  4. 代码冗余与维护成本高
    Flexbox 通过声明式属性(如 flex-direction 定义方向)替代传统布局的复杂嵌套,减少代码量并提升可维护性
http://www.xdnf.cn/news/5807.html

相关文章:

  • 华三路由器单臂路由配置
  • 数字IC后端培训教程之数字后端项目典型案例分析
  • Spring Boot 的 CommandLineRunner
  • 【爬虫】12306查票
  • android特许权限调试
  • 特伦斯折叠重锤V70:实现专业演奏,从这里开始
  • DES两种加密模式
  • 普林斯顿数学三剑客读本分析。
  • element ui 实现el-form表单校验不通过时自动滚动到不通过的第一项去
  • 【题解-洛谷】B3881 [信息与未来 2015] 拴奶牛
  • 告别静态配置!Spring Boo动态线程池实战指南:Nacos+Prometheus全链路监控
  • 今日行情明日机会——20250512
  • std::move 和 std::forward
  • 图像的EXIF方向信息(Orientation标签)
  • MySQL 备份与恢复
  • 45、跳跃游戏Ⅱ
  • JavaScript双问号操作符(??)详解,解决使用 || 时因类型转换带来的问题
  • 消息队列RocketMQ-docker部署保姆级教程(从0到1)(2)
  • 16.three官方示例+编辑器+AI快速学习webgl_buffergeometry_lines_indexed
  • apt 软件源与 Docker 镜像源
  • Westlake-Omni 情感端音频生成式输出模型
  • 软考高分备考秘籍:综合知识、案例分析、论文全攻略
  • 如何使用VBA宏高效操作Word文档中的表格(对齐与样式)
  • 六、STM32 HAL库回调机制详解:从设计原理到实战应用
  • nginx-整合modsecurity做waf
  • Ubuntu 22初始配置(root、ssh)
  • 航电系统之电传飞行控制系统篇
  • IDR方程迭代求解算法介绍与比较
  • Ollama+OpenWebUI+docker完整版部署,附带软件下载链接,配置+中文汉化+docker源,适合内网部署,可以局域网使用
  • Java 线程的堆栈跟踪信息