CSS Positioning

CSS positioning is a powerful layout tool that lets you precisely control element placement on the page.

Position Property Quick Reference

Value Behavior Reference Point Common Use
static Normal flow (default) Default behavior
relative Offset from normal position Self's original position Fine-tuning, positioning context
absolute Removed from flow Nearest positioned ancestor Badges, overlays
fixed Fixed in viewport Viewport Sticky headers, back-to-top
sticky Hybrid Scroll container + viewport Sticky headers

position: relative

Offsets element from its normal position, without removing it from document flow:

Example

HTML
<style>
.box {
  position: relative;
  top: 20px;    /* Move down 20px */
  left: 30px;   /* Move right 30px */
  background: #e3f2fd;
  padding: 10px;
}
</style>
<div class="box">Relatively positioned (offset from original position)</div>
<p>This paragraph stays in normal flow — the box still occupies its original space.</p>
▶ Try it Yourself

Common uses:

position: absolute

Removes element from flow, positioned relative to nearest positioned ancestor:

Example

HTML
<style>
.parent {
  position: relative;
  width: 300px;
  height: 200px;
  background: #f5f5f5;
  border: 2px solid #333;
}
.badge {
  position: absolute;
  top: 10px;
  right: 10px;
  background: #e74c3c;
  color: white;
  padding: 4px 8px;
  border-radius: 4px;
  font-size: 12px;
}
</style>
<div class="parent">
  <div class="badge">HOT</div>
  <p>Product card content</p>
</div>
▶ Try it Yourself

Key point: If no positioned ancestor exists, absolute positions relative to the viewport.

position: fixed

Fixed in viewport, doesn't scroll with page:

Example

HTML
<style>
.fixed-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  background: #2c3e50;
  color: white;
  padding: 10px 20px;
  z-index: 1000;
}
</style>
<div class="fixed-header">Fixed header — always visible at top</div>
▶ Try it Yourself

Common uses:

position: sticky

Hybrid of relative and fixed — scrolls normally then "sticks" at a threshold:

Example

HTML
<style>
.sticky-nav {
  position: sticky;
  top: 0;
  background: #2c3e50;
  color: white;
  padding: 10px;
  z-index: 100;
}
</style>
<div class="sticky-nav">Sticky nav — scrolls with content, then sticks at top</div>
▶ Try it Yourself

Usage notes:

z-index (Stacking Order)

When elements overlap, z-index controls which appears on top:

Example

HTML
<style>
.box1 {
  position: absolute;
  z-index: 10;
  background: #e74c3c;
  width: 100px;
  height: 100px;
}
.box2 {
  position: absolute;
  z-index: 5;
  background: #3498db;
  width: 100px;
  height: 100px;
  left: 30px;
  top: 30px;
}
</style>
<div class="box1">z-index: 10 (on top)</div>
<div class="box2">z-index: 5 (behind)</div>
▶ Try it Yourself

Note: z-index only works on positioned elements (non-static).

Stacking Context

z-index is compared within the same "stacking context." Each positioned element creates a stacking context — children's z-index only compares within the parent's context.


❓ FAQ

Q What is position: relative used for?
A Most commonly used as a positioning reference for absolute children. Add `position: relative` to a parent (without offset), and `position: absolute` children will position relative to that parent. Without relative on the parent, absolute positions relative to the entire page.
Q fixed positioning doesn't work well on mobile?
A Fixed behaves inconsistently in mobile Safari, especially with keyboard popups or page scrolling. Use `position: sticky` as alternative for some scenarios, or use JavaScript to detect mobile and handle specially.
Q z-index is set high but still blocked?
A z-index only works within the same stacking context. If a parent has z-index, children's z-index only compares within that parent's context — it won't cross parent boundaries. Check if a parent has lower z-index, or if parent has properties like `opacity` that create new stacking contexts.

📖 Summary

📝 Exercises

  1. Create a "product card" with a "HOT" badge in the top-right corner using position: absolute.
  2. Create a fixed bottom navigation bar or copyright notice using position: fixed.
  3. Create a "sticky heading" — section titles that stick to the top when scrolling until the next title pushes it away.
  4. Implement absolute centering of a child element (using absolute + top/left + transform).
100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