Angular 由一个bug说起之五:为什么现代CSS系统倾向于少用或不用absolute定位?

news2024/11/25 23:27:22

在现代网页设计中,CSS(层叠样式表)是不可或缺的一部分。在过去,使用position: absolute定位元素是一种常见的技术,但是随着前端开发的发展,现代CSS系统倾向于减少或避免使用absolute定位。本文将探讨这一趋势的原因,并提供一些示例代码以说明替代方法。

这里我们先举一个关于脱离文档流的bug例子,是我们项目中真实遇到的一个bug

示例代码:

html

<div class="container">
  <div class="bigbox">
    <div class="box">
      <label class="label-selected">Collapsed All</label>
      <div class="button-box">
        <button>switch</button>
      </div>
      <label class="label-selected">Expanded All</label>
    </div>
  </div>
   
</div>

css

<style>
  .container {
    height: 400px;
    overflow: scroll;
  }
  .bigbox {
    height: 800px;
  }
  .box {
     display: flex;
     line-height: 25px;
     align-items: center;
     margin-top: 10px;
  }
  .label-selected {
      font-weight: 600;
      font-size: 14px;
      line-height: 20px;
      margin: 0 10px;
     }
  .button-box {
    margin: 0 8px;
  }
</style>

首先先看下正常的一个样式,三个元素依次居中排列,随着鼠标滚动而滚动

随着时间的变化,我们需要对UI进行升级,升级之后出现下面的情况

示例代码:

css

.button-box {
    margin: 0 8px;
    height: 20px;
    width: 40px;
  }
  .button-box button {
    position: absolute;
  }

从静态看,样式好像没什么变化,三个元素依次居中排列。但是当我们的窗口变小,出现滚动条,鼠标滚动时,button元素保持不动。正是因为加了position: absolute; 导致button脱硫文档流,出现上方bug。

所以,绝对定位(position: absolute)是一个强大的CSS布局工具,但它并不总是最佳选择。有时候,其他布局技术可以提供更灵活或更简单的解决方案。

我们可以从以下三种布局来展开讨论。

1. 维护性和可读性

使用absolute定位会导致元素脱离文档流,使得布局变得更加复杂和难以维护。在大型项目中,随着页面结构的变化,维护absolute定位的元素可能需要更多的时间和精力。

在实际开发中,我们很容易

相比之下,采用基于文档流的布局方式可以更容易理解和修改。

示例代码1:使用文档流布局

html

<div class="container">
  <div class="box"></div>
</div>

css

<style>
  .container {
    position: relative;
    width: 300px;
    height: 200px;
    background-color: #eee;
  }

  .box {
    width: 100px;
    height: 100px;
    background-color: #f00;
  }
</style>

效果图:

2. 响应式设计

在响应式设计中,页面需要根据设备的不同尺寸和方向进行布局调整。使用absolute定位可能会导致元素在不同屏幕尺寸下错位或遮挡其他内容,增加了响应式设计的难度。相比之下,基于文档流的布局更容易适应不同的设备和屏幕尺寸。

示例代码2:响应式布局

html

<div class="container">
  <div class="box"></div>
</div>

css

<style>
  .container {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 500px;
    height: 200px;
    background-color: #eee;
  }

  .box {
    width: 100px;
    height: 100px;
    background-color: #f00;
  }
</style>

效果图:

3. 可访问性

absolute定位的元素可能会遮挡屏幕阅读器的内容,降低网站的可访问性。使用基于文档流的布局可以确保内容在阅读器中正确呈现,提高了网站的可访问性。

示例代码3:增强可访问性

Html

<main>
  <h1>主标题</h1>
  <div class="content">
    <p>网页内容...</p>
  </div>
</main>

css

<style>
  main {
    display: flex;
    flex-direction: column;
    align-items: center;
  }

  .content {
    width: 80%;
    max-width: 800px;
    margin-top: 20px;
  }
</style>

效果图:

综上所述,现代CSS系统倾向于少用或不用absolute定位是为了提高代码的维护性、可读性、响应性设计和可访问性。在实际项目中,我们应该优先考虑使用基于文档流的布局方法,只有在必要时才使用absolute定位。通过合理的布局和样式设计,我们可以创建更易于维护和优化的网站。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1626096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上班族必备的便签备忘录app 好用的便签备忘录软件

上班族每天都需要处理大量的工作事项&#xff0c;从策划方案到客户沟通&#xff0c;每一个环节都至关重要。然而&#xff0c;仅仅依靠大脑记忆&#xff0c;很容易遗漏某些细节&#xff0c;甚至可能错过重要的截止日期。为了避免这种情况&#xff0c;许多人选择使用一款优秀的便…

NATAPP内网穿透工具安装和使用教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 必须要按照先操作完第一步 再操作第二步骤下载教程 1.进入网址注册&#xff1a;NATAPP - 2.下载网址&#xff1a;NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 流程 注册NATAPP 实名认证通过之后…

学习笔记Label自右向左滚动和父容器内左右移动方法(含代码)

一、【滚动效果】 【radialMenu1控件】菜单切换浏览器和控制台 需要定时器Timer&#xff08;默认属性EnabledFalse,Interval100&#xff09; 二、【方法1和方法2&#xff0c;通过属性切换开关和方向】 try{if (myObject.TextScrollSwitch){//打开移动if(myObject.TextScroll…

固态继电器:推进可再生能源系统

随着可再生能源系统的发展&#xff0c;太阳能系统日益成为现代能源解决方案的先锋。在这种背景下&#xff0c;固态继电器&#xff08;SSR&#xff09;&#xff0c;特别是光耦固态继电器的利用变得日益突出。本文旨在深入探讨SSR在可再生能源系统中的多方位应用&#xff0c;重点…

