ホームページ >ウェブフロントエンド >jsチュートリアル >CSSとJavaScriptを備えた丸い角
数年前、これは許容可能な解決策だったでしょう。今日、それは醜いハックです。それは、比較的重要でない視覚装飾のための非常に多くの冗長なマークアップです。実際、上記のコードは、厳格なDoctypeを使用して提供されるドキュメントで意図されているとおりに機能しません。小さなギャップは、画像がインライン要素であるため、「Y」や「J」などの文字の「尾」の画像の下にスペースを残すという事実によって引き起こされるコーナー画像の下に表示されます。エリック・マイヤーが画像、テーブル、神秘的なギャップで説明したように、ソリューションは、次のルールをスタイルシートに追加することです。
td img { display: block; }ここに示すように、これは望ましい結果を生成します
しかし、今ではCSSハックを使用して醜いテーブルハックを修正しています! CSSのみを使用して同じ効果を実装する方法を見てみましょう。
一般的なルールとして、CSS背景画像は非常に強力なものです。その証拠については、CSS Zen Gardenに展示されている多くの素晴らしいデザインを見るだけです。 CSSを使用して、背景画像をページ上の任意の要素に適用できます。さらに、水平方向に、垂直に繰り返すことができます。絶対測定を使用して、または4つの角のいずれかに対する画像の背景領域内に配置できます。要素のコンテンツがスクロールした場合、固定された状態に保つこともできます。残念ながら、CSS 2には1つの小さなが重大な制限が課されます。ページ上の各要素にのみ単一の背景画像を適用できます。
装飾的なコーナーを適用しているボックスの幅が固定されている場合、問題の半分はすでに解決されています。ボックスが常に200ピクセルの幅であることがわかっている場合、4つの背景画像(1つのコーナーに1つ)を作成する代わりに、2つを作成できます。1つはボックスの上部、もう1つは下用です。課題は、2つの背景画像を
丸い角のあるボックスは、コンテンツが含まれていなければ、それほど面白くありません。以下を検討してください:
td img { display: block; }
かなりシンプルですよね?ボックスのタイトルは
<div > <h3>Exciting features!</h3> <p>Your new Widget2000 will...</p> <ul> <li>... clean your shoes</li> <li>... walk your dog</li> <li>... and balance your cheque book!</li> </ul> </div>ここをクリックして結果を確認してください。
よく構成されたドキュメントには、通常、このようなフックがいっぱいになり、複数の背景を適用して特定の視覚効果を達成するために慎重に悪用されます。それらを識別することを学ぶことは、CSSとの作業の重要な部分です。
ネストされた要素
および、css:
div.rounded { width: 200px; background: #1b5151 url(200pxbottom.gif) no-repeat bottom center; padding-bottom: 15px; } div.rounded h3 { padding-top: 15px; background: transparent url(200pxtop.gif) no-repeat top center; }
ここに示すようにコードが表示されます。
<div ><div><div><div> Content goes here </div></div></div></div>
ここで何が起こっているのかはっきりしているはずです。 4つのDivのそれぞれには、それぞれ右上、左、下部右、および下左に配置された丸い角の背景画像が割り当てられています。含まれるdivの幅は200pxに設定されていますが、液体のデザインで使用するためにより柔軟なものに簡単に設定することができます。含まれるdivがどんなに大きくても小さくても、角はまだ機能します。
問題の解決策があります。これは、元のテーブルの例よりもはるかに少ないマークアップを使用します。しかし、それはまだ完璧ではありません。それは3つの余分なDIVを使用しており、ドキュメント全体の構造に価値のないものは何も追加しません。もっと良くできますか? javascriptに目を向ける時です。JavaScriptとDOMを使用して、ドキュメントがブラウザによってロードされた後にドキュメントの構造を操作することができます。丸い角は、サイトの全体的な経験を大幅に減らすことなく、非JavaScriptユーザーエージェントから隠すことができるプレゼンテーション効果であるため、この種の変換にJavaScriptを使用することに倫理的な問題はありません。最終的なソリューションでは、ソースドキュメントには単一の
td img { display: block; }コンテンツが段落として構造的に定義されている場合は
と
と交換する場合を除き、それよりも簡単にするためにできることはあまりないことに同意すると思います。このスイッチを作成することは、読者のためのエクササイズとして残されています。
ここにJavaScript:
がありますスクリプトは、2つの論理セクションに分割されます。最初のセクションでは、ドキュメント内のすべての
<div > <h3>Exciting features!</h3> <p>Your new Widget2000 will...</p> <ul> <li>... clean your shoes</li> <li>... walk your dog</li> <li>... and balance your cheque book!</li> </ul> </div>
ここでは、元の
div.rounded { width: 200px; background: #1b5151 url(200pxbottom.gif) no-repeat bottom center; padding-bottom: 15px; } div.rounded h3 { padding-top: 15px; background: transparent url(200pxtop.gif) no-repeat top center; }
外側の
<div ><div><div><div> Content goes here </div></div></div></div>W3C DOMは、ドキュメント内のノードを別のノードに置き換える直接的な方法を提供しません。代わりに、Nodeの交換Child()メソッドを使用して、子供の1人を別のノードに置き換える必要があります。見ているノードを交換するのに役立つトリックは、ParentNodeプロパティを使用して自分の親にアクセスし、/#c#.replaceChildを使用して他の何かに交換することです。それが意味がない場合は、心配しないでください。上記の行を、作成したばかりの新しいTRノードに置き換えると考えてください。
3つの新しい
td img { display: block; }この時点で、実際のドキュメントツリーは、上記の4つのネストされた
これが結果です。
<div > <h3>Exciting features!</h3> <p>Your new Widget2000 will...</p> <ul> <li>... clean your shoes</li> <li>... walk your dog</li> <li>... and balance your cheque book!</li> </ul> </div>
div.roundedの最初のルールセットは、JavaScriptを実行しないブラウザでのみ使用されます。幅は170pxとパディング15pxであり、合計幅は200px(幅と左右のパディング)になることに注意してください。これをIE 5/Windowsで動作させる必要がある場合は、パディング値を異なる方法で解釈するため、悪名高いボックスモデルハックを適用する必要があります。前の例では、2番目のルールセットがすでに見られました。
先を見てください
CSSを備えた丸い角を作成するにはどうすればよいですか?CSSで丸い角を作成するのは非常に簡単です。 「Border-Radius」プロパティを使用してこれを達成できます。 「Border-Radius」プロパティには、1、2、3、または4つの値を持つことができます。単一の値は、4つの角に同じ半径を適用します。 2つの値は、最初の半径を左上および右下の角に適用し、2番目の半径は右上角と左上角に2番目の半径を適用します。 3つの値は、最初の半径を左上に、2番目は右上左と左下左に、3番目は右下に適用されます。 4つの値は、各コーナーに異なる半径を適用します。たとえば、divのすべてのコーナーに10px半径を適用するために、順に上部左上、右上、下部右、底左側に順序で適用されます。
はい、JavaScriptで丸い角を作成できますが、この目的のためにCSSを使用する方が一般的です。ユーザーの入力またはその他の要因に基づいて動的に丸いコーナーを作成する必要がある場合、JavaScriptがより良い選択かもしれません。 「canvasrenderingcontext2d.roundRect()」メソッドを使用して、キャンバスに丸い角が付いた長方形を描画できます。この方法では、長方形の左上隅のxおよびy座標、長方形の幅と高さ、角の半径の5つのパラメーターが必要です。 「Border-Radius」プロパティを50%に設定すると、コーナーは円を形成するのに十分なほど丸くなります。要素には、幅と高さも等しい必要があります。たとえば、
border-radius:50%;
}
これは完璧な円であるdivを作成します。 「Border-Radius」プロパティの異なる値を指定することにより、要素。たとえば、divの左上および右上の角のみを丸めるには、次のものを使用します:
div {
border-radius:10px 10px 0;
}
丸い角で境界線を作成することは、丸い角を持つ要素を作成するのと同じくらい簡単です。 「Border-Radius」プロパティを国境のある要素に適用するだけです。たとえば、
div {border:1px solid black;
border-radius:10px;
}
はい、「ボーダーラジウス」プロパティの各コーナーの2つの値を指定することにより、CSSで楕円形のコーナーを作成できます。最初の値は水平半径で、2番目の値は垂直半径です。たとえば、
div {
border-radius:10px 20px;
}
これにより、水平半径が10pxと垂直半径が20px。
はい、CSSトランジションまたはアニメーションを使用して「Border-Radius」プロパティをアニメーション化できます。たとえば、2秒間で境界半径を0から50%に徐々に変更するには、
div {border-radius:0;
transition:border-radius 2s;
}
div:hover {border-radius:50%;
img {
}
以上がCSSとJavaScriptを備えた丸い角の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。