2011-07-13 12 views
1

可能な限り幅広いが、固定幅のコンテナ内で実行できる水平リストを作成したい。私はjQueryを使って、本当に広いリストをスクロールできるようにしています。CSSが同じ行に浮動する変数量

私はこの線に沿ってコードを持っている:私はちょうど私が思う私のCSSのサブセットをあげる

<div class="list"> 
    <ul> 
     <li class="feed"> 
      <section> 
       <h1><span class="name">Title</span></h1> 
       <div class="scroll_left"><a class="ir" href="#">Scroll Back</a></div> 
       <div class="article_list"> 
        <ul class="article_list"> 
         <li> 
          <a href="article.php"> 
           <div class="article_thumb"><img src="img/placeholder.png" alt="blah" /></div> 
           <h2>Title of article</h2> 
          </a> 
         </li> 
         <li> 
          <a href="article.php"> 
           <div class="article_thumb"><img src="img/placeholder.png" alt="blah" /></div> 
           <h2>Title of article</h2> 
          </a> 
         </li> 
         <li> 
          <a href="article.php"> 
           <div class="article_thumb"><img src="img/placeholder.png" alt="blah" /></div> 
           <h2>Title of article</h2> 
          </a> 
         </li> 
         <!-- variable number of li's, from 10s to 100s --> 
        </ul> 
       </div> 
      </section> 
     </li> 
     <!-- More of these lists --> 
    </ul> 
</div> 

は関連性がある:

.feed .article_list { 
    position: relative; 
    overflow: auto; 
    float: left; 
    width: 900px; 
} 

.feed .article_list ul { 
    position: relative; 
    width: 10000px; /** I want this to be wide, but not allow scrolling past the end*/ 
    margin: 0; 
    background-color: #ffffff; 
} 

.feed .article_list li { 
    display: block; 
    width: 130px; 
    height: 150px; 
    position: relative; 
    float: left; 
    border-right: 2px solid #b5e8f4; 
    border-left: 2px solid #b5e8f4; 
    margin: 0 5px 0 0; 
} 

私のjavascriptは次のとおりです。

$(document).ready(function() { 
    $('div.article_list').css({ 
     'overflow' : 'hidden' 
    }); 

    $('.scroll_left a').click(function() { 
     toScroll = $(this).parent().next(); 
     toScroll.animate({scrollLeft: "-=135"}); 
     return false; 
    }); 

    $('.scroll_right a').click(function() { 
     toScroll = $(this).parent().prev(); 
     toScroll.animate({scrollLeft: "+=135"}); 
     return false; 
    }); 

}); 

そうですが、内側のulを非常に広くする必要があるため、ユーザーはリスト項目を超えてスクロールしたり、再作成することができます私はあまりにも多くの項目を(動的には、私は多くの制御を持っていないので)、レイアウトが壊れて追加してください。

私は何とかスクロール可能な領域を浮動小数点のコンテンツと同じ幅にすることはできますか? また、javascriptの幅を設定する唯一のソリューション(理想的ではありませんが、私はそれを行うことができます)ですか?

答えて

3

そのfloat: left.feed .article_listにありますが、本当に欲しくないと思っていますが、私はそれをすべてから削除しました。

私は浮動するのではなく、インラインのセットアップに移動します:

.feed .article_list { 
    position: relative; 
    overflow: auto; 
    width: 100%; /* specify what ever width you want. I think 100% is proper. */ 
} 

.feed .article_list ul { 
    position: relative; 
    overflow-x: scroll; 
    margin: 0; 
    background-color: #ffffff; 
    white-space: nowrap; 
} 

にすることでoverflow-x: scrollあなたは永久的なスクロールバー(全く必要ありません、それはあなたが好む場合は削除することができます)を持っています。 white-space: nowrapは、1行に子供を保つ(代わりの浮き。)ウィル

.feed .article_list li { 
    display: inline-block; 
    // etc. etc. etc. ... 

を子どもたちにdisplay: inline-block;あなたがブロック要素のような高さ/幅を指定でき、同時にインラインそれらを維持します。

JsFiddle: -http://jsfiddle.net/GBtCb/

UPDATE: -

それはクロスブラウザ互換性を持たせるための努力には次のように変更します。 .feed .article_list からoverflow: autoを削除し、追加します。

.feed 
{ 
    overflow: hidden; 
} 
.article_list 
{ 
    overflow: auto; 

quirksmode.com:

+0

ありがとうございます!今、これに対するブラウザのサポートは何ですか?私はIE6や古いブラウザを放棄しても問題ありませんが、現代的なブラウザでこれを動作させたいと思います。手を離さなければ自分の時間をテストすることができます。 – Matt

+0

@Matt um ... browser suppor ...私は通常、IE8 +(XPが上に行くことができないように)だけ心配しています。私はそれがより多くのクロスブラウザにする必要があると思う更新を追加しました。しかし約束はない。ごめんなさい。 –

+0

@Matt初期テストはIE7では動作しませんでした。あなたがIE7をサポートしたい場合http://jsfiddle.net/GBtCb/3/これはあなたのオリジナルとの違いは、 '.feed .article_list'と' overflow-x: 'の' float:left'の削除です。 '.article_list ul'でスクロールします –

関連する問題