2013-10-16 64 views
4

概念可伸縮的div比窗口

我試圖得到比窗口,這將取決於鼠標的位置移動較大的列表較大。目標是允許用戶查看所有列表條目,無論數量如何。

下面是一個簡單的圖像,以說明這個概念:

  • 黑幀是窗口
  • 黑箭頭是鼠標位置
  • 紅線是列表

enter image description here

問題

目前,只有設置了列表寬度,我才能完成此項工作。我想不是設置這個寬度。

下面的代碼:

$(document).ready(function() { 
 
    
 
    var widthPage = $('.strip').width(); 
 
    var widthStrip = $('.strip ul').width(); 
 
    
 
    $('.strip').on('mousemove', function(event) { 
 
     var offset = $(this).offset(); 
 
     var relX = event.pageX - offset.left; 
 
     var left = relX * (widthStrip - widthPage)/widthPage; 
 
     $(this).find('ul').css('left', '-'+left+'px'); 
 
    }); 
 
    
 
});
/* Positioning */ 
 
.strip { 
 
    position:relative; 
 
    overflow: hidden; 
 
} 
 
.strip ul { 
 
    position: absolute; 
 
    top: 0; left: 0; 
 
    width: 1750px; 
 
} 
 
.strip li { 
 
    display: block; 
 
    float: left; 
 
} 
 

 
/* Style */ 
 
body { 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 
.strip { 
 
    height: 30px; 
 
    margin-top: 50px; 
 
} 
 
.strip ul { 
 
    height: 30px; 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 
.strip li { 
 
    list-style: none; 
 
    border: 1px solid #EBEBEB; 
 
    margin-right: -1px; 
 
    padding: 0 5px; 
 
    line-height: 28px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="strip"> 
 
    <ul> 
 
     <li>Lorem</li> 
 
     <li>Ipsum</li> 
 
     <li>Dolor</li> 
 
     <li>Sit</li> 
 
     <li>Amet</li> 
 
     <li>Consectetur</li> 
 
     <li>Adipisicing</li> 
 
     <li>Elit</li> 
 
     <li>Sed</li> 
 
     <li>Do</li> 
 
     <li>Eiusmod</li> 
 
     <li>Tempor</li> 
 
     <li>Incididunt</li> 
 
     <li>Ut</li> 
 
     <li>Labore</li> 
 
     <li>Et</li> 
 
     <li>Dolore</li> 
 
     <li>Magna</li> 
 
     <li>Aliqua</li> 
 
     <li>Ut</li> 
 
     <li>Enim</li> 
 
     <li>Ad</li> 
 
     <li>Minim</li> 
 
     <li>Veniam</li> 
 
     <li>Quis</li> 
 
     <li>Nostrud</li> 
 
     <li>Exercitation</li> 
 
     <li>Ullamco</li> 
 
     <li>Laboris</li> 
 
     <li>Nisi</li> 
 
     <li>Ut</li> 
 
     <li>Aliquip</li> 
 
     <li>Ex</li> 
 
     <li>Ea</li> 
 
     <li>Commodo</li> 
 
     <li>Consequat</li> 
 
    </ul> 
 
</div>

回答

4

這裏的問題是,迫使浮動元素擴展超出頁面的寬度,你需要強制其容器有足夠的寬度把他們全部。我建議使用display: inline-block,因爲只要它們的容器指定爲white-space: nowrap,它們將繼續。

.strip { 
    position:relative; 
    white-space: nowrap; 
    overflow: hidden; 
} 
.strip ul { 
    position: absolute; 
    top: 0; left: 0; 
    font-size: 0; /* prevent html whitespace from displaying */ 
} 
.strip li { 
    display: inline-block; 
    font-size: 16px; /* reset font size so the elements appear */ 
} 

設置這些樣式後,the list will scroll correctly without an explicit width set

+0

對這個簡單的CSS解決方案印象深刻,做得很好。 – zessx

+0

有趣......我想到了所有這些問題,試過但沒有正常工作......不知道我錯在哪裏..當我用'inline-block'替換'float'時,我可能沒有nowrap。 gj –

+0

@GiovanniSilveira可能。如果沒有'white-space:nowrap','inline-block'元素將簡單地包裹像浮動元素,而不是打破它們的容器。 – Nightfirecat

1

一種方式做到這一點是使.strip非常大的改變widthPage到祖父母的寬度是誰的規模相當於原來的母公司,在這種情況下var widthPage = window.innerWidth;

Demo Here

更改CSS

body { overflow-x: hidden; } 
.strip { 
    position:relative; 
    overflow: hidden; 
    width:10000px; /* Arbitrary large value */ 
} 
.strip ul { 
    position: absolute; 
    top: 0; left: 0; 
    width: auto; 
} 
+0

感謝您的這種工作替代。全CSS解決方案得到了我的偏好,但無論如何+1。 – zessx

+0

當然,我同意。但是,如果你需要保持'display:block'出於某種奇怪的原因或保留空白,這將是唯一的出路^^ –