在任何浏览器维度的中间居中垂直和水平可扩展的 div [重复]

Posted

技术标签:

【中文标题】在任何浏览器维度的中间居中垂直和水平可扩展的 div [重复]【英文标题】:Center a both vertical and horizontal scalable div in the middle of any browser dimension [duplicate] 【发布时间】:2017-03-29 07:12:42 【问题描述】:

我试图在任何尺寸页面的中心放置一个圆形 div,并在调整浏览器大小时使其垂直和水平响应。

到目前为止,我已经设法将 div 放在页面中间,但它只是水平响应。如果可能的话,我需要让它也垂直响应。

你能推荐点什么吗?

这是代码和小提琴https://jsfiddle.net/6g2ccpar/

    <div id="login">
      <div class="login-box">
        <h1 class="login-box__header">
          Login
        </h1>
        <form class="login-box__form-usr-details" action="/somesearchaction" name="search" method="get">
          <label for="user-email">Enter your email </label>
          <input title="Enter user email" placeholder="Enter your email" name="email" id="user-email" type="text"></input>

          <label for="user-password">Enter your password </label>
          <input title="Enter user password" placeholder="Enter your password" name="password" id="user-password" type="text"></input>

          <span class="forgot-pwd btn btn--white">Forgot password?</span>
          <span class="submit btn btn--blue">Login</span>
        </form>
      </div>
    </div>



#login
    background: red;

    .login-box
        background: green;
        width: 60%;
        height: 60%;
        overflow: auto;
        margin: auto;
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        right: 0;
        z-index: 9999;
        border-radius: 50%;

        &__header
                font-size: 20px
        

        &__form-usr-details
                font-size:25px;
        
    

【问题讨论】:

您可以添加此类并为#login Div 元素指定特定高度。 .absolute-center 边距:自动;位置:绝对;顶部:0;左:0;底部:0;右:0; 我不确定我是否在关注你。您的意思是添加“.absolute-center”类作为#login div 的子类? 看看这个,jsfiddle.net/devesh_dc/dzyvmt0o 感谢您的示例,但这不是我想要的。我已经将 div 居中,我的问题是如何在调整浏览器大小时使其垂直和水平完全响应。有意义吗? 如果#loginbox 具有特定高度而不是使用 top:50% 和 margin-top:-height_of_#loginbox 或使用 css3 变换动画。 【参考方案1】:

尝试将此应用于您的 .login-box:

    width: 60vw;
    height: 60vw;

这应该使您的登录框 div 的高度和宽度都相对于视口的宽度。

【讨论】:

【参考方案2】:

您可以使用 flex-box 将项目水平和垂直居中。 您还必须将body 的高度设置为 100%:

index.html

<body>
    <div id="login">
        …
    </div>
</body>

style.css

html 
    height: 100%;


body 
    align-items: center;
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-height: 100%;

【讨论】:

不幸的是它必须与 IE9 兼容。所以我排除了 Flex :/ 还是谢谢! 你可以使用 polyfill:github.com/jonathantneal/flexibility 我更喜欢使用在现代浏览器中具有 solic 实现的最新 Web 技术,并在旧浏览器中使用 polyfill / shim。如果您不喜欢这种方法,可以使用 table 属性来解决您的问题 谢谢,很有用。【参考方案3】:

body,html
  height:100%;
  width:100%;

.container
  width:100%;
  height:100%;
  position:relative;
  background:blue;

.round-div
  position: absolute;
  top: 50%;
  left: 50%;
  width: 200px;
  height: 200px;
  border-radius:50%;
  background: red;
  transform: translateX(-50%) translateY(-50%);
<div class="container">
  <div class="round-div">
  </div>
 </div>

添加圆形 div 最高:50%; 左:50%; 变换:translateX(-50%) translateY(-50%);

我希望你明白逻辑

【讨论】:

解释您的解决方案,不鼓励仅使用代码的答案。【参考方案4】:

你可以使用tabledisplay属性(从IE8理解)

https://jsfiddle.net/6g2ccpar/3/或下面的sn-p进行测试

html 
  height: 100%;
  width: 100%;
  display: table;

body 
  display: table-cell;
  vertical-align: middle;
  text-align: center;

#login 
  background: red;
  display: inline-table;
  width: 50%;
  max-width:90vh; /* remove this and find out resizing window's height */
  white-space:nowrap;/* keeps pseudo & login-box side by side */

#login:before 
   content:'';
   display:inline-block;
   width:0;
   padding-top:100%;/* will take parent's width for reference to draw a square */
   vertical-align:middle;/* along login-box */
  
.login-box 
  background: green;
  border-radius: 50%;
  padding:0.5em 1px;
  display:inline-block;
  vertical-align:middle;/* along pseudo :before */
  white-space:normal; 

.login-box__header 
  font-size: 20px

.login-box__form-usr-details 
  padding: 0 1em;/* stay away from sides */
  font-size: 25px;

input, span[class] 
  display:block;
  margin:auto;

label 
  white-space: nowrap;/* evntually , looks better */
<div id="login">
  <div class="login-box">
    <h1 class="login-box__header">
          Login
        </h1>
    <form class="login-box__form-usr-details" action="/somesearchaction" name="search" method="get">
      <label for="user-email">Enter your email</label>
      <input title="Enter user email" placeholder="Enter your email" name="email" id="user-email" type="text" />

      <label for="user-password">Enter your password</label>
      <input title="Enter user password" placeholder="Enter your password" name="password" id="user-password" type="text" />

      <span class="forgot-pwd btn btn--white">Forgot password?</span>
      <span class="submit btn btn--blue">Login</span>
    </form>
  </div>
</div>

【讨论】:

感谢您的示例...它不是响应式的,不是吗?试图调整浏览器的大小,但没有。 @Beppe 你是什么意思?如此少的内容几乎可以在任何屏幕上显示 您好!我的意思是它没有响应......它确实停留在中间,但是在调整大小时它不会缩放......这有意义吗? @Beppe ,是与否,应该重新调整什么?文本和输入?字体大小 ?还是只是容器? @Beppe 是这样的吗? jsfiddle.net/6g2ccpar/4!?

以上是关于在任何浏览器维度的中间居中垂直和水平可扩展的 div [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何让DIV水平和垂直居中

怎么让span在div中垂直居中

使元素相对于窗口或父元素水平垂直居中的几种方法

HTML CSS中如何实现DIV中的图片水平垂直居中对齐

在各浏览器和各分辨率下如何让div内的table垂直水平居中?

调整大小以适合 div 中的图像,并水平和垂直居中