母元素是absolute时,子元素的排列为什么会受到影响。

问题描述

只是改变了父元素的position属性,子元素的排列方式就改变了。

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="https://cdn.bootcss.com/font-awesome/5.8.1/css/all.css">

    <style>
        body {
            margin: 0;
            padding: 0;
            background: #2ecc71;
        }

        .middle {
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%)
        }

        .sm-menu {
            position: relative;
        }
   
    </style>
</head>

<body>

    <div class="middle">
        <div class="sm-menu">
            <a href="#"> a</a>
            <a href="#"> q</a>
            <a href="#"> a</a>
            <a href="#"> q</a>
            <a href="#"> a</a>
            <a href="#"> q</a>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Amet aliquam consectetur enim eos perspiciatis architecto quidem veritatis neque vero eum? Tempora, omnis nihil. Numquam sit laborum, asperiores rem eveniet architecto.
        </div>


    </div>

</body>

</html>

图片1
图片1母元素设置为absolute,子元素竖着排列
图片2
图片2设置为absolute,子元素横着排列
图片3
图片3设置为absolute,最后加一个长文字,元素横着排列,而且文字会换行。
图片4
图片4设置为relative,最后加一个长文字,元素横着排列,但是换行的位置absolute时候不一样。

阅读 2.6k
2 个回答

因为没有宽度,给父级或者子集设置宽度就会发现

先明确两个概念:

  • absolute 绝对定位脱离文档流 relative 相对定位 不脱离文档流
  • absolute 相对的是最近的定位父元素定位,relative 相对自身定位

.middle 这个盒子一直就是相对于 body 定位,所以会一直处于垂直居中位置

图一和图三是一样的,都是相对 .middle 这个盒子定位,脱离文档流。内容撑开宽度和高度。区别就是单词长度不同,撑开的宽度也不一样。至于为什么换行,就是因为a标签的换行还有 a 标签里面那个空格
图二和图四是一样的,都是相对自身定位,没有脱离文档流。所以,盒子这里的宽度是由 body 决定的。至于为什么没有换行,是因为 a 标签是行内元素

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题