div定位||为啥 margin: 属性还不起作用 left: 起作用?

Posted

技术标签:

【中文标题】div定位||为啥 margin: 属性还不起作用 left: 起作用?【英文标题】:Div positioning|| Why does margin: property doesn't work yet the left: works?div定位||为什么 margin: 属性还不起作用 left: 起作用? 【发布时间】:2016-04-08 21:25:19 【问题描述】:

编辑:感谢您对位置的解释,正如我所说,我只是想弄清楚为什么 margin 不起作用而 position:left 是。 所以据我了解,基本上你只能使用静态元素的边距定位,其他任何你必须使用的位置:x。对吧?

我很确定这是非常基础的东西,但我刚刚开始学习定位,我正在修改教程代码,我似乎无法掌握这些 div 内部 div 的行为方式。

根据我一直在阅读的内容,由于没有具有绝对位置的父元素,这段代码不应该使内框边距相对于主体移动吗?如果我使用“left:”属性而不是“margin:”,它就是这样做的。

为了澄清,我只是想了解为什么#inner 相对于#outer 定位,而不管分配给#outer 的位置值如何。

div 
  height: 100px;
  width: 100px;
  border-radius: 5px;
  border: 2px solid black;


#inner 
  height: 75px;
  width: 75px;
  background-color: #547980;
  position: absolute;
  margin-left: 20px;


#outer 
  height: 1500px;
  width: 150px;
  background-color: #45ADA8;
  position: static;
  margin-left: 100px;
<div id="outer">
  <div id="inner"></div>
</div>

结果图片

【问题讨论】:

【参考方案1】:

位置属性

position 属性指定用于元素的定位方法的类型。

四个不同的position 值:

static

relative

fixed

absolute

How Do They Differ?

1.如果您使用的是static。 默认情况下,html 元素是静态定位的。

Static 定位元素不受topbottomleftright 属性的影响。

.static 
  position: static;
  border:solid 1px red;
&lt;div class="static"&gt;Hello i m static position &lt;/div&gt;

2.如果您使用的是relative

设置相对定位元素的toprightbottomleft 属性将导致它从正常位置调整。

.relative1 
  position: relative;
  border:solid 1px red;

.relative2 
  position: relative;
  top: -20px;
  left: 20px;
  background-color: white;
  width: 500px;
  border:solid 1px black;
<div class="relative1"> hi i m Relative 1</div>
<div class="relative2">hi i m Relative 2</div>

3.如果您使用的是fixed

带有position: fixed; 的元素定位到视口relative,这意味着即使页面滚动,它也始终保持在同一个位置。 toprightbottomleft 属性用于定位元素。

fixed 元素不会在页面中它通常所在的位置留下空隙。

.fixed 
  position: fixed;
  bottom: 0;
  right: 0;
  width: 200px;
  background-color: gray;
&lt;div class="fixed"&gt;HI i m fixed div &lt;/div&gt;

4.如果您将absoluterelative 一起使用。

absolute 是最棘手的位置值。 absolute 的行为类似于 fixed,除了相对于最近的定位祖先而不是 relative 相对于视口。如果一个绝对定位元素没有定位的祖先,它使用文档body,并且仍然随着页面滚动而移动。请记住,“定位”元素的位置是除static 之外的任何元素。

.relative 
  position: relative;
  width: 600px;
  height: 400px;
  border:solid 1px red;

.absolute 
  position: absolute;
  top: 120px;
  right: 0;
  width: 300px;
  height: 200px;
  border:solid 1px gray;
<div class="relative">
<div class="absolute"> I  m Absolute div </div>
</div>

Source by

【讨论】:

感谢您对位置的解释,正如我所说,我只是想弄清楚为什么 margin 不起作用而 position:left 是。所以据我了解,基本上你只能使用静态元素的边距来定位,其他任何你必须使用 position:x 的东西。对吗? @TylerC 如果你使用绝对位置而不是使用 top, left, right, bottom 最好留边距。 @TylerC 如果您使用绝对位置而不是窗口而不是您的 body 或 div 。如果您习惯于相对而不是绝对意味着用于父 div 的相对值比用于子绝对值的值比它的边距或顶部位置它的父 div 请参阅我的示例以获得更好的解释。【参考方案2】:

这是因为您没有为绝对 div 赋予顶部/左侧值。

给左位置将表现得像绝对位置。

#inner 
    height: 75px;
    width: 75px;
    background-color: #547980;
    position: absolute;
    margin-left: 20px;
  left:10px;

Fiddle

如果您的绝对 div 具有顶部/底部和左/右是自动的,那么它将表现得像静态位置。

您可以查看更多详情here

【讨论】:

以上是关于div定位||为啥 margin: 属性还不起作用 left: 起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥宽度属性在我的桌子上不起作用?

css 为啥有时MARGIN 不起作用,

css代码里的margin为啥不起作用

css:为啥我用div来定位没起作用了,id没有错,只是完全没反应,请问可能的原因都有哪些

div里三个div排列对齐问题。

css 为啥给span加vertical-align: middle不起作用?