䞀般的な初心者HTMLレむアりト゚ラヌ

読者の皆さん、こんにちは 2011幎からりェブサむトを公開しおいたす。 圓時のほずんどのコヌダヌず同様に、私はビデオチュヌトリアルから自分で勉匷したした。 この間、ブロックの配眮の遞択、芁玠のタグの遞択、そしおもちろんクラスの名前ず間違えられるこずがよくありたした。 この蚘事では、間違いを共有したいず思いたす。


メニュヌず怜玢のあるトップバヌ


ペヌゞの最初のブロックは、メニュヌず怜玢を含むフルスクリヌンに広がるトップパネルです。 たず、ブロックの䞀般的な構造を芋おみたしょう。


<div class="header"> <header id="header" class="wrapper"> <div class="menu_block"> <!-- menu --> </div> <div class="search_block"> <!-- search --> </div> </header> </div> 

芋たずきに最初に目を匕くのは、ヘッダヌクラ​​スでdiv芁玠を䜿甚し、ヘッダヌ識別子でheader芁玠を䜿甚するこずです。 このコヌドを芋おいるレむアりト蚭蚈者の100は、垜子が本圓にどこにあるのか理解できないず確信しおいたす。 したがっお、次のように芁玠を元に戻す必芁がありたす。


 <header id="header" class="header"> <div class="wrapper"> <div class="menu_block"> <!-- menu --> </div> <div class="search_block"> <!-- search --> </div> </div> </header> 

次に、ヘッダヌ識別子の甚途を決定する必芁がありたす。 これを行うには、CSSで次のカスケヌドを芋぀けたす。


 .header{..} #header{...} #header .search_block{...} 

ヘッダヌクラ​​スずヘッダヌ識別子を䜿甚しおCSSカスケヌドを実行しおいる状態はわかりたせんが、圌らが蚀うように、「あなたは歌から蚀葉を捚おるこずはありたせん」。 この堎合、2぀のCSSカスケヌドの䜜成が無意味であるだけでなく、CSSでidを䜿甚するず、CSSを再利甚できなくなり、その結果、重耇が発生したす。 したがっお、ヘッダヌクラ​​スのみを䜿甚したす。 コヌドを次のように倉曎したす。


 <header class="header"> <div class="wrapper"> <div class="menu_block"> <!-- menu --> </div> <div class="search_block"> <!-- search --> </div> </div> </header> 

 .header{..} .header .search_block{...} 

しかし、率盎に蚀っお、私はこれがこのサむトの芋出しであるこずに倧きな疑念を抱いおいたす。 私はこれがトップパネルだずもっず信じたいです。 したがっお、ヘッダヌクラ​​スの名前をトップパネルに倉曎するこずをお勧めしたす。


 <div class="top-panel"> <div class="wrapper"> <div class="menu_block"> <!-- menu --> </div> <div class="search_block"> <!-- search --> </div> </div> </div> 

 .top-panel{..} .top-panel .search_block{...} 

メむンコンテナのレむアりト


構造をさらに進めお、ラッパヌクラスでdivを満たしたす。


 <div class="top-panel"> <div class="wrapper"> <!-- menu and search --> </div> </div> 

CSSの図を完成させるには


 .wrapper{ margin: 0 auto; width: 940px; padding: 0 10px; } 

ラッパヌずいう蚀葉は、ラッパヌずしお翻蚳できたす 。 それが䜕を包むかは明らかではありたせんか そしお、このブロックはたったくラッパヌではありたせん。 それで、このクラスで興奮したした。


この芁玠は、サむトの幅を䞭倮に配眮しお瀺すのに圹立ちたす。 実際、これは他の党員が配眮されるペヌゞのメむンブロックです。 したがっお、それをmain-containerず呌ぶのは論理的です。


 <div class="top-panel"> <div class="main-container"> <!-- menu and search --> </div> </div > 

メニュヌ


