2013-07-19 62 views
48

我想垂直和水平居中一些内容覆盖图像幻灯片(flexslider)。有一些类似的问题,但我找不到一个令人满意的解决方案,直接适用于我的具体问题。由于FlexSlider的限制,我不能在我的实现中使用img标签上的position: absolute;为什么width:100%不能在div {display:table-cell}上工作?

我几乎有下面的解决方法工作。唯一的问题是我无法获得宽度&高度声明inner-wrapper div与display: table-cell属性。

这是标准行为,还是我错过了我的代码?如果这是标准行为,那么对我的问题最好的解决方案是什么?

HTML

<ul> 
    <li> 
     <img src="#"> 
     <div class="outer-wrapper"> 
      <div class="inner-wrapper"> 
       <h1>My Title</h1> 
       <h5>Subtitle</h5> 
      </div> 
     </div> 
    </li> 
</ul> 

CSS

html, body { 
    margin: 0; padding: 0; 
    width: 100%; height: 100%; 
} 

ul { 
    background: #CCC; 
    height: 100%; 
    width: 100%; 
    list-style-position: outside; 
    margin: 0; padding: 0; 
} 

li { 
    width: 100%; 
    display: table; 
} 

img { 
    width: 100%; 
    height: 410px; 
} 

.outer-wrapper { 
    position: absolute; 
    width: 100%; 
    height: 100%; 
    top: 0; 
    margin: 0; padding: 0; 
} 

.inner-wrapper { 
    display: table-cell; 
    vertical-align: middle; 
    text-align: center; 
    width: 100%; 
    height: 100%; 
} 

注:该中心的内容将超过1元,所以我不能使用的line-height伎俩。

jsFiddle

回答

56

display:table;.outer-wrapper似乎工作...

JSFiddle Link


编辑:两包装使用显示表单元格

我想对你的解答发表评论,但我有太少代表:(反正...

都会响起your answer,好像所有你需要做的就是添加display:table;.outer-wrapper(幻觉记忆?),你可以全心全意地摆脱table-wrapper

JSFiddle

但是,是的,在position:absolute让您将divimg,我也赶紧阅读并认为你不能使用position:absolute所有,但好像你理解了它了。道具!

我没有要发布的源代码,毕竟其99%timshutes的工作,所以请参考他的答案,或者只是用我的jsfiddle链接

更新:一个包装使用Flexbox的

它已经有一段时间,和所有时尚的年轻人使用Flexbox的:

<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;"> 
    stuff to be centered 
</div> 

Full JSFiddle Solution

浏览器支持(source):IE 11+,火狐42+,铬46+,Safari浏览器8+的iOS 8.4+(-webkit-前缀),机器人4.1+(-webkit-前缀)

CSS Tricks: a Guide to Flexbox

How to Center in CSS:输入您希望您的内容如何居中,并输出如何在html和css中执行此操作。未来就在这里!

+0

我需要上面的文本 - 覆盖在图像的顶部。 – timshutes

+0

对不起,我跳了一把枪,看到我的编辑 – woojoo666

+0

需要注意的是,当您只是将内嵌文本与标记对齐时,Flexbox居中会表现得很滑稽 - 然后将其视为“内嵌块”元素。 – Paracetamol

0

How about this? (jsFiddle link)

CSS

ul { 
    background: #CCC; 
    height: 1000%; 
    width: 100%; 
    list-style-position: outside; 
    margin: 0; padding: 0; 
    position: absolute; 
} 
li { 
background-color: #EBEBEB; 
    border-bottom: 1px solid #CCCCCC; 
    border-right: 1px solid #CCCCCC; 
    display: table; 
    height: 180px; 
    overflow: hidden; 
    width: 200px; 
} 
.divone{ 
    display: table-cell; 
    margin: 0 auto; 
    text-align: center; 
    vertical-align: middle; 
    width: 100%; 

} 
img { 
    width: 100%; 
    height: 410px; 
} 
.wrapper { 
    position: absolute; 
} 
+0

该解决方案解决了水平排列,而不是垂直对齐(我也想为中心) 。另外,我坚持认为在表格单元元素中放置一个浮动元素并不是最佳做法。这可能不是真的。 – timshutes

+0

你想要div内容居中? – Hushme

+0

垂直和水平。 – timshutes

12

我想出了这一个。我知道这有助于某个人。

如何垂直&水平居中一个DIV在相对位置的影像

的关键是第三个包装。我会投票任何使用较少包装的答案。

HTML

<div class="wrapper"> 
    <img src="my-slide.jpg"> 
    <div class="outer-wrapper"> 
     <div class="table-wrapper"> 
      <div class="table-cell-wrapper"> 
       <h1>My Title</h1> 
       <p>Subtitle</p> 
      </div> 
     </div> 
    </div> 
</div> 

CSS

html, body { 
margin: 0; padding: 0; 
width: 100%; height: 100%; 
} 

ul { 
    width: 100%; 
    height: 100%; 
    list-style-position: outside; 
    margin: 0; padding: 0; 
} 

li { 
    width: 100%; 
    display: table; 
} 

img { 
    width: 100%; 
    height: 100%; 
} 

.outer-wrapper { 
    width: 100%; 
    height: 100%; 
    position: absolute; 
    top: 0; 
    margin: 0; padding: 0; 
} 

.table-wrapper { 
    width: 100%; 
    height: 100%; 
    display: table; 
    vertical-align: middle; 
    text-align: center; 
} 

.table-cell-wrapper { 
    width: 100%; 
    height: 100%; 
    display: table-cell; 
    vertical-align: middle; 
    text-align: center; 
} 

你可以看到工作jsFiddle这里。

+0

谢谢,这个额外的包装完全帮助我;) –

