2017-04-01 142 views
0

我想設置一個文本重疊的圖像,但該位置應該放在所有的屏幕尺寸相同。圖像位置的文本

例子: enter image description here

這裏是什麼,我都試過demo

.c-txt-on-img{ 
 
     position: relative; 
 
    } 
 
    .c-txt-on-img .txt{ 
 
     font-size: 30px; 
 
     font-weight: bold; 
 
     font-family: arial, sans-serif; 
 
     max-width: 200px; 
 
     position: absolute; 
 
     top: 80px; 
 
     left: 158px; 
 
    } 
 
    .c-txt-on-img .img { 
 
     width: 100vw; 
 
     height: 100vh; 
 
     background-size: cover; 
 
     background-position: center center; 
 
    }
<div class="c-txt-on-img"> 
 
     <div class="txt">Tony where are you !!!!</div> 
 
     <div class="img" style="background-image: url(http://theprojectstagingserver.com/stackoverflow/txt-on-img/comic.jpg)"></div> 
 
    </div>

它僅適用於特定的屏幕大小的一個例子,我可以解決這個問題不同的尺寸使用不同的媒體查詢,但這將花費太多時間!

+0

這是你想要的東西:https://開頭的jsfiddle .net/br503z0y/6/ – Deceiver

+0

@Deceiver nope檢查此:http://prntscr.com/er34es它應該涵蓋整個地區,我已經發布了一個解決方案,讓我知道如果你有一個更好的。 –

+0

我不確定,但我認爲你可以只用css來完成它:https://jsfiddle.net/br503z0y/24/我給了它一個晚期鏡頭似乎工作。 – Deceiver

回答

0

有2個主要挑戰:

1)對準圖像和文字始終保持在同一地點。

2)對齊會在圖像的左/右側上部/底部留下額外不均勻的空間,所以我們需要增加足夠的圖像大小以覆蓋整個屏幕。

對於第一部分,我們可以定義相同的左上位置的文本和圖像,然後給,使得圖像的左上角是原點在同一地點,其中文本泡是負翻譯百分比圖像。

接下來,我們可以計算出圖像的左/右/上/下的空間&增加其寬度,直到沒有負面的剩餘空間。

下面是一個GIF圖片來解釋這更好:

enter image description here

這裏是DEMO

var viewportOffset = [], 
 
    winWidth, 
 
    winHeight, 
 
    inLoop = false, 
 
    resizeTimeout; 
 

 
$(function(){ 
 
    init(); 
 
}); 
 

 
$(window).resize(function(){ 
 
    clearTimeout(resizeTimeout); 
 
    resizeTimeout = setTimeout(function(){  
 
     init(); 
 
    }, 500); 
 
}); 
 

 
function init() { 
 
    winWidth = $(window).width(); 
 
    winHeight = $(window).height(); 
 
    inLoop = false; 
 
    coverImage(); 
 
} 
 

 
function coverImage() { 
 
    $('.js-cover-img').each(function (i) { 
 

 
     viewportOffset[i] = getViewportOffset($(this)); 
 

 
    if(!inLoop){ 
 
     $(this).width('auto'); 
 
     $(this).height('auto'); 
 
    } 
 

 
    var imgWidth = $(this).width(); 
 
    var imgHeight = $(this).height(); 
 

 
    viewportOffset[i].right = winWidth - imgWidth- (viewportOffset[i].left); 
 
    viewportOffset[i].bot = winHeight - imgHeight- (viewportOffset[i].top); 
 

 
    if(viewportOffset[i].top < 0){ 
 
     var vertViewportOffest = viewportOffset[i].bot; 
 
    }else if(viewportOffset[i].bot <= 0){ 
 
     var vertViewportOffest = viewportOffset[i].top; 
 
    }else{ 
 
     var vertViewportOffest = viewportOffset[i].top + viewportOffset[i].bot; 
 
    } 
 

 
    if(viewportOffset[i].right < 0){ 
 
     var horViewportOffest = viewportOffset[i].left; 
 
    }else if(viewportOffset[i].left < 0){ 
 
     var horViewportOffest = viewportOffset[i].right; 
 
    }else{ 
 
     var horViewportOffest = viewportOffset[i].left + viewportOffset[i].right; 
 
    } 
 

 
    if(horViewportOffest > 0 || vertViewportOffest > 0){ 
 
     $(this).width(imgWidth + 20); 
 
     inLoop = true; 
 
     coverImage(); 
 
     return false; 
 
    } 
 
    }); 
 
} 
 

 
/* Get's the viewport position */ 
 
function getViewportOffset($e) { 
 
    var $window = $(window), 
 
    scrollLeft = $window.scrollLeft(), 
 
    scrollTop = $window.scrollTop(), 
 
    offset = $e.offset(); 
 
    return { 
 
    left: offset.left - scrollLeft, 
 
    top: offset.top - scrollTop 
 
    }; 
 
}
body, html{ 
 
    padding: 0; 
 
    margin: 0; 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 
.c-txt-on-img { 
 
    position: relative; 
 
    width: 100vw; 
 
    height: 100vh; 
 
    overflow: hidden; 
 
} 
 

 
.c-txt-on-img .txt { 
 
    font-size: 30px; 
 
    font-weight: bold; 
 
    font-family: arial, sans-serif; 
 
    max-width: 200px; 
 
    position: absolute; 
 
    top: 30%; 
 
    left: 30%; 
 
    z-index: 2; 
 
    transform: translate(-50%, -50%); 
 
    text-align: center; 
 
} 
 

 
.c-txt-on-img .img { 
 
    transform: translate(-28.5%, -23%); 
 
    z-index: 1; 
 
    position: absolute; 
 
    top: 30%; 
 
    left: 30%; 
 
    min-width: 870px; 
 
} 
 
.c-txt-on-img img{ 
 
    display:block; 
 
    width: 100%; 
 
}
<script 
 
    src="https://code.jquery.com/jquery-1.12.2.min.js" 
 
    integrity="sha256-lZFHibXzMHo3GGeehn1hudTAP3Sc0uKXBXAzHX1sjtk=" 
 
    crossorigin="anonymous"></script> 
 

 
<div class="c-txt-on-img"> 
 
    <div class="txt">Tony where are you !!!!</div> 
 
    <div class="img js-cover-img"> 
 
    <img src="http://theprojectstagingserver.com/stackoverflow/txt-on-img/comic.jpg"> 
 
    </div> 
 
</div>