echarts利用graphic属性给饼图添加内圈图片及外圈图片(可自适应宽度位于饼图中心)

最终效果图&#xff1a; 目录 前言资源主要部分graphic介绍style介绍代码 加载饼图方法&#xff08;option所有的配置&#xff09; 前言 思路是看到这个博客启发的&#xff1a;点击跳转查看博客&#xff0c;然后在graphic属性里改了我的实际需求&#xff0c;譬如图片的宽高、…

Django框架之python后端框架介绍

一、网络框架及MVC、MTV模型 1、网络框架 网络框架&#xff08;Web framework&#xff09;是一种软件框架&#xff0c;用于帮助开发人员构建Web应用程序和Web服务。它提供了一系列预先编写好的代码和工具&#xff0c;以简化开发过程并提高开发效率。网络框架通常包括以下功能…

Python-VBA函数之旅-len函数

目录 一、len函数的常见应用场景&#xff1a; 二、len函数使用注意事项&#xff1a; 三、如何用好len函数&#xff1f; 1、len函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、…

【上岗认证】错题整理记录

目录 &#x1f31e;一、阶段1&#xff1a;编码规范 &#x1f30a;编码规范考试-CC &#x1f31e;二、阶段2&#xff1a;开发基础 &#x1f30a;C/C &#x1f30a;数据库&#xff08;Oracle/MySql&#xff09; &#x1f31e;三、阶段3&#xff1a;测试基础 &#x1f30a;…

好的猫咪主食冻干到底该咋选?品控稳定的主食冻干推荐

315中国之声报道的河北省邢台市南和区某宠粮代工厂的“行业潜规则”&#xff0c;给各位铲屎官拉响了警钟。配料表上写的鸡肉含量为52%&#xff0c;新鲜鸡小胸含量为20%&#xff0c;所谓的鲜鸡肉其实就是鸡肉粉。本来养宠物是为了让自己身心愉悦&#xff0c;但这样的行业乱象弄得…

就业班 第三阶段(负载均衡) 2401--4.18 day2 LVS-DR模式

3、LVS/DR 模式 实验说明&#xff1a; 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关 主机名ip系统用途client172.16.147.1mac客户端lvs-server172.16.147.154centos7.5分发器real-server1172.16.…

我的创作纪念日_十多年来的坚守

机缘 今天是我的码龄15周年&#xff0c;也是我撰写了第 1 篇技术博客&#xff1a;《如何把Centos stream 9桌面字体调大》三周年的时子&#xff0c;我看到 CSDN官方给我的短信“魔极客 &#xff0c;有幸再次遇见你”&#xff0c;很是高兴&#xff0c;为了感谢CSDN官方给我的回…

回归与聚类——K-Means(六)

什么是无监督学习 一家广告平台需要根据相似的人口学特征和购买习惯将美国人口分成不同的小 组&#xff0c;以便广告客户可以通过有关联的广告接触到他们的目标客户。Airbnb 需要将自己的房屋清单分组成不同的社区&#xff0c;以便用户能更轻松地查阅这些清单。一个数据科学团队…

16 JavaScript学习: 类型转换

JavaScript 类型转换 Number() 转换为数字&#xff0c; String() 转换为字符串&#xff0c; Boolean() 转换为布尔值。 JavaScript 数据类型 在 JavaScript 中有 6 种不同的数据类型&#xff1a; stringnumberbooleanobjectfunctionsymbol 3 种对象类型&#xff1a; Obje…

双向链表专题

文章目录 目录1. 双向链表的结构2. 双向链表的实现3. 顺序表和双向链表的优缺点分析 目录 双向链表的结构双向链表的实现顺序表和双向链表的优缺点分析 1. 双向链表的结构 注意&#xff1a; 这⾥的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;带头链表里的头节点…

强大CSS3可视化代码生成器

DIY可视化CSS可视化代码生成器是一种工具&#xff0c;它允许用户通过图形界面直观地创建和编辑CSS样式&#xff0c;然后自动生成相应的CSS代码。DIY可视化对于那些不熟悉CSS语法或者想要更直观地调整样式的人来说特别有用。 提供了强大的CSS可视化编辑功能&#xff0c;用户可以…

【牛客网】:链表的回文结构(提升)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;每日一练 &#x1f337;追光的人&#xff0c;终会万丈光芒 目录 &#x1f3dd;问题描述&#xff1a; &#x1f3dd;问题分析&#xff1a; 步骤一&#xff1a;查找链表的中间节点 步骤二&am…

小红书美妆类笔记文案有哪些特点?

小红书作为一个分享和发现美好生活的平台&#xff0c;美妆护肤时尚类笔记在其中占据了重要的地位。这些笔记的文案特点通常表现为以下几点&#xff1a; 1.**情感化叙述**&#xff1a; 这类文案往往运用生动形象的词汇和细腻的情感表达&#xff0c;使文案更贴近读者的内心感受…

vue使用海康控件开发包——浏览器直接查看海康监控画面

1、下载控件开发包 2、安装插件&#xff08;双击/demo/codebase/HCWebSDKPlugin.exe进行安装&#xff09; 3、打开/demo/index.html文件 4、在页面上输入你的海康监控的登录信息进行预览 如果有监控画面则可以进行下面的操作 注意&#xff1a;以下操作都在Vue项目进行 5、复…

【笔试强训】除2!

登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器&#xff0c;C、Java、前端、产品、运营技能学习/备考/求职题库&#xff0c;在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://ac.nowcoder.com/acm/…

MySQL面试——聚簇/非聚簇索引

存储引擎是针对表结构&#xff0c;不是数据库 引擎层&#xff1a;对数据层以何种方式进行组织 update&#xff1a;加索引&#xff1a;行级锁&#xff1b;不加索引&#xff1a;表级锁