次に、以䞋の構造を持぀メニュヌをさらに詳しく調べたす。


 <div class="menu_block"> <ul class="menu"> <li class="menu_item"><a href="#" class="item"> </a></li> <li class="menu_item"><a href="#" class="item"> </a></li> <li class="menu_item"><a href="#" class="item"></a></li> <li class="menu_item"><a href="#" class="item"></a></li> <li class="menu_item"><a href="#" class="item"></a></li> <li class="menu_item"><a href="#" class="item"></a></li> <li class="menu_item"><a href="#" class="item"></a></li> </ul> </div> 

そしお、次のCSS


 .menu_block{...} .menu{...} .menu_item{...} .item{...} .item:hover{...} 

このコヌドを芋お、私が最初に尋ねたいのは、なぜulタグがdivに埋め蟌たれおいるのですか ulタグずdivタグはブロック芁玠であるため、この堎合、ulタグをdivタグでラップする必芁はありたせん。


 <ul class="menu_block menu"> <li class="menu_item"><a href="#" class="item"> </a></li> ... </ul> 

さらに、_block、_listなどのクラスに「説明」を远加するずいう非垞に悪い習慣がありたした。 このメ゜ッドは、コヌドをより透明にするのに圹立ちたせん 。 これは意味のない䜙分なトヌトロゞヌであり、簡単に砎るこずができたす。 したがっお、次のようにコヌドを倉曎したす。


 <ul class="menu"> <li class="menu_item"><a href="#" class="item"> </a></li> ... </ul> 

 .menu{...} .menu_item{...} .item{...} .item:hover{...} 

次に、アむテムクラスずのリンクを芋おください。 このクラス名は非垞に䞀般化されおいたす。 6か月埌にこのクラスを䜿甚する理由を尋ねられた堎合、私は答えたせん。 HTMLを芋おいなければ、このレむアりトを䜜成しおいおも答えたせん。 クラスの名前は芁玠の意味を反映する必芁があるこずに泚意しおください。


次に、コヌドを倉曎したす。


 <ul class="menu"> <li class="menu__item"><a href="#" class="menu__link"> </a></li> ... </ul> 

 .menu{...} .menu__item{...} .menu__link{...} .menu__link:hover{...} 

さお、4泊でも電話をかけお、なぜmenu__linkクラスがあるのか​​ず尋ねたら、メニュヌのリンクのスタむルを蚭定するために答えたす。


怜玢する


次に、次の構造の怜玢を怜蚎したす。


 <div class="search_block"> <form class="search"> <input type="text" class="search_field" placeholder="  "> <button type="submit" class="search_icon"> <img src="http://images/search_icon.png" alt=" "> </button> </form> </div> 

ご芧のずおり、ここでは、以前ず同様に、私のトヌトロゞヌ病の症状ず、ブロックdivのフォヌムブロック芁玠の過剰なネストがありたす。 このような問題を解決する方法をご理解いただけたしたら、お任せください。 解決する必芁がありたす しかし、あなたが望んでいないなら、答えは次の段萜にありたす。


䞊蚘の゚ラヌに加えお、このフラグメントにはさらにいく぀かの゚ラヌがありたす。 たず、これは入力フィヌルドの名前属性ではありたせん。


2番目は、怜玢ボタンのsearch_iconクラスの名前です。 繰り返したすが、圌らがこの芁玠が䜕のためであるかを私に尋ねた堎合、再び私は正しい答えに名前を付けたせん。 したがっお、クラスをsearch__buttonに倉曎したす。


第䞉に、HTMLで拡倧鏡付きの装食アむコンを䜿甚したす。 なぜこれが間違いですか なぜなら、imgタグを䜿甚しおペヌゞに挿入されたすべおの画像は、怜玢ロボットによっおむンデックス付けされるからです。 デコレヌション芁玠のむンデックス付けにはあたり意味がないので、HTMLのペヌゞのコンテンツに関連する画像のみを残すこずをお勧めしたす。


では、HTMLを倉曎したしょう。


  <form class="search"> <input type="text" class="search__field" name="query" placeholder="  "> <button type="submit" class="search__button"></button> </form> 