-1

只需添加最小高度:100%和最小宽度:100%,它将工作。我有同样的问题。你不需要第三个包装

5

我发现'宽度'的值越高,盒子宽度越小,反之亦然。我发现了这一点,因为我之前有同样的问题。所以:

.inner-wrapper { 
    width: 1%; 
} 

解决了这个问题。

+0

欢迎来到StackOverflow!虽然答案总是值得赞赏的,但3年前问这个问题,并且已经有了一个可以接受的解决方案。请尽量避免通过向他们提供答案来'碰撞'问题,除非问题还没有被标记为已解决,或者您找到了一个更好的替代方法来解决问题:) –

1

欢迎2017年这几天会使用vWvH做的伎俩

html, body { 
 
    margin: 0; padding: 0; 
 
    width: 100%; height: 100%; 
 
} 
 

 
ul { 
 
    background: #CCC; 
 
    height: 100%; 
 
    width: 100%; 
 
    list-style-position: outside; 
 
    margin: 0; padding: 0; 
 
} 
 

 
li { 
 
    width: 100%; 
 
    display: table; 
 
} 
 

 
img { 
 
    width: 100%; 
 
    height: 410px; 
 
} 
 

 
.outer-wrapper { 
 
    position: absolute; 
 
    width: 100%; 
 
    height: 100%; 
 
    top: 0; 
 
    margin: 0; padding: 0; 
 
} 
 

 
.inner-wrapper { 
 
    display: table-cell; 
 
    vertical-align: middle; 
 
    text-align: center; 
 
    width: 100vw; /* only change is here "%" to "vw" ! */ 
 
    height: 100vh; /* only change is here "%" to "vh" ! */ 
 
}
<ul> 
 
    <li> 
 
     <img src="#"> 
 
     <div class="outer-wrapper"> 
 
      <div class="inner-wrapper"> 
 
       <h1>My Title</h1> 
 
       <h5>Subtitle</h5> 
 
      </div> 
 
     </div> 
 
    </li> 
 
</ul>

相关问题