2016-11-27 84 views
0

我有一个特定的设置,允许并排设置4个图像并以列表格式响应。无法在图像上居中文字

我想要有一个标题,背景匹配与文本相同的高度,并延伸到图像的宽度,以垂直居中居中并且在居中时水平居中。

我已经阅读了大量文章,其中绝对位置/相对位置被使用,但是我无法在我的代码中使用它。我尝试了垂直对齐,文本中心,顶部,左侧,宽度,但文本仍然保留在图像的底部。

这里是我点击了链接的约10%:

  1. Horizontal centering text over image via CSS
  2. Responsive image with text overlay
  3. Centering things
  4. Text over image without absolute position
  5. How to put text over an image without absolute positioning or setting the image as backbround
  6. Why can't an <ul> (with absolute position) inside a <li> (with relative position) auto size?
  7. HTML: center image caption relative to image?

我在很长的帖子(它的所有代码,以便只跳过代码到的jsfiddle)抱歉。

我currrent设置Here is a link to the jsFiddle

HTML:

<ul class="tab"> 
    <li> 
     <a class="tabimg gq-module-hover tilt" tabindex="0" data-about="Newborns"><img src="http://debora.com.au/wp-content/uploads/2016/11/DEB_0095.jpg" alt="">Newborns</a> 
    </li> 
    <li> 
     <a class="tabimg gq-module-hover" tabindex="1" data-about="Children"><img src="http://debora.com.au/wp-content/uploads/2016/11/DEB_8252.jpg" alt="">Children</a> 
    </li> 
    <li> 
     <a class="tabimg gq-module-hover" tabindex="2" data-about="Families"><img src="http://debora.com.au/wp-content/uploads/2016/11/DEB_8607.jpg" alt="">Families</a> 
    </li> 
    <li> 
     <a class="tabimg gq-module-hover" tabindex="3" data-about="Lifestyle"><img src="http://debora.com.au/wp-content/uploads/2016/11/DEB_6620.jpg" alt="">Lifestyle</a> 
    </li> 
</ul> 

CSS:

/* Style the list */ 
ul.tab { 
    whitespace: nowrap; 
    width: 100%; 
    list-style-type: none; 
    margin: 0; 
    padding: 0; 
    overflow: hidden; 
    text-align: center; 
} 

/* Style the a tags */ 
ul.tab li a { 
    display: inline-block; 
    color: black; 
    text-align: center; 
    text-decoration: none; 
    transition: 0.3s; 
    font-size: 17px; 
    -webkit-filter: grayscale(50%); /* Safari 6.0 - 9.0 */ 
    filter: grayscale(50%); 
} 

/* Change background color of links on hover */ 
ul.tab li a:hover { 
    background-color: #000000; 
    -webkit-transform: scale(1.1, 1.1); 
    transform: scale(1.1, 1.1); 
    box-shadow: 1px 5px 14px rgba(0, 0, 0, 3); 
    z-index: 1; 
    -webkit-filter: grayscale(0%); /* Safari 6.0 - 9.0 */ 
    filter: grayscale(0%); 
} 


/* Create an active/current tablink class */ 
ul.tab li a:focus, .active { 
    background-color: #ccc; 
    -webkit-filter: grayscale(0%); /* Safari 6.0 - 9.0 */ 
    filter: grayscale(0%); 
} 


/* Style the tab content */ 
.tabcontent { 
    display: none; 
    padding: 6px 12px; 
    border: 1px solid #ccc; 
    border-top: none; 
} 


/*style the images*/ 
.tabimg { 
    box-sizing: border-box; 
} 

.tab { 
    font-size: 0; /* To get rid of the space below the li tags */ 
    display: inline-block; 
    /* change this to display: block; in order to make the container as wide as the page is */ 
    box-sizing: border-box; 
    overflow: hidden; 
    /* to clear the float */ 
} 

.tab li { 
    box-sizing: border-box; 
    float: left; 
    width: 25%; 
} 

.tab li a { 
    width: 100%; /* remove this if you dont want the images to resize if the container is as wide as the page (if .tab is display: block;*) */ 
} 

.tab li img { 
    width: 100%; 
    display: block; 
    box-sizing: border-box; 
} 

