Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
346 views
in Technique[技术] by (71.8m points)

为什么说相对定位元素经常被用来作为绝对定位元素的容器块呢?

在菜鸟百科上看到:"相对定位元素经常被用来作为绝对定位元素的容器块"为什么这样呢。百度上面没有例子,有没有哪位大佬举个例子呢?
感谢各位大佬的回答。
我做下补充,问题源自前天查看菜鸟教程的原生css3的响应式导航栏,其中dropDown里面并没有使用position:relative;但是子元素使用了position:absolute.但是当父元素dropDown添加position:relative时,子元素就不正确显示了,这使我百思不得其解。
为什么绝对元素的父元素添加position:relative,子元素反而不正确显示呢?
源码

<!DOCTYPE html>
<html>
<head>
<title>下拉菜单实例|菜鸟教程(runoob.com)</title>
<meta charset="utf-8">
<style>
ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
    overflow: hidden;
    background-color: #333;
}

li {
    float: left;
}

li a, .dropbtn {
    display: inline-block;
    color: white;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
}

li a:hover, .dropdown:hover, .dropbtn {
    background-color: #111;
}

.dropdown {
    display: inline-block;
}

.dropdown-content {
    display: none;
    position: absolute;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
}

.dropdown-content a {
    color: black;
    padding: 12px 16px;
    text-decoration: none;
    display: block;
}

.dropdown-content a:hover {background-color: #f1f1f1}

.dropdown:hover .dropdown-content {
    display: block;
}
</style>
</head>
<body>

<ul>
  <li><a class="active" href="#home">主页</a></li>
  <li><a href="#news">新闻</a></li>
  <div class="dropdown">
    <a href="#" class="dropbtn">下拉菜单</a>
    <div class="dropdown-content">
      <a href="#">链接 1</a>
      <a href="#">链接 2</a>
      <a href="#">链接 3</a>
    </div>
  </div>
</ul>

<h3>导航栏上的下拉菜单</h3>
<p>鼠标移动到 "下拉菜单" 链接先显示下拉菜单。</p>

</body>
</html>

image添加positon:relative之后


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

问题解决了
1.绝对定位元素是相对于position不为static的父元素定位的,如果没有就会相对于body定位。因此,为了布局美观,将绝对元素的父元素设定为relative,这样父元素没有偏移,子元素也能定位
2.问题中的导航栏,绝对定位元素有个很有趣的特点,如果仅仅设定了position:absolute,而没有设定top,left或者bottom,right.那么它会呆在父元素的左上角。如果父元素里面还有一个元素(比如p)那么绝对定位元素会老老实实呆在父元素内部,p元素下面。当然,如果你设定了top,left那么绝对定位元素就会相对于body定位。这就是导航栏的答案


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.7k users

...