中心位置:固定元素

sat*_*god 399 css css-position centering

我想position: fixed;以一个动态宽度和高度制作一个以屏幕为中心的弹出框.我用过margin: 5% auto;这个.没有position: fixed;它水平中心,但不垂直.添加后position: fixed;,它甚至不会水平居中.

这是完整的集合:

.jqbox_innerhtml {
    position: fixed;
    width: 500px;
    height: 200px;
    margin: 5% auto;
    padding: 10px;
    border: 5px solid #ccc;
    background-color: #fff;
}
Run Code Online (Sandbox Code Playgroud)
<div class="jqbox_innerhtml">
    This should be inside a horizontally
    and vertically centered box.
</div>
Run Code Online (Sandbox Code Playgroud)

如何使用CSS将此框置于屏幕中心?

Bal*_*usC 561

基本上,您需要设置topleft50%居中div的左上角.您还需要设置margin-topmargin-left到div的高度和宽度的负半转向朝格中间的中心.

因此,提供<!DOCTYPE html>(标准模式),这应该做:

position: fixed;
width: 500px;
height: 200px;
top: 50%;
left: 50%;
margin-top: -100px; /* Negative half of height. */
margin-left: -250px; /* Negative half of width. */
Run Code Online (Sandbox Code Playgroud)

或者,如果您不关心垂直居中和旧浏览器(如IE6/7),那么您也可以添加left: 0right: 0具有a margin-leftmargin-rightof 的元素auto,以便具有固定宽度的固定定位元素知道其左侧和正确的抵消开始.在你的情况下:

position: fixed;
width: 500px;
height: 200px;
margin: 5% auto; /* Will not center vertically and won't work in IE6/7. */
left: 0;
right: 0;
Run Code Online (Sandbox Code Playgroud)