的Javascript

/* Simple foreach as the js foreach method is not supported by IE9 and you may want to support it. 
CanIUse: http://caniuse.com/#search=foreach */ 
function simpleForEach(array, callback) { 
    for (var i = 0; i < array.length; i++) { 
      callback(array[i], i); 
    } 
} 

/* Parts of this can be done with pure css. 
This function should executed on load: 
    document.addEventListener("load", load); 
or on DOMContentLoaded: 
    document.addEventListener("DOMContentLoaded", load); 
CanIUse: http://caniuse.com/#search=DOMContentLoaded. */ 

jQuery(document).ready(function(){ 
    var tabimgs = document.getElementsByClassName("tabimg"); 

    // for each tabimg 
    simpleForEach(tabimgs, function(tabimg) { 
      var cityName = tabimg.getAttribute("data-about"); 

      // add the click event listener 
      tabimg.addEventListener("click", function(evt) { 
       // onclick do: 

       // hide all tabcontents 
       simpleForEach(document.getElementsByClassName("tabcontent"), function(tc) { 
        tc.style.display = "none"; 
       }); 

       // remove the active class 
       simpleForEach(document.getElementsByClassName("tabimg"), function(ti) { 
        ti.className = ti.className.replace(" active", ""); 
       }); 

       // show the current tab, and add "active" class to the link that opened the tab 
       document.getElementById(cityName); 
       tabimg.className += " active"; 
      }); 
    }); 
}); 

我真的很感谢这方面的一些帮助/指导。先谢谢你。

柜面你错过了:https://jsfiddle.net/74n5qf3q/1/

+1

所有实例? https://开头的jsfiddle。net/74n5qf3q/2/ – Aaron

+0

非常感谢Aaron帮助 –

回答

3

这里是我的解决办法:https://jsfiddle.net/JustusFT/jrhk8L7j/
我用这个技术来居中。 https://www.w3.org/Style/Examples/007/center.en.html#hv3

我将缩略图的position:设置为相对。这会导致absolute定位的子元素基于父级定位。 新的HTML:

<ul class="tab"> 
    <li> 
    <a class="tabimg gq-module-hover tilt" tabindex="0" data-about="Newborns"> 
     <img src="http://debora.com.au/wp-content/uploads/2016/11/DEB_0095.jpg" alt=""> 
     <div class="caption">Newborns</div> 
    </a> 
    </li> 
    <li> 
    <a class="tabimg gq-module-hover" tabindex="1" data-about="Children"><img src="http://debora.com.au/wp-content/uploads/2016/11/DEB_8252.jpg" alt=""> 
     <div class="caption">Children</div> 
    </a> 
    </li> 
    <li> 
    <a class="tabimg gq-module-hover" tabindex="2" data-about="Families"><img src="http://debora.com.au/wp-content/uploads/2016/11/DEB_8607.jpg" alt=""> 
     <div class="caption">Families</div> 
    </a> 
    </li> 
    <li> 
    <a class="tabimg gq-module-hover" tabindex="3" data-about="Lifestyle"><img src="http://debora.com.au/wp-content/uploads/2016/11/DEB_6620.jpg" alt=""> 
     <div class="caption">Lifestyle</div> 
    </a> 
    </li> 
</ul> 

CSS:

.tab li { 
    box-sizing: border-box; 
    float: left; 
    width: 25%; 
    position: relative; 
    /*Added*/ 
} 
.tab li .caption { 
    position: absolute; 
    top: 50%; 
    left: 50%; 
    transform: translate(-50%, -50%); 
} 

我也删除我不知道你想要做什么,但它会是这样的text-align:center;

+0

非常感谢您的回复如此之快,这绝对解决了我的问题。谢谢你教我一项新技巧 –

+0

这实际上几乎完全解决了我在需要动态可能的多行文本的问题,这些动态文本可能位于锚点内的图像顶部。为了支持多行,我不得不将'line-height:1em'添加到与'top'值相混淆的样式,所以我必须创建'-1em'。除了在Chrome中变换值为_slightly_ off,所以我不得不使用'-webkit-transform:translate(30%, - 40%);'......任何想法为什么? – Sloloem