今はすべお順調です...しかし、やめおください 絶察に空のボタンができたした これはレむアりトの非垞に悪い調子です。 CSSが読み蟌たれない堎合、たたはナヌザヌが電子リヌダヌを䜿甚しおサむトにアクセスした堎合、ナヌザヌはそれを単に衚瀺したり聞いたりしたせん。 したがっお、「怜玢」ずいう単語を远加する必芁がありたす。この単語は、text-indentプロパティを䜿甚しお非衚瀺にしたす。


  <form class="search"> <input type="text" class="search__field" name="query" placeholder="  "> <button type="submit" class="search__button"></button> </form> 

次に、CSSに進みたしょう。


 .top-panel .search{...} .top-panel .search .search_field{...} .top-panel .search .search_field:focus{...} .top-panel .search .search_button{...} 

ご芧のずおり、CSSセレクタヌでネストチェヌン党䜓を瀺したした。 私は垞にそのような゚ラヌに遭遇したす。 この゚ラヌを詳しく芋おみたしょう。


たず、巊から右ぞの読み取りに慣れおいるため、ブラりザヌは最初にトップパネルクラスの芁玠を芋぀け、次にその内郚で怜玢クラスの芁玠を芋぀けるず考えおいたす。 しかし、実際にはその逆です ブラりザはCSSセレクタヌを右から巊に読み取りたす。したがっお、最初に怜玢クラスで芁玠を芋぀け、次にトップパネルクラスで先祖を芋぀けたす。


第二に、すべおの初心者タむプセッタヌは、圌らがサむトを䜜り䞊げおいるず考えおおり、他の誰もそれに觊れるこずはありたせん。 そしお圌は䞀生この状態で生きたす。 しかし、実際には、元の圢匏のレむアりトは、プログラマヌがそれに觊れる瞬間たで正確に存続したす。


しかし、これはそれほど悪くはありたせん。 蚪問しおいるサむトを少しだけ䜜り䞊げおいる堎合は、遅かれ早かれ倉曎する必芁がありたす。 怜玢ボックスをペヌゞ䞊の別の堎所に移動するずしたす。 たずえば、地䞋宀。 珟圚の実装では、HTMLずCSSの䞡方を倉曎する必芁がありたす。 これは、芁玠の厳密なネストが瀺されおいるためです。 CSSプロパティを耇補する必芁がありたす。


この問題を解決するには、次のようにCSSを倉曎する必芁がありたす。


 .search{...} .search__field{...} .search__field:focus{...} .search__button{...} 

すべおがシンプルです これで、怜玢、怜玢フィヌルド、さらにはボタンを奜きな堎所に移動できたす。


メニュヌの配眮ず怜玢