同样,如果您关心IE,这仅适用于IE8 +,并且这仅在水平而非垂直居中.

  • 我在http://css-tricks.com/quick-css-trick-how-to-center-an-object-exactly-in-the-center/中找到了这个技巧.但是当我改变宽度和高度时,它不会移动中心.雅,我应该在改变高度和宽度时改变边距 - 左边和顶边. (7认同)
  • Groxx我想你可以使用[overflow property](http://www.w3schools.com/cssref/pr_pos_overflow.asp)在弹出窗口中将滚动条放在div中. (3认同)
  • 仅供参考:这将正确地将事物放在中间位置,但不幸的是你丢失了滚动条 - 即使你滚动,任何被视口剪掉的内容都无法访问,因为固定位置是基于视口而不是页.到目前为止,我发现的唯一解决方案是使用javascript. (2认同)
  • 啊.如果是这样的话,我的意思是浏览器的大小当然是动态的,不知道为什么会出现这个问题.相反,我认为他的意思是弹出尺寸需要是动态的.这就是我的情况所以我使用transform:translate(-50%, - 50%); 除了在IE8上之外,效果很好. (2认同)

Jos*_*ier 281

我想制作一个以动态宽度和高度为中心的弹出框.

这是一种现代方法,用于水平居中具有动态宽度的元素 - 它适用于所有现代浏览器; 支持可以在这里看到.

更新的示例

.jqbox_innerhtml {
    position: fixed;
    left: 50%;
    transform: translateX(-50%);
}
Run Code Online (Sandbox Code Playgroud)

对于垂直和水平居中,您可以使用以下内容:

更新的示例

.jqbox_innerhtml {
    position: fixed;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}
Run Code Online (Sandbox Code Playgroud)

您可能还希望添加更多供应商前缀属性(请参阅示例).

  • 适用于没有指定宽度的元素. (15认同)
  • 这会使Chrome中的图像模糊。 (3认同)
  • @ahnbizcad,这适用于Chrome 61,Safari 11和FireFox 65等桌面浏览器,但不适用于Android 6上的Chrome 61,所接受的答案适用于所有浏览器. (2认同)

Wil*_*ott 131

或者只是添加left: 0right: 0你原来的CSS,这使得类似的行为常规的非固定元件与通常的汽车利润率技术的原理:

.jqbox_innerhtml
{
  position: fixed;
  width:500px;
  height:200px;
  background-color:#FFF;
  padding:10px;
  border:5px solid #CCC;
  z-index:200;
  margin: 5% auto;
  left: 0;
  right: 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,您需要使用有效的(X)HTML DOCTYPE才能在IE中正常运行(无论如何,您当然应该这样做..!)

  • 这应该是公认的答案.我有两个固定位置,一个用于不透明蒙板,另一个用于模态.这是我可以将固定位置模态置于屏幕中心的唯一方法.很棒的回答谁会想到? (7认同)
  • 我建议简化答案,因为一些CSS只与OP有关.你需要的只是位置:固定; 左:0; 右:0; 保证金:0自动; . (7认同)
  • 我所做的就是将这两个属性和一个doctype添加到OP的示例HTML中.然而,在进一步测试时,似乎IE7(或者在compat模式下的8)是问题 - 如果`left`也被设置,它似乎不尊重`right`属性的值!(http://msdn.microsoft.com/en-us/library/cc351024%28VS.85%29.aspx#positioning指出`left`和`right`在IE7中只有"部分"支持).好吧,我承认这个解决方案并不好,如果IE7支持很重要,但是一个很好的技巧要记住未来:) (5认同)
  • 我同意,这应该是公认的答案.它在响应式设计中也能很好地工作,因为它不依赖于宽度. (3认同)
  • 凭什么?父元素是body元素,没有边框.如果你向身体添加了边框属性(?!),那么肯定会受到影响,就像我想象的50%技术一样.我保证你使用给定的参数可以正常工作,只需在我方便的每个浏览器中验证,并且具有不依赖于元素宽度的额外好处. (2认同)

Rom*_*'ai 21

添加一个容器,如:

div {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;
  text-align: center;
}
Run Code Online (Sandbox Code Playgroud)

然后把你的盒子放进这个div就可以了.

  • 内部框需要是`display:inline-block`才能工作.(其他一些显示值也可能有效,例如`table`.) (2认同)

小智 16

只需添加:

left: calc(-50vw + 50%);
right: calc(-50vw + 50%);
margin-left: auto;
margin-right: auto;
Run Code Online (Sandbox Code Playgroud)

  • 它与“position:fixed”一起使用,只要为元素设置“max-width”或“width”。 (2认同)

小智 9

#modal {
    display: flex;
    justify-content: space-around;
    align-items: center;
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
}
Run Code Online (Sandbox Code Playgroud)

在它里面可以是任何具有不同宽度、高度或没有不同的元素。一切都在中心。


Bla*_*ire 6

中心定位元件

当在居中元素内的flexbox 中使用边距时,它不会限制居中元素的宽度小于视口宽度(目前是一个非常好的解决方案)

position:fixed;
top: 0; left: 0;
transform: translate(calc(50vw - 50%));
Run Code Online (Sandbox Code Playgroud)

也用于垂直居中(当高度与宽度相同时)

position:fixed;
top: 0; left: 0;
transform: translate(calc(50vw - 50%), calc(50vh - 50%));
Run Code Online (Sandbox Code Playgroud)


小智 5

left: 0;
right: 0;
Run Code Online (Sandbox Code Playgroud)

无法在 IE7 下运行。

变成

left:auto;
right:auto;
Run Code Online (Sandbox Code Playgroud)

开始工作,但在其他浏览器中它停止工作!所以下面IE7就用这种方式

if ($.browser.msie && parseInt($.browser.version, 10) <= 7) {                                
  strAlertWrapper.css({position:'fixed', bottom:'0', height:'auto', left:'auto', right:'auto'});
}
Run Code Online (Sandbox Code Playgroud)


Bja*_*eCK 5

此解决方案不需要您为弹出div定义宽度和高度.

http://jsfiddle.net/4Ly4B/33/

而不是计算弹出窗口的大小,减去一半到顶部,javascript正在调整popupContainer的大小以填充整个屏幕...

(100%高度,使用显示器时不起作用:table-cell;(需要垂直居中))...

无论如何它工作:)