Skip to content

基础知识

随着h5的应用范围越来越广, UI也随着发生了翻天覆地的变化, 这就导致了, 不是所有的布局都是规规矩矩的这种布局

有的需要一个元素根据一个参照物, 偏移指定距离来显示:

如 图标和图片的位置:

注:除了静态定位以外的其他定位会让元素脱离文档流

定位类型

取值说明
static默认行为, 参考文档流
relative相对定位
absolute绝对定位
fixed固定定位
sticky粘性定位

参照物

参照物是根据定位类型来决定的, 比如:

  • 绝对定位是以 第一个相对定位的祖先元素 作为参照物
  • 相对定位是以 元素自身在正常文档流中的位置 进行定位的
  • 固定定位就是以 浏览器的可视区域 来做参照物
  • 粘性定位是以 元素所在的滚动容器 来做参照物

偏移距离

属性说明
top参照物上边偏移量
bottom参照物下边偏移量
left参照物左边偏移量
right参照物右边偏移量

静态定位 static

元素默认的定位方式就是静态定位, 也就是说, 在正常文档流钟的元素都是静态定位

相对定位 relative

css
#app {
  border: 1px solid blue;
}

.box {
  width: 100px;
  height: 100px;
  background: #f00;
  position: relative;
  top: 20px;
  left: 20px;
}
html
<!doctype html>
<html lang="zh-cn">
  <head>
    <title>JavaScript</title>
    <link rel="stylesheet" type="text/css" href="./styles.css" />
  </head>
  <body>
    <div id="app">
      <div class="box"></div>
    </div>
  </body>
</html>

绝对定位 absolute

css
#app {
  border: 1px solid blue;
  margin: 20px;
}

.outer {
  width: 100px;
  height: 100px;
  position: relative;
  top: 0;
  left: 0; /* 横向,纵向的位置相当于和文档流的位置一样 */
  background-color: #f00;
  /* 
    如果注释: position: absolute;
    那么 div.inner 在绝对定位的时候, 参照物就会继续向上寻找, 
    直到找到一个元素为相对定位的祖先元素时, 以这个祖先元素为
    参照物, 如果没有找到, 那么就以浏览器的可视窗口为参照物
  */
}

.inner {
  position: absolute;
  width: 20px;
  height: 20px;
  top: 15px;
  left: 30px;
  background-color: #0f0;
}
html
<!doctype html>
<html lang="zh-cn">
  <head>
    <title>JavaScript</title>
    <link rel="stylesheet" type="text/css" href="./styles.css" />
  </head>
  <body>
    <div id="app">
      <div class="outer">
        <div class="inner"></div>
      </div>
    </div>
  </body>
</html>

固定定位 fixed

css
.high-box {
  height: 5000px;
  width: 100%;
  background-color: #ccc;
}

#app {
  border: 1px solid blue;
  width: 100px;
  height: 100px;
  position: fixed;
  top: 20px;
  left: 20px;
}
html
<!doctype html>
<html lang="zh-cn">
  <head>
    <title>JavaScript</title>
    <link rel="stylesheet" type="text/css" href="./styles.css" />
  </head>
  <body>
    <div class="high-box"></div>
    <div id="app"></div>
  </body>
</html>

黏性定位 sticky

css
#app {
  width: 100%;
  height: 300px;
  border: 1px solid #000;
  overflow: auto;
}

.contents {
  height: 1000px;
  background-color: #ccc;
}

.sticky-box {
  width: 500px;
  height: 100px;
  background-color: #f00;
  position: sticky;
  top: 10px;
  left: 10px;
}
html
<!doctype html>
<html lang="zh-cn">
  <head>
    <title>JavaScript</title>
    <link rel="stylesheet" type="text/css" href="./styles.css" />
  </head>
  <body>
    <div id="app">
      <div class="contents">some contents</div>
      <div class="sticky-box"></div>
      <div class="contents">some contents</div>
    </div>
  </body>
</html>

纵向层级 z-index

因为一旦定位就会脱离文档流, 那么如果两个元素定位的位置重合, 那么该显示哪个元素呢?

如果元素重叠在一起, 可以使用 z-index 控制元素的上下层级, 数值越大越在上面

这个不好描述, 直接看图吧, 一图胜千言

Released under the MIT License.