2013-07-21 17 views
2

我在这里搜索并得到了很多答案,但他们似乎并没有工作。我所拥有的是一个div图像填充div(100%使其响应)。现在我想在图片上放一些信息,所以我用了一篇文章。但我的问题是,当我缩小页面时,无法让我的文章保持在图像的中心(水平和垂直)。它在水平方向居中,但是垂直居中,破坏下面的部分(尽管我还没有研究过它们)。任何解决方案是赞赏。谢谢。将div对准图像

HTML:

<div class="featuredpost"> 
    <img src="images/forest.jpg"> 

    <div class="featured"> 
     <article> 
      <header> 
       <h1><a href="#">Featured Post Goes Here</a></h1> 
      </header> 

      <footer> 
       <p class="postedby">Postedby User</p> 
      </footer> 

      <content> 
       <p>"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p> 
       <p>"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p> 
      </content> 

      <button type="button" onclick="alert('Hello world!')">Read More</button> 
     </article> 
    </div> 
</div> 

CSS:

.featuredpost{ 
width: 100%; 
margin: 0 auto; 
} 

.featuredpost img{ 
    width:100%; 
    height: auto; 
    position: relative; 
} 

.featured{ 
    margin: 0 auto; 
    width: 80%; 
    background-color: rgba(0,0,0,0.5); 
    color: #fff;  
    top:50%; 
    position: absolute; 
    left: 10%; 
} 

.featured article{ 
    padding: 10px 30px; 
} 
+0

简短回答:在CSS中垂直居中很困难。虽然有几种可能的解决方法,但CSS并没有真正的**方法。 JavaScript解决方案存在,虽然... – Stobor

+0

是否有一个原因,你为什么不把图像设置为div的背景? – sanjaypoyzer

+0

@sanjaypoyzer是的,我想图像改变(排序滑块)。 – Delete

回答

0

你可以设置HTML /身体表现得像一个表单元格。

http://codepen.io/anon/pen/Iplbv

html { 
    display: table; 
    height: 100%; 
    width: 100%; 
    background-size: cover; 
} 
body { 
    display:table-cell; 
    vertical-align:middle; 
} 
.featured{ 
    margin: 0 auto; 
    width: 80%; 
    background-color: rgba(0,0,0,0.5); 
    color: #fff; 
    position:relative; 
} 
.featuredimg { 
    position:absolute; 
    top:0; 
    left:0; 
    width:100%; 
} 

即使作为背景设置图像:

http://codepen.io/anon/pen/wKrae

html { 
    display:table; 
    height:100%; 
    width:100%; 
    background:url(images/forest.jpg); 
    background-size:cover; 
} 
body { 
    display:table-cell; 
    vertical-align:middle; 
} 
+0

是的,你仍然可以如果图像不断设置在绝对位置:)。 Bg是一个建议,因为我不知道图像有一个目的:) http://codepen.io/anon/pen/Iplbv –

0

我有同样的问题,因为你,我要去这一点。

  1. 您有背景图像的DIV(表)
  2. 持有标题(表单元格)
  3. 一个方框中心#2(表)
  4. 实际的内部的箱标题内容(可变)

下面是一个伪代码示例,所以你可以看到嵌套

<1 table> 
    <3 table> 
     <2 cell>title</2> 
    </3> 
    </1> 

由于#2里面的#3,#3#1内你就会得到一个表的表内,因此您可能还需要大约#3另一个包装为表格单元居中#3

article header h2:after{ 
 
content: ""; 
 
display: block; 
 
border-bottom: 1px solid #3cc19c; 
 
margin: 1em 45%; 
 
} 
 
.image-box { /* BACKGROUND FOR HEADER */ 
 
background-image: url(https://placeholdit.imgix.net/~text?txtsize=83&txt=1000%C3%97500&w=1000&h=500); 
 
background-size: cover; 
 
background-repeat: no-repeat; 
 
display: table; 
 
width: 100%; 
 
} 
 
.title-container-frame{ /* BOX FOR TITLE TO SIT IN */ 
 
width: 300px; 
 
height: 300px; 
 
background: white; 
 
display: table; 
 
outline: 4px double white; 
 
margin: 100px auto; 
 
} 
 
.title-container{ /* HOLDS THE TITLE TO BE CENTERED */ 
 
display: table-cell; 
 
vertical-align: middle; 
 
} 
 
article{ 
 
    text-align:center; 
 
}
<article> 
 
\t <header> 
 
\t \t <div class="image-box"> 
 

 
\t \t \t \t <div class="title-container-frame"> 
 
\t \t \t \t \t <div class="title-container"> 
 
\t \t \t \t \t \t <h2>Meet Shawn</h2> 
 
\t \t \t \t \t \t <h3>A stand up guy</h3> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t </div> 
 
\t \t </div> 
 
\t </header> 
 
\t <div class=bit-2> 
 
\t \t <hr> 
 
\t \t <p>"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p> 
 
\t \t <p>Candid wedding photogrpahy is my passion. I can't imagine doing anything else for a living. The best wedding photography captures raw emotional moments that words cannot capture.</p> 
 
\t \t <p>True-to-life imagery is the new direction of wedding photography. We provides beautiful images to our clients on their wedding day while everyone is chomping at the bit to see them.</p> 
 
\t \t <p>"Lorem derit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."</p> 
 
\t \t <p>Please feel free to contact me <a>[email protected]</a> I would love to answer any questions you might have.</p> 
 
\t </div> 
 
</article>

https://jsfiddle.net/0qa2g4b5/ 我会瓜分图像到所有具有应对不断变化的屏幕尺寸,然后再拿出你的CSS解决方案的部分。这就是我上面所做的。

这将取决于您希望最终结果如何响应较小屏幕的细节。

最有可能的最优雅的解决方案是@media css来调整你的风格,当你认为他们停止看起来不错。

容易一些不太优雅的解决方案都似乎有缺点,这里有一些你可以考虑和缺点,所以你知道,如果你可以忍受:

如果背景图像是纯粹的设计和可夹你可以使用background-size: cover;如果你需要背景宽度来占用div的100%并仍然显示整个图像的使用background-size:contain在某些情况下遮盖了你的图像。

不能同时包含灵活大小的背景div,并保持一个固定高度的内部容器,如标题框,因为在某些时候,如果从横向纵横比更改标题框的高度将超过背景像16:9到一个垂直持有的iphone长宽比9:16。

所以,如果你想让它完全调整这样的标题文字与您可以对文本做font-size:1em容器上和font-size:inherit或使用在任一箱vhvw测量抱着标题或文本本身来调整股利调整大小基于屏幕尺寸。您遇到的问题是文本在某些时候会变得太小而无法阅读,或者在桌面上看起来会很大。这就是为什么我会推荐使用: @media (min-width: 50em) and (max-width: 68.75em) {/*CSS for medium screen*/} @media(max-width:50em){/ ...} /}` 然后进入并调整屏幕大小并对手机和较小屏幕进行任何更改开发模式有一个这样的工具)

0

HTML

<div id="container"> 
    <div id="overlay"></div> 
    <img id="img" /> 
</div> 

CSS

#container { 
    position: relative; 
} 
#overlay, #img { 
    position: absolute: 
    top: 0px; left: 0px; 
} 
#overlay { 
    z-index: 5; 
}