ホームページ >ウェブフロントエンド >htmlチュートリアル >「高品質のコードを書く - Web フロントエンド開発の実践方法」読書 Notes_html/css_WEB-ITnose
はじめに
ここ2週間、私はクローズド開発(プロジェクトメンバーが会議室で開発する)を採用している会社の新規プロジェクトに参加しており、夜遅くまで残業しているため時間がありません。オリジナルのブログを書くためのエネルギーを今日は共有します。この記事「高品質のコードを書く - Web フロントエンド開発を実践する方法」を読んでメモを取ります。
Text
1行をマスターしたければ、まず10行をマスターする必要があります。
フロントエンド開発の分野では、一つの専門性と複数の能力が非常に必要です。
テーブル レイアウトの欠点:
大量のコードと複雑な構造
css レイアウト: div+css、または (x)html+css。
少量のコード、合理化された構造、新鮮なセマンティクス。コードの量が少ないほど、ブラウザのダウンロード時間は短くなります
明確なセマンティクスは検索エンジンにとってより使いやすくなります。
まず HTML を決定し、セマンティック タグを決定してから、適切な CSS を選択します。
ブラウザは、タグのセマンティクスに基づいてデフォルトのスタイルを提供します。
Web ページのタグのセマンティクスが適切かどうかを判断する簡単な方法は、スタイルを削除して、Web ページの構造がよく整理され、秩序立っているかどうか、また読みやすいかどうかを確認することです。
Web ページの CSS 設定が DevTool で無効になっているかどうかをテストしますか?スタイルを削除した後、w3c 公式 Web サイトの効果をテストします。
ページ上のタグがデザインのニーズを満たせない場合、実装を支援するために div やspan などの非セマンティック タグが適切に追加されます。
テーブル レイアウトは 2 次元データの表示に適しています。
セマンティック タグを使用するときに注意する必要があるその他の問題:
非セマンティック タグ div および span の使用はできるだけ少なくしてください。
cssrest:
非推奨 * { margin: 0; padding: 0 }, 推奨されるものをリストします。 {margin:0; padding:0; color:#000; font-size:12px;} と記述することも推奨されません。これは CSS の継承を破壊するためです。ブラウザのデフォルトのスタイルをリセットする、推奨: https://github.com/necolas/normalize.css
モジュールの分割:
モジュール間に同じ部分が含まれないようにしてください。同一の部分がある場合は、抽出して独立したモジュールに分割する必要があります。キャメルケースは単語を区別するために使用され、下線は従属を示すために使用されます。例: .timeList-lastItem。
このスタイルの命名方法を学びましょう:
.fr { float: right; }
.w25 { width: 25%; }
より多くの合成を使用し、継承を減らします。
スタイル設定間に矛盾がある場合、最も重みの高いスタイルが使用されます。
HTMLタグの重み:1、クラスの重み:10、IDの重み:100。
重みが同じ場合は、最も近い定義原則が使用されます。
スタイルを簡単に上書きできるようにして保守性を向上させるには、CSS セレクターの重みをできるだけ低くする必要があります。
CSSハックの方法は、通常、セレクタープレフィックス方法とスタイル属性プレフィックス方法です。
タグの 4 つの状態は、l(link)ov(visited)e h(hover)a(active)te の順に定義されており、これが愛憎原則です。
ブロックレベル要素とインライン要素:
hasLayout:
は、ボックス モデルを解析するために IE ブラウザーによって設計された独自の属性です。これは、もともと、インライン要素の hasLayout がトリガーされた場合に使用されるように設計されています。ブロックレベル要素のいくつかのプロパティを持ちます。
display: inline-block
インラインのブロックレベル要素。ブロックレベル要素の特性を持ちます。幅、高さ、マージン、およびパディングの値を設定でき、また、インライン要素の特徴: 排他的な行を占有しません。は hasLayout をトリガーします。垂直方向の配置は *vertical-align: -10px を設定することで解決できます。
E6、IE7 およびその他のブラウザを display: inline-block と互換性を持たせるには、次のような問題があります。
inline 要素に対してのみ display: inline-block を実装できます。ブロックレベルの要素にはできません。
float
は、通常のドキュメント フローの配置を変更し、周囲の要素に影響を与えます。Position: ABS および float: left または float: right は、以前の要素のタイプに関係なく (display: none を除く)、要素は display: inline-block モード: you で表示されます。幅を高く設定できる場合、デフォルトの帯域幅は親要素を占有しません。
センタリング
水平センタリング
グリッド レイアウト
サイドバーとメインの間のスタイルの左右に関係なく、HTML タグでは、メイン タグがサイドバーの前にロードされていることを確認してください。最も外側のコンテナのみに特定の幅が与えられ、他のすべてのコンテナの幅はパーセンテージで設定されます?? グリッド レイアウト。
z-index
Z 軸は、要素の位置が絶対位置または相対位置に設定された後にアクティブになります。負のマージンを設定すると、隣接する要素の位置が重なる可能性があります。どちらが上に表示されるかは、HTML タグが表示される順序によって決まります。後から表示されるタグは、最初に表示されるタグの上に表示されます。
IE6 での選択オクルージョンの問題については、同じサイズの iframe を使用して選択をカバーできます。
コンポーネントの上下マージンの重複問題と IE の hasLaout によるバグを回避するために、特別な必要がある場合を除いて、すべてのモジュールは margin-top を使用して上下マージンを設定します。
Javascript
タグの前で init 関数を呼び出します。この時点では、ページ内の DOM ノードがすべて「ロード」されているわけではありませんが、すべて「生成」されている必要があります。 " これにより、DOMReady の効果がシミュレートされます。
高品質コンポーネントの機能:
コードはよく整理されており、結合度が高く、結合度が低くなります。
プロセス指向には 3 つの問題があります:
データと処理関数の間に直接の相関関係がない。操作を実行するとき、対応する処理関数を選択するだけでなく、それに必要なデータを準備する必要もあります。つまり、操作を実行するときは、処理機能とデータの両方に注意を払う必要があります。
データと処理関数は同じスコープ内で公開されます。プログラム全体のすべてのデータと処理関数は相互にアクセスできます。開発やメンテナンスの後期段階では、システム全体に影響を及ぼしやすく、変更がより困難になります。
プロセス指向の考え方は、プロセッサにデータを入力し、プロセッサが内部で演算を実行し、プロセッサが結果を返すという典型的なコンピュータの考え方です。
オブジェクト指向:
プログラムでは、「オブジェクト」を「オブジェクト」と呼びます。オブジェクトは、「状態」と「アクション」に対応する「プロパティ」と「動作」の 2 つの部分で構成されます。 「客観的な世界におけるオブジェクトの。」
属性の本質は実際にはプロセス指向のデータである変数ですが、動作の本質は実際にはプロセス指向の処理関数である関数です。違いは、プロセス指向では、データと処理機能は関連しておらず、一緒に特定のオブジェクトに属していることです。オブジェクト指向では、オブジェクト内のデータと処理関数が定義され、このオブジェクトのプロパティと動作として存在します。
凝集性:
これは、オブジェクトまたはクラスによって提供されるインターフェイスが非常にシンプルで理解しやすく、複雑な基礎となる操作がオブジェクトまたはクラスのインターフェイス内にカプセル化され、ユーザーに対して透過的であることを意味します。
ユーザーは、クラスが提供するインターフェイスを知るだけでよく、低レベルの詳細が少なくなるほど、オブジェクトの集約度が高くなります。
結合:
低結合とは、クラス間の通信に関連付ける必要があるインターフェイスの数が少ないことを指します。結合が大きいほど次数が低くなります。
全体的な観点からプログラムの品質を決定するのは、OOP ではなく、OOA と OOD です。
OOA と OOD は特定の言語とは何の関係もありませんが、OOP は言語に直接関連しています。
Javascript はプロトタイプベースの言語であり、new によってインスタンス化されたオブジェクトのプロパティと動作は 2 つの部分から構成され、1 つはコンストラクターから、もう 1 つはプロトタイプから提供されます。
このキーワードがコンストラクターまたはプロトタイプに現れるかどうかに関係なく、このキーワードを通じて、プロパティとメソッドをコンストラクターとプロトタイプの間で通信できます。
JavaScript では、スコープを通じてパブリックまたはプライベートが実現されます。
this.XXX で定義されたプロパティはパブリックですが、var XXX で定義されたプロパティはプライベートです。
プライベート プロパティのスコープはクラスのコンストラクター内にのみあります。
パブリックかプライベートかに関係なく、すべてのプロパティと動作をコンストラクターに書き込むことはお勧めできません。メモリ内にはクラスのプロトタイプが 1 つだけ存在するため、プロトタイプに記述された動作はインスタンス化時にすべてのインスタンスで共有でき、インスタンスのメモリにコピーされることはなく、クラスに記述された動作が再びコピーされることもありません。インスタンスのメモリ内では、インスタンス化時にコピーが各インスタンスにコピーされます。
プロトタイプにビヘイビアを記述するとメモリ消費量を削減できます。 特別な理由がない限り、ビヘイビアーを可能な限りプロトタイプに記述することをお勧めします。
プロトタイプに記述された動作はパブリックである必要があり、プライベート プロパティにはアクセスできません。
プロトタイプでプライベート動作を定義しますが、プロパティと動作の名前の前に「_」を追加することでプライベートであることを規定します。これは実際には動作をプライベートにするわけではない命名規則ですが、これによりプライベート動作が可能になります。エンジニアは、それがプライベートであるように設計されていることを知っており、それをパブリックな動作のように呼ぶことを避けます。
set メソッドを使用して属性を設定する場合、属性 valueChange をリッスンするためのエントリ ポイントがあります。
Javascript の継承には、コンストラクターとプロトタイプのそれぞれのプロパティと動作の継承が含まれます。
JavaScript での function の 2 つの使用法:
関数オブジェクトの呼び出しまたは適用関数を通じて、関数コンテキストを変更できます。
値とアドレスによる受け渡し:
プロトタイプは本質的にハッシュオブジェクトなので、直接代入されるとアドレスが渡されます。
Bird.prototype = new Animal(); // Bird.prototype.constructor は Animal を指します
Bird.prototype.constructor = Bird // Bird.prototype.constructor は Bird を指します
カスタム クラスであろうと JavaScript の組み込みクラスであろうと、クラスにはプロトタイプがあります。
組み込みクラスのメソッドはオーバーライドできますが、プロパティはオーバーライドできません。
組み込みクラスのプロトタイプを直接変更する代わりに、カスタム クラスを定義し、組み込みクラスのインスタンスをパラメーターとしてコンストラクターに渡し、カスタム クラスに拡張メソッドを定義します。このアプローチの考え方は、組み込みクラスを別の層でカプセル化して、組み込みクラスのプロトタイプが汚染されないように保護することです。
HTML タグで定義された属性を JavaScript で取得するには、次の 2 つの方法があります:
DOM ノード オブジェクトの getAttribute メソッドを使用する。
複合型データを文字列に変換することをデータのシリアル化といい、その逆の操作をデータの逆シリアル化といいます。
文字列の逆シリアル化は、eval 関数を通じて実現されます。
イベント オブジェクトの動作は、IE と Firefox では異なります。
IE では、イベントはグローバル スコープ内にあるウィンドウ オブジェクトの属性です。
Firefox では、イベント オブジェクトはイベントのパラメーターとして存在します。
(バブリング メカニズムを使用して) 祖先ノードでイベントをリッスンすると、メモリのオーバーヘッドを効果的に削減できます。たとえば、jquery の delegate() メソッドです。