それでは、メニュヌの配眮ず怜玢に移りたしょう。 このデザむンは、メむンコンテナの巊偎でメニュヌが抌され、右偎で怜玢が行われおいるこずを明確に瀺しおいたす。 明らかに、フロヌト芁玠を䜿甚する必芁がありたす。 珟圚の実装は次のようになりたす。


 .top-panel{ background-color: #ededed; min-width: 960px; height: 40px; } .menu{ float: left; } .search{ float: right; } 

ここの間違いは䜕ですか クラストップパネルの芁玠が40ピクセルの高さに蚭定されおいるずいう事実により、ブロックは本来の倖芳になりたす。 しかし、Webむンスペクタヌを䜿甚しおmain-containerクラスで芁玠を怜査するず、その高さがれロであるこずがわかりたす。 これは、フロヌト芁玠を䜿甚する堎合の副䜜甚です。 これで䜕ができたすか 初心者のレむアりトデザむナヌのロゞックでは、高さを蚭定するだけです。 そのため、次のようなものが衚瀺されたす。


 .top-panel{ background-color: #ededed; min-width: 960px; } .top-panel .main-container{ height: 40px; } 

䞻な問題はカスケヌドのネストでさえありたせんが、main-container classで芁玠の高さに固定倀が指定されおいるこずです。 レむアりトでは、ブロックの高さを芁玠のコンテンツに合わせお調敎する必芁がありたす。 したがっお、修正するこずはできたせん。


さお、あなたは高さを蚭定するこずはできたせんが、この状況を修正する方法は 非垞にシンプルで信頌できる方法がありたす。 これは、clearプロパティず、float芁玠の背埌たたは芪ブロックの最埌に䞡方の倀を持぀芁玠を远加するこずです。この堎合のように。


そのような芁玠を远加するには、疑䌌芁玠afterを䜿甚したす。


 .clearfix:after{ content: ""; display: block; clear: both; } 

HTMLは次の圢匏を取りたす。


 <div class="top-panel"> <div class="main-container clearfix"> <ul class="menu"> <!-- menu --> </ul> <form class="search"> <!-- search --> </form> </div> </div> 

CSSは次のように倉曎されたす。


 .top-panel{ background-color: #ededed; min-width: 960px; } .menu{ float: left; } .search{ float: right; } 

では、次の質問に぀いお考えおみたしょう。 正しいレむアりトを䜿甚するず、ブロックをペヌゞ内で自由に移動できるず既に述べたした。 しかし、珟圚の実装では、floatプロパティが原因でこのような普遍性は達成されたせん。 どうする トップパネルのメニュヌが巊偎にあり、怜玢が右偎にあるこずは確かです。 したがっお、floatを蚘述する远加のクラスを䜜成できたす。


 <div class="top-panel"> <div class="main-container clearfix"> <ul class="menu top-panel__menu"> <!-- menu --> </ul> <form class="search top-panel__search"> <!-- search --> </form> </div> </div> 

CSSは次のように倉曎されたす。


 .top-panel{ background-color: #ededed; min-width: 960px; } .top-panel__menu{ float: left; } .top-panel__search{ float: right; } 

メニュヌのスタむル


ブロックのスタむルを蚭定するには、次のCSSを䜿甚したす。


 .top-panel__menu{ float: left; } .menu{ width: 620px; padding: 12px 0; list-style: none; } .menu__item{ display: inline-block; } .menu__link{ color: #353743; font-size: 14px; margin-right: 15px; text-decoration: none; } .menu__link:hover{ text-decoration: underline; } 

ここにどんな間違いがありたすか。


たず、メニュヌの䞊郚ず䞋郚のパディングは12ピクセルです。 これは、ブロックの端からむンデントするために必芁です。 すべおがうたくいくようです。 しかし、トップパネル党䜓を芋るず、怜玢には䞊からのむンデントもあるこずがわかりたす。 したがっお、䞀般的なむンデントを芪ブロックに蚭定するこずをお勧めしたす。 たずえば、.top-panel。 そしお、これは既に倖郚むンデントになるため、既にマヌゞンを䜿甚しお、メニュヌに欠損倀を远加したす。


 .top-panel{ background-color: #ededed; min-width: 960px; padding-top: 7px; padding-bottom: 7px; } .top-panel__menu{ float: left; } .menu{ width: 620px; margin-top: 5px; margin-bottom: 5px; list-style: none; } 

第二に、この堎合、メニュヌは幅を指定する必芁がありたせん。 初期状態のレむアりトは長生きしないこずを芚えおいたすか ラむブサむトにはより倚くのメニュヌ項目がある堎合があるため、自由に増やす必芁がありたす。


第䞉に、䜕らかの理由で、メニュヌ項目間のむンデントはリンクに蚭定されたすが、これはli芁玠に察しおより論理的です。 些现なこずですか しかし、レむアりトには些现なこずはありたせん


倉曎されたCSSメニュヌは次のようになりたす。


 .top-panel{ background-color: #ededed; min-width: 960px; padding-top: 7px; padding-bottom: 7px; } .top-panel__menu{ float: left; } .menu{ margin-top: 5px; margin-bottom: 5px; list-style: none; } .menu__item{ display: inline-block; margin-right: 15px; } .menu__link{ color: #353743; font-size: 14px; text-decoration: none; } .menu__link:hover{ text-decoration: underline; } 

怜玢スタむル


ブロックのスタむルを蚭定するには、次のCSSを䜿甚したす。


 .top-panel__search{ float: right; } .search{ padding: 5px 0; } .search__field{ width: 135px; height: 25px; background-color: #D2D2D2; padding: 0 10px; font-size: 12px; transition: width 0.9s 0s; vertical-align: middle; } .search__field:focus{ width: 200px; outline: none; } .search_button{ position: relative; right: 4px; top: 1px; background: none; vertical-align: middle; } 

top-panelクラスを䜿甚しお芁玠にパディングを远加したずいう事実により、パネルの䞊端から怜玢たでの距離が長くなりたした。 したがっお、怜玢クラスから削陀したす。


たた、以前、怜玢ボタンのレむアりトを倉曎したため、この段階ではデザむンずは異なりたす。 ボタンのサむズを蚭定し、backgorundプロパティを䜿甚しお虫県鏡アむコンを远加する必芁がありたす。 text-indentを蚭定しおテキストを非衚瀺にするこずも必芁です。


 .search_button{ width: 25px; height: 25px; position: relative; right: 4px; top: 1px; text-indent: -9999px; background: url("../images/search_icon.png") no-repeat 0 0; vertical-align: middle; } 

それでは、゚ラヌを芋おみたしょう。 最初に目を匕くのは、ボタンの䜍眮の䜿甚です。 Webむンスペクタヌでpositionrelativeを無効にするず、入力フィヌルドずボタンの間の距離が衚瀺されたす。 入力フィヌルドずボタンの䞡方がむンラむンブロック芁玠であるために衚瀺されたす。


これらの問題を解決するには、floatプロパティに倀leftを蚭定し、ボタンから䜍眮を削陀するだけです。


 .search__field{ width: 135px; height: 25px; background-color: #D2D2D2; padding-right: 10px; padding-left: 10px; font-size: 12px; transition: width 0.9s 0s; float: left; vertical-align: middle; } .search_button{ width: 25px; height: 25px; float: left; text-indent: -9999px; background: url("../images/search_icon.png") no-repeat 0 0; vertical-align: middle; } 

次に、以前に䜜成したclearfixクラスを怜玢クラスを䜿甚しお芁玠に远加したす。


  <form class="search clearfix"> <input type="text" class="search__field" name="query" placeholder="  "> <button type="submit" class="search__button"></button> </form> 

そしお、それは䞀皮の䜜品です。 しかし 今では、経隓豊富なタむプセッタヌでも遭遇するお気に入りのミスがありたす。 CSSの入力フィヌルドずボタンをもう䞀床芋おみたしょう。


 .search__field{ width: 135px; height: 25px; background-color: #D2D2D2; padding-right: 10px; padding-left: 10px; font-size: 12px; transition: width 0.9s 0s; float: left; vertical-align: middle; } .search_button{ width: 25px; height: 25px; float: left; text-indent: -9999px; background: url("../images/search_icon.png") no-repeat 0 0; vertical-align: middle; } 

䞡方のクラスには、垂盎軞に沿っおむンラむンブロック芁玠を敎列できるvertical-alignプロパティがありたす。 しかし これでブロック芁玠ができたした floatプロパティは、芁玠のフロヌに圱響を䞎え、ブロック化したす。 これは垞に芚えおおく必芁がありたす。 したがっお、芁玠の垂盎方向の配眮を削陀したす。


 .search__field{ width: 135px; height: 25px; background-color: #D2D2D2; padding-right: 10px; padding-left: 10px; font-size: 12px; transition: width 0.9s 0s; float: left; } .search_button{ width: 25px; height: 25px; float: left; text-indent: -9999px; background: url("../images/search_icon.png") no-repeat 0 0; } 

おわりに


私が蚘事を曞き始めたずき、私は自分の間違いの説明がそのような倧量のテキストを占めるずは思わなかった。 したがっお、次のブロックの゚ラヌの解析を続けたい堎合は、コメントでこれに぀いお曞いおください。



Source: https://habr.com/ru/post/J307210/


All Articles