簡體   English   中英

如何在沒有position:relative的div中裁剪/居中圖像?

[英]How to crop/center an image inside a div without position:relative?

繼續本示例 ,我想將圖像集中在頂部div中,以便在滾動頁面時,圖像的中心始終顯示在其上。

為此,我需要調整頂級div的大小,而不是僅僅改變它的大小。 但是當我調整大小時,除非我使用overflow:hidden,否則圖像會溢出div。 問題是,overflow:hidden 僅適用於position:relative。 但這破壞了整個布局。

如何在頂部div中居中圖像,並且仍然像此處一樣滾動?

HTML

<body onscroll='scroll(event)'>
  <div class='top' id='top'><img src='http://www.vejanomapa.net.br/wp-content/uploads/2013/03/Maria-Fuma%C3%A7a-em-Tiradentes-MG.jpg'></div>
  <div class='bottom' id='bottom'>
    <div class='menu'>Menu</div>
    <div class='main'><img src='http://tvulavras.com.br/wp-content/uploads/2017/04/maria-fuma%C3%A7a.jpg'></div>
  </div>
</body>

JavaScript的

function scroll(e) {
    var T = document.getElementById('top');
  var B = document.getElementById('bottom');
    var imgH = T.clientHeight; // header image height
    var hH = 200; // fixed header height
    if (imgH-e.pageY > hH) { // image is scrolling
    T.classList.remove('active')
        T.style.top = '-'+e.pageY+'px';

        T.style.position = 'sticky';
    B.style['margin-top'] = '0';
    } else { // image should remain fixed
    T.classList.add('active')
        T.style.top = '-'+(imgH-hH)+'px';
    }
}

CSS

html, body {
    margin:0;
}
body {
    overflow-y:scroll;
    overflow-x:hidden;
}
img {
    display:block;
}

.top {
    background:#FCC;
  display:block;
    top:0;
  position: sticky;
}

.active{
  position: fixed;
}

.active ~ .bottom {
  margin-top: 386px;
  padding-left: 100px;
}

.active ~ .bottom .menu {
  position: fixed;
  top: 200px;
  bottom: 0;
  left: 0;
}

.bottom {
    display:flex;
    min-height:1500px;
    background:#CFC;
}
.menu {
    min-width:100px;
    background:#CCF;
}

這樣,絕對定位

.yourElementGoesHere {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
}

我終於設法解決了!

HTML

<body onscroll='scroll(event)'>
  <div class='top' id='top'><img id='imgTop' src='http://www.vejanomapa.net.br/wp-content/uploads/2013/03/Maria-Fuma%C3%A7a-em-Tiradentes-MG.jpg'></div>
  <div class='bottom' id='bottom'>
    <div class='menu' id='menu'>Menu</div>
    <div class='main' id='main'><img src='http://tvulavras.com.br/wp-content/uploads/2017/04/maria-fuma%C3%A7a.jpg'></div>
  </div>
</body>

JavaScript的

function scroll(e) {
    var T = document.getElementById('top');
    var B = document.getElementById('bottom');
    var M = document.getElementById('menu');
    var A = document.getElementById('main');
    var I = document.getElementById('imgTop');
    var imgH = T.clientHeight; // header image height
    var hH = 100; // fixed header height
    if (imgH-e.pageY > hH) { // scrolling
        T.style.top = '-'+e.pageY+'px';
        I.style.top = (e.pageY/2)+'px';
        A.style.paddingLeft = 0;
        B.style.marginTop = 0;
        M.style.position = 'sticky';
    } else { // fixed
        T.style.top = '-'+(imgH-hH)+'px';
        A.style.paddingLeft = '100px';
        M.style.position = 'fixed';
        M.style.top = hH+'px';
        M.style.bottom = 0;
    }
}

CSS

html, body {
    margin:0;
}
body {
    overflow-y:scroll;
    overflow-x:hidden;
}
#imgTop {
    display:block;
    position:relative;
}
.top {
    background:#FCC;
  display:block;
    top:0;
  position: sticky;
    overflow:hidden;
}
.bottom {
    display:flex;
    background:#CFC;
}
.menu {
    min-width:100px;
    background:#CCF;
}

JSFiddle: https ://jsfiddle.net/aor0abhf/3/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM