3 div-aの角丸

レイアウトで角を丸くする方法はたくさんあります。 そして、すべてのブラウザポーリングがborder-radiusプロパティのサポートを開始するまで、特定のプロジェクトでどのメソッドを使用するかについて考える必要があります。

固定サイズのブロック基板の使用から、vmlまたはsvgを使用したコーナーの作成まで、さまざまな方法があります。 このトピックでは、この主題に関する多くの情報があるため、よく知られている方法については検討しません。 さらに別のメソッドを作成してみました。

すぐに予約します。私の方法は万能薬ではなく、いくつかの欠点があります。これらについて詳しく説明します。

簡単に説明します。

理論


角が丸いブロックを作成する必要があるとしましょう。
私の意見では(私は「私の」と言いますが、まだこの方法を満たしていないので、もし正しい場合)、3つのディーバと1つの画像が必要です。

たとえば、簡単な絵を描いてみましょう。

コーナー
そして彼女のコーナーを呼び出す

その上に4つのコーナーがあり、1つのスプライトで立ち往生しています。
この場合、私は16ピクセルに等しい画像幅を取りました-通常の場合は1emに等しいです。
この値は覚えておく必要があります-1つの「クォンタム」の幅であり、他のすべてのサイズはその倍数であるか、2、3倍に減少するためです-0.5、0.25、0.125 ...

ここで、固定サイズのブロック(たとえば、20emから3em)があるとします。
彼にスタイルを付けると

背景:url(corners.png)繰り返し;

その後、最終的に次の結果が得られます。

マルチコーナー

次のステップは、この中にコンテナを追加することです。 今のところ、概略を示します:

最初のブロックを挿入

ご覧のとおり、このコンテナの幅は親の100%(水平および100%-1量)であり、通常は親コンテナの背景と重なります。

同じ方法を使用して、作成したものに別のコンテナーを作成します。

最初の2番目のブロックに挿入する

ご覧のとおり、そのようなブロックの高さは親から100%+ 1クォンタムで、幅は100%-1クォンタムです
これがメソッド全体です。

実装


この場合のマークアップ自体は、言われたように見えます-せいぜい3 div
     <div class = "panel">
         <div class = "h">
             <div class = "v"> Hello world、私はリンゴとプラムが好きな美しい男です</ div>
         </ div>
     </ div>	


cssファイルもそれほど複雑ではありません。 この場合のcssはコンテンツの動的な高さ(高さはクォンタムの倍数)であることを考慮する価値がありますが、固定の高さで実行できます
	 .panel {
		位置:相対;	
		 float:左;	
		幅:19em!重要; 
		幅:20em;  / * IA 6の場合* /
		背景:url(corners.png)繰り返し;
		
		パディング:0.5em 1em 0.5em 0!重要;		
		パディング:0.5em 0;  / * IA 6の場合* /


	 }
	 .v {	
		背景:#0f0;
		位置:相対;	
		 float:左;
		フォント:1em / 1em Arial、Helvetica、sans-serif normal;
		マージン:-0.5em 0;
		パディング:0.5em 0;
		幅:100%;
	 }
	 .h {
		背景:#00f;	
		位置:相対;
		 float:左;
		幅:100%;
		パディング:0 0.5em 0 0.5em;
	 }


私は思う-すべてが簡単であり、追加の説明は必要ありません。

その結果、優れたbrowsershots.orgサービスから、すべてのブラウザーで同じ結果が得られたことがわかります。これは次のようになります。

結果

短所


この方法の欠点は次のとおりです。

長所



プラスよりもマイナスが多いように見えるかもしれませんが、それはあなた次第です。 メッシュ設計を使用する場合、この方法は(私の意見では)うまくいくでしょう。

UPD: デモを見ることができます

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


All Articles