【问题标题】:Best way to center div in responsive div在响应式 div 中居中 div 的最佳方式
【发布时间】:2014-03-10 17:51:06
【问题描述】:

我已经尝试了几个小时在具有max-widthmax-height 但会响应的父 div 中垂直和水平居中一个没有特定宽度或高度的 div。我查看了 CSS 和 JS/jQuery 选项,但都没有正常工作。

As you can see,这是视频的缩略图预览。当处于normal 状态时,它只显示缩略图,上面有一个播放图标。在hover 状态下,它将播放按钮更改为橙色,显示标题,并在缩略图上方有一个黑色透明覆盖层。

现在,如果网站没有响应,这将很容易使用 CSS。但是,随着浏览器宽度的减小,缩略图的大小也会减小。

这是我正在使用的 HTML:

<article class="movie"><a href="#">

    <div class="movie-overlay">

        <div class="movie-play"></div>

        <h2 class="movie-title">Title Goes Here</h2>

    </div> <!-- end .movie-overlay -->

    <div class="movie-thumb"><img src="thumbs/thumb.jpg"/></div>

</a></article> <!-- end #post- -->

这是我的 CSS:

.movie-archive .movie {
    width: 50%;
    height: auto;
    max-width: 480px;
    position: relative;
    overflow: hidden;
    float: left;
}

.movie-archive .movie .movie-overlay {
    width: 100%;
    height: 100%;
    position: absolute;
    text-align: center;
}

.movie-archive .movie:hover .movie-overlay {background: rgba(0, 0, 0, 0.6);}

.movie-archive .movie .movie-play {
    background: url("images/play-icon@2x.png") no-repeat center 0;
    background-size: 94px 190px;
    width: 100%;
    height: 95px;
}

.movie-archive .movie:hover .movie-play {background-position-y: -95px;}

.movie-archive .movie .movie-title {
    font-size: 17px;
    letter-spacing: -0.01em;
    font-weight: 700;
    color: #ffffff;
    display: none;
    padding: 10px 50px 0;
}

.movie-archive #latest-top.movie:hover .movie-title, .movie:hover .movie-title {display: block;}

.movie-archive .movie .movie-thumb img {
    width: 100%;
    height: 100%;
    display: block;
}

我尝试了各种方法,从添加另一个 div 和使用 display: table 技巧到将填充添加为百分比,以及使用 JS。似乎没有任何效果。有没有人有什么建议?我真的很感激。谢谢!

这并不重要,但我在这个网站上使用 WordPress。

【问题讨论】:

标签: javascript jquery html css


【解决方案1】:

你想要居中的容器和元素应该有这样的属性:

.movie-archive .movie {
    width: 50%;
    height: auto;
    max-width: 480px;
    position: relative;
    overflow: hidden;
    float: left;
}

.movie-archive .movie .movie-overlay {
    width: 100%;
    height: 100%;
    left: 50%;
    margin-left: -50%; //half of width
    top: 50%;
    margin-top: -50%; //half of height
    position: absolute;
    text-align: center; //only if you want the text to be centered
}

来源:http://designshack.net/articles/css/how-to-center-anything-with-css/

【讨论】:

  • This 是当我用你的代码替换我的代码时发生的。知道为什么?
  • 对不起,愚蠢的错字。边距应该是-50%
  • 那也行不通。 Here's what it looks like。请注意,我暂时禁用了overflow: hidden,以便您查看它的作用。似乎当我将代码编辑为top: 89% 时它可以工作。知道为什么吗?
  • 我不知道为什么会这样。但目前看来,您正在以错误的方式为中心。您应该尝试将播放按钮置于叠加层的中心,而不是将叠加层置于电影之上。在我链接的文章中搜索“With Fluid width”,您可能会自己弄清楚
【解决方案2】:

试试这个:

$(document).ready(function() {w = $(window).width();
h = $(window).height();
jQuery.each($('.centerony'), function(i, val) {
lung = $(val).css('height');
a = (h * 0.5) - ((parseInt(lung)) * 0.5);
$(val).css('position', 'absolute');
$(val).css('top', a + 'px')
});
jQuery.each($('.centeronx'), function(i, val) {
larg = $(val).css('width');
a = (w * 0.5) - ((parseInt(larg)) * 0.5);
$(val).css('position', 'absolute');
$(val).css('left', a + 'px')
});

$(window).resize(function() {
k = $(window).width();
z = $(window).height();
jQuery.each($('.centeronx'), function(i, val) {
larg = $(val).css('width'); 
a = (k * 0.5) - ((parseInt(larg)) * 0.5);
$(val).css('left', a + 'px')
})
jQuery.each($('.centerony'), function(i, val) {
lung = $(val).css('height');
a = (z * 0.5) - ((parseInt(lung)) * 0.5);
$(val).css('position', 'absolute');
$(val).css('top', a + 'px')
});
});
});

添加到你想要居中的元素'centerony'和'centeronx'类,并设置父级的div(具有max-width和max-height且位置为:relative的那个。它应该可以工作。

<div id="outdiv" class="outside" style="position:relative">

<div class="in_div centerony centeronx">I am centered!</div>

</div>

您必须使用包含 jQuery 才能使用它。 :)

注意 -------- 我编写的代码根据窗口的大小而不是父级的 div 大小工作。 如果您想适应您的情况,请更改 vars w、h、k、z 的值,使其值与父级的 div 大小而不是窗口大小相关。例如w = $('#outdiv').width() 而不是w = $(window).width();

【讨论】:

  • 由于某种原因,topleft 的值太大了。 See this image。谢谢!
  • 你改变了变量 w,h,k,z 吗? @康纳
  • 不,即使你写了“注意”,我也没有。哎呀! :) 我只是将它从 window 更改为 '.movie' 并没有运气。知道为什么吗?
  • 如果你改变了 w、h、k、z 并且你将你父母的 div 位置设置为相对,它应该可以工作。尝试使用 id 而不是类来获取父级的 div,因为如果您多次使用此类可能会出现问题。
  • 它必须是一个类,因为元素出现了不止一次。
猜你喜欢
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 2014-07-08
  • 2015-06-29
  • 2017-04-01
  • 1970-01-01
相关资源
最近更新 更多