私は、サイトを更新してレスポンシブにし、スマートフォンで正しく表示するように任されました。残念ながら、現在の形式のサイトは操作が非常に簡単ではありません。CSSを変更することはできません。
ブラウザのサイズを検出し、jQueryでCSSを変更することは悪いと考えられますか?
例えば。:
if ($(window).width() < 960) {
//make heaps of CSS changes
}
承知しました。明らかに、CSSを単独で使用する方が良いでしょうが、できない場合は、使用しているものを使用してください。 CSSでできる限りのことを行い、必要に応じてJSを使用します。既存のCSSを変更できない理由はわかりませんが、JSでスタイルシートを追加できます。
(function() {
//create a new element
var newStyle = document.createElement("link");
//set the required attribute for a valid css file
newStyle.rel = "stylesheet";
newStyle.href = "http://example.com/the/location/of/your/css/stylesheet.css";
//and then append it to the <head>
document.getElementsByTagName("head")[0].appendChild(newStyle);
})();
ソース: http://christian-fei.com/add-stylesheets-after-the-head-using-javascript/
次に、CSS /メディアクエリを使用します。
またはjQueryを使用:
$('head').append('<link rel="stylesheet" type="text/css" href="{url}">');
私は、DOMを変更しないとできないことがあるレスポンシブな「スキン」を実行しました。 HTMLにアクセスできない場合、JS DOM操作が唯一の答えである場合があります。
編集:
スモールスクリーンバージョンの視覚的要件によっては、このCSSスニペットが「モバイルフレンドリー」への道のりをどれだけ進めるかに驚くかもしれません。
/* hopefully the original CSS developer didn't include a bunch of !importants.*/
div, p, ul, table, img {
float: none !important;
max-width: 96% !important; /* breathing room on the sides */
margin-left: auto
margin-right: auto;
}
元のCSS開発者が!important
を過度に好み、HTMLにアクセスできない場合、jQuery/JSを使用してIDを本文または高レベルコンテナーに追加し、セレクターに追加できます。
#i-will-beat-you-important div,
#i-will-beat-you-important p,
#i-will-beat-you-important ul {
float: none !important;
...
}
最初にメディアクエリを使用してみてください。元々デスクトップ専用のデザインを扱うときに簡単に見つけられた方法の1つは次のとおりです。
2つの別個のスタイルシートから始めます。 1つは新しいレスポンシブデザイン用で、もう1つは古いデスクトップバージョン用です。
<link rel="stylesheet" media="screen and (max-width: 959px)" href="css/mobile.css">
<link rel="stylesheet" media="screen and (min-width: 960px)" href="css/desktop.css">
古いスタイルはすべてdesktop.cssに含めることができます。一方、mobile.cssでゼロから開始できます。タブレットで動作するモバイルCSSでニースの単一列レイアウトを作成できる場合があります。
このアプローチにより、新たなスタートを切ることができ、モバイルやタブレットだけにスタイルを設定でき、デスクトップスタイルを使用したり上書きしたりする必要はありません。モバイルの場合にのみ必要に応じて要素を非表示/表示/配置できます。
モバイルとデスクトップで動作するようにデスクトップコードを変更する必要がある場合は、マークアップをリファクタリングできます。あるいは、レスポンシブバージョンとモバイルバージョンの両方に対してHTMLを現実的にリファクタリングできない場合は、デスクトップコードにクラスを置くことができます。クラス「デスクトップ」とモバイルバージョンでCSSを使用して非表示にします。次に、そのセクション用の新しいHTMLを作成し、class="mobile"
を付けます。次に、mobile.cssでスタイルを設定し、desktop.cssで非表示にします。
私はその方法を使用するサイトで作業しましたが、モバイルデバイスで画面の回転に問題がありました。 JavaScriptはページの読み込み時に1回しか検出しないため、ユーザーがデバイスを回転させても、メディアクエリのように全幅に拡大することはありません。当時はCSSに切り替えるだけで簡単でしたが、おそらくビューポート幅の変化を検出する方法があるかどうかをJSの専門家が知っているでしょう。 AJAXを使用する方法があるように思えますが、megasteveが説明するように、パフォーマンスに関する限り、あなたが見つけたものはすべてやりすぎになると思います。
応答性と「スマートフォンで正しく表示される」はまったく別のタスクです。
スタイリングの主なソースであってはなりません。それがCSSの仕事です。ただし、この2つを効果的に併用できます。簡単な例では、何らかのアクションの結果に応じて、テキストのスタイルが異なる場合があります。 jQueryを使用して、CSS定義クラスを変更できます。
$('#result').removeClass('red').addClass('green');
以前は、サイトで人気のある 960.gs css framework を使用していました。
レスポンシブにしたかったのです。
誰かが 960 gsのJSベースのレスポンシブプラグイン を作成したので、構造サイトテンプレートに変更を加える必要がないので、なぜそれを使用しないのかと考えました。
動作はしましたが、優れたブラウザを含むほとんどのブラウザで遅れていました。通常、ページの複雑さによって大きく異なる「スタイルのないコンテンツのフラッシュ」が発生します。
JSソリューションは機能していますが、理想的ではありませんが、可能であればCSS 3メディアクエリが最良の選択です。最後に、 Twitter Bootstrap を使用してサイトテンプレートを再編集しました。これは、ニーズに非常に適していました。
近道をすることは遠慮がちですが、多くの場合、長い目で見ればより時間のかかる/痛みを伴います。