拓冰建站拓冰建站
首页 / 资讯中心 / 正文

freeCodeCamp 应用视觉设计实战:用 CSS position: relative 与偏移属性改变元素的相对位置

freeCodeCamp 应用视觉设计实战用 CSS position: relative 与偏移属性改变元素的相对位置【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp本篇基于 freeCodeCamp 课程中 Change an Elements Relative Position 这一挑战位于 Applied Visual Design 模块系统讲解 CSS 盒模型与 normal flow 的基础、position: relative配合top/bottom/left/right偏移属性的工作原理、完整可运行的示例代码以及测试断言背后的验证方式。读完后你能理解相对定位为什么不改变周围元素的布局这一核心机制并掌握偏移方向与位移方向相反这一常见误区。挑战在课程体系中的位置该挑战是 freeCodeCamp 响应式 Web 设计Responsive Web Design认证课程中Applied Visual Design模块的一部分。从 applied-visual-design 模块结构文件 可以看到Change an Elements Relative Position挑战 id 为587d781e367417b2b2512ac9排在本模块第 19 位前面刚学完:hover伪类状态后面紧跟三节定位进阶内容Move a Relatively Positioned Element with CSS Offsets用偏移移动相对定位元素Lock an Element to its Parent with Absolute Positioning绝对定位Lock an Element to the Browser Window with Fixed Positioning固定定位而整个模块又是 responsive-web-design 超级模块 中basic-css之后的第三块即先打牢 HTML 与基础 CSS再进入视觉设计综合应用。本文所有讲解均围绕 挑战源文件 展开。前置概念CSS 盒模型与正常文档流normal flow挑战原文从两个基础概念切入理解它们是掌握relative定位的前提CSS Box ModelCSS 盒模型CSS 把每个 HTML 元素都视为一个独立的盒子。块级元素block-level如h1~h6、p、div自动从新的一行开始渲染行内元素inline如img、span则嵌在周围文本内容中流动。Normal flow正常流上述这种默认排列方式称为文档的正常流。position属性就是用来覆盖这种默认排布的工具。关键点在于不同的position值覆盖程度不同——relative只视觉移动元素不把它从正常流中移除而absolute和fixed则会把元素彻底摘出正常流这一点在后续挑战 Lock an Element to its Parent with Absolute Positioning 中有专门验证。核心原理position: relative 与偏移属性原文给出的核心规则是当元素的position被设为relative时你可以指定 CSS 如何相对于该元素在正常流中的当前位置来移动它。它配合left/right、top/bottom这四组 CSS 偏移属性使用指定以像素、百分比或 em 为单位把元素从它本应所在的位置移开多远。一个最小示例是把段落从底部位置移开 10 像素p { position: relative; bottom: 10px; }这里有一个必须牢记的语义细节偏移属性描述的是离开参考边而不是往哪个方向走。bottom: 10px表示元素离开其正常位置底部 10px实际效果是向上移动同理left: 15px的效果是向右移动 15pxtop: 15px的效果是向下移动 15px。紧随本挑战之后的 偏移进阶挑战 正是用这个语义设计的题目——把 h2 向右移动 15px、向上移动 10px的标准答案就是left: 15px; bottom: 10px;。另一个核心特性是相对定位不改变正常流。元素视觉位置变了但它原来占用的坑位仍然保留——周围的元素仍按它还在那个位置来排布。原文用p中的文案点题I still think the h2 is where it normally sits.这段文字仍然认为 h2 在它平时的位置。动手练习题目要求与起始代码挑战的原始任务指令--instructions-- 部分是把h2的position改为relative并用 CSS 偏移属性把它从正常流中top位置的方向移开 15 像素。注意观察对周围h1和p元素的位置没有任何影响。起始代码seed如下注意style中h2规则体是空的等待你填写style h2 { } /style body h1On Being Well-Positioned/h1 h2Move me!/h2 pI still think the h2 is where it normally sits./p /body标准答案style h2 { position: relative; top: 15px; } /style body h1On Being Well-Positioned/h1 h2Move me!/h2 pI still think the h2 is where it normally sits./p /body两条声明缺一不可position: relative;—— 声明相对定位模式激活偏移属性的语义top: 15px;—— 离开正常位置的顶部 15px即向下位移 15px。如果只写top: 15px而不设position: relative偏移属性对静态元素position: static默认值不生效h2会留在原地——这也是为什么任务要求先改 position再加偏移。测试断言如何验证你的答案freeCodeCamp 的每个挑战都附带可执行的测试提示--hints-- 部分它们本质上是运行在测试 DOM 上的断言脚本。本挑战有两条断言均通过window.getComputedStyle读取h2的实际计算样式// 断言 1h2 必须处于相对定位状态 const h2Element document.querySelector(h2) const h2Style window.getComputedStyle(h2Element); assert.equal(h2Style?.position, relative);// 断言 2h2 必须通过偏移属性离开正常位置的 top 方向 15px const h2Element document.querySelector(h2) const h2Style window.getComputedStyle(h2Element); assert.equal(h2Style?.top, 15px);从这两条断言可以读出三个设计意图校验的是计算样式而非源码文本第二条用的是getComputedStyle加等值断言第一条同所以答案必须是真正生效的样式而不能只是文本匹配第二条断言明确钉死top必须为15px意味着用bottom: -15px之类的等价写法不符合题目口径——教学上希望你先掌握直接方向的写法断言只检查position与top不检查left/bottom说明本题只要求单轴位移另一轴保持为自动值。可访问性提醒视觉布局与语义结构分离原文在 Note 中特别强调了一条容易被忽视的工程原则定位给你强大的布局控制力但要记住无论元素被定位到哪里底层的 HTML 标记自上而下阅读时都应该是组织良好、有意义的。因为依赖屏幕阅读器等辅助设备的视觉障碍用户正是按标记顺序访问你的内容的。换句话说position: relative改变的是渲染顺序不改变DOM 顺序。做视觉微调如把徽章错位 15px时不应依赖打乱 HTML 结构来凑布局——这正是原文用no matter the position of elements想传达的分层思想HTML 层负责语义与阅读顺序面向屏幕阅读器、搜索引擎与无样式环境CSS 层负责视觉呈现面向键盘/鼠标用户的眼睛。这条原则在 freeCodeCamp 后续的 应用可访问性模块applied-accessibility紧随本模块之后中会进一步展开。延伸相对定位在后续挑战中的用法本挑战的姊妹篇 Move a Relatively Positioned Element with CSS Offsets 把四个偏移属性一次用全其种子代码已预置position: relative要求把h2向右 15px、向上 10px答案是h2 { position: relative; left: 15px; bottom: 10px; }对比本挑战的top: 15px向下可以直观验证偏移方向 离开参考边的语义left生效为右移bottom生效为上移。而模块内接下来的两节则分别演示absolute相对最近定位祖先定位、脱离正常流与fixed相对视口定位、滚动不跟随三者共同构成 CSS 定位体系的完整阶梯。小结围绕 freeCodeCamp 的这道挑战核心知识可归纳为四句话CSS 盒模型把元素视为盒子normal flow 是它们的默认排布方式position属性用于覆盖它position: relative让元素视觉上离开正常流位置但仍占据原来的布局空间周围元素不受影响top/bottom/left/right偏移属性描述离开哪条边位移方向与参考边相反且必须配合非static的position才生效视觉定位的自由度不应破坏 HTML 标记的语义顺序那是辅助技术用户访问内容的唯一通道。若想在本地仓库中进一步查看这道挑战的完整定义含全部断言与多语言版本可直接阅读 挑战源文件其章节结构front matter、--description--、--instructions--、--hints--、--seed--、--solutions--符合仓库 挑战格式校验规则 的定义。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门