- Youtubeビデオの場合、非常に簡単です。iframeで、次のcssスタイルを追加します。
<style type="text/css">
iframe.someClass {
width:100%;
max-width:NNNpx;
}
</style>
NNNは、iframeに必要な最大幅であり、通常はデスクトップバージョンのコンテナ、または必要なサイズです。
このコードを使用すると、コンテナーが設定した最大幅のサイズよりも大きくない限り、iframeの幅はコンテナーの100%になります。それが大きい場合、最大幅が発生します。
これにより、ほとんどの問題がカバーされ、画面サイズがmax-width値よりも小さい場合に、幅が常にコンテナーが持つことができる最大値になることが保証されます。
- 水平スクロールの問題の場合:iOSのモバイルSafariは、スクロールバーをまったく許可しないため、通常、overflow:autoを使用してすべての要素を拡大します。同じことがフレームセットにも当てはまります。たとえば、MSafariは両方を引き伸ばしてそれぞれのすべての要素が表示されるため、固定部分とスクロール部分を作成することはできません。
コンテナにはoverflow:hiddenがあるため、スニペットは引き伸ばされますが、このCSSプロパティのために非表示になります。
スクロールバーを実際にシミュレートする唯一の方法は、JavaScriptフレームワークを使用することです。最高のものは、複数のタッチイベントやその他の優れたオプションをサポートするCubiqのiScroll 4(http://cubiq.org/iscroll-4 )です。
このようにして、タッチイベントを受け入れるようにコードスニペットを作成してから、水平、垂直、またはその両方にスクロールできます。
最も一般的な使用法は次のとおりです。
<script charset="utf-8" type="text/javascript">
var myScroll = new iScroll('idOfWrapper', {
//various options
});
</script>
(与えた例を使用して)多くのスニペットを取得したので、jQuery.each()を使用して、それぞれに何らかのループを適用できます。
例を見てみましょう。jQueryとiScrollを使用すると、次のようにできます。
HTML:
<html><head>
<title>Test</title>
<!-- include jquery and iscroll -->
</head><body>
<div id="divPretendingIsDeviceScreen" style="max-width:320px;overflow:hidden;">
<h1>Header</h1>
Lorem ipsum dolor sit amet.
<br/><br/>
<h2>Another header</h2>
For example:<br/>
<br/>
<div class="divToBeScrolled">
<pre>
//This is a single-line comment
//one bigger line to test one bigger line to test one bigger line to test one bigger line to test
</pre>
</div>
<h2>Our first C++ program</h2>
<div class="divToBeScrolled">
<pre>
/*
This is a multi-line comment.
It can have multiple lines!
*/
//one bigger line to test one bigger line to test one bigger line to test one bigger line to test
/*making
vertical
scroll
//one bigger line to test one bigger line to test one bigger line to test one bigger line to test
making
vertical
scroll
//one bigger line to test one bigger line to test one bigger line to test one bigger line to test
making
vertical
scroll
//one bigger line to test one bigger line to test one bigger line to test one bigger line to test
*/
</pre>
</div>
<br/>
<br/>
Lorem ipsum dolor sit amet.
</div>
</body></html>
CSS:
<style type="text/css">
.scrollerType {
overflow:hidden;
max-height:200px;
/* put max height you want the scroller div to have,
normally less than the device's window size, like 200px or so so.*/
}
div.divToBeScrolled {
overflow:scroll;
display:inline-block;
white-space:pre-wrap;
}
</style>
JS / jQUERY:
<script charset="utf-8" type="text/javascript">
var snippetName = new Array(); //creates a new array to make the var names for iscroll
var selfId = new Array(); //creates a new array to make the names for the scrollers
$('.syntaxhighlighter').each(function(index) { //for each '.syntaxhighlighter' and 'index' as counter
selfId[index] = 'scrollerId'+index; //creating a new id name for the container
$(this).wrap('<div id='+selfId[index]+' class="scrollerType" />'); //wrapping each '.syntaxhighlighter' with the container
var timeout = setTimeout(function(){ //yes, timeout. This to support Android mostly
snippetName[index] = new iScroll(selfId[index], { //initializing multiple iscroll's each with an index and targeting the selfId
//here you declare various options - see "Passing parameters to the iScroll" at iScroll page
//this is the best set, i think
snap: false,
momentum: true,
hScrollbar: false,
vScrollbar: false,
hScroll: true,
vScroll: true,
desktopCompatibility:true
}); //end new iScroll
},100); //100ms just bc 0ms or 1ms might not be enough
}); //end .each
</script>
スニペットハイライターが実行された後にiscrollsを有効にする必要があるため、上記のコードをjs関数でラップし、色を使用してスニペットハイライターでコールバック関数として追加できます。
これでうまくいくと思います。今それを作りましたが、アイデアは正しいです。今夜テストし、必要に応じて回答を編集して修正します。
さて、それだけだと思いますので、わからないことがあればお気軽にお問い合わせください。
_*EDIT:*_
JSコードを修正し、CSSとテストケースHTMLのコードを追加しました。
テストケースを作成しました
(http://portableideas.net/myRepo/trunk/stackoverflow/www/questions_7869572.html)