2012-05-28 13 views
13

私は、当社の主要なウェブサイトのモバイルフレンドリーなサイトを構築しています。それが設計されている方法は、網膜の約2倍です。私がしようとしているのは、最大幅640px、幅100%のメインコンテンツを設定することです。私はうまく収まる特定の背景イメージを持っています。しかし、divの幅が小さくなるにつれ、高さも調整する必要があります。何か案は?ここアスペクト比に関連するdivの高さを維持する

は、CSSは次のとおり

*{margin:0;padding:0}h1,h2,h3,h4,h5,p,li,a,cite{font-size:14px;font-weight:normal}button,img{border:0}body{font-family:Arial, sans-serif;} 

body { 
    margin:0; 
    background-color:#fff; 
} 

.top, .body { 
    max-width:640px; 
    width:100%; 
    margin:0 auto; 
} 

.top { 
    background: white url(images/top.jpg) no-repeat; 
    background-size:auto; 
    overflow:hidden; 
    height:124px; 
    max-height:124px; 
} 

.top ul { 
    list-style:none; 
    height:100%; 
} 

.top ul li { 
    height:100%; 
    float:left; 
    display:block; 
} 

答えて

25

私はこれに対する答えを見つけました。これは、少し非目覚しいマークアップを追加しますが、うまく動作します。 ここで見つけることができます:http://jsfiddle.net/AdQ3P/

ロジックはパディングボトムにあります。基本的にこれは(img_height/img_width)* 100である必要があります。

これはコードなので、jsfiddleに依存しません。

<div class="container"> 
    <div class="hero"></div> 
</div> 

.container { 
    width:100%; 
    max-width:500px; 
} 

.hero { 
    width:100%; 
    height:0; 
    background-size:100%; 
    background:url(http://img97.imageshack.us/img97/3410/photo2ue.jpg) no-repeat; 
    padding-bottom:75%; 
} 

また、私は笑った1つの乱雑なデスクでした。

+1

あなたはこのブログ記事を見てみたいかもしれません:(あなたの答えに基づいているようです:) http://inspectelement.com/tutorials/a-responsive-css-background-image-technique/ – Danield

+0

おそらく: )。私はどこかに言及して、私の目的のために微調整をしたと信じています。 – agmcleod

+0

興味深いアイデア。ブラウザの互換性の問題はありますか? –

1

非固定幅つつ(例えば、100%)すべてのコンテナの幅を取り、固定サイズに設定されていない要素の高さで任意に適応するためにストレッチします

背景画像の代わりに<img>タグを使用できる場合は、画像にmax-width:100%を適用すると、コンテナに合わせて縮尺が変更されます。ブラウザは縦横比を一定に保つために高さのサイズ変更を行いますが、CSSの背景をima geタグが必ずしも可能であるとは限りません。また、セマンティクスやレイアウトに関する問題の点で最良の選択肢ではありません。

+0

背景画像は基本的にはボタンのように見えるアイテムです。私の計画はリンクのリストを適切に配置することでした。その中には他のリンクを展開するものもあります。多分それらを別々にスライスする最良の方法です。 http要求を下に保つことを望んでいた:)。 – agmcleod

+1

のようなアセットのhttp要求を1つのスプライトイメージを作成してから、リストの各項目に正しいものを表示することによってhttp要求を下に保つことができます。 http://css-tricks.com/css-スプライト/ – Luca

+0

イメージタグを使用してあなたの提案に行くなら、そのような機能を不可能にしませんか?私はこれまでバックグラウンドでいくつかのことを行ってきました。非常に便利でした。 – agmcleod

5

また、少しjQueryを使用することもできます。私は、それが意味的に有効な修正であるという利点があると信じているので、あなたのコードを編集する次の人は、何が起こっているのかをより簡単に理解できるでしょう。

// Maintain aspect ratio of #my_div 

// Set aspect ratio of #my_div 
var aspect_ratio = 0.8; 

// Store the jQuery object for future reference 
var $my_div = jQuery("#my_div"); 

// Within your document ready function, 
// Do an initial resize of #my_div 
$(document).ready(function(){ 
    $my_div.height($my_div.width() * aspect_ratio); 
}); 

// Resize #my_div on browser resize 
jQuery(window).resize(function() { 
    $my_div.height($my_div.width() * aspect_ratio); 
}); 
+1

偉大な解決策は、ちょうど$(ドキュメント).ready(function()の $ my_div.height($ my_div.width()* aspect_ratio); –

関連する問題