9

わかりました、これはしばらくの間私を悩ませてきた問題であり、いくつかの良い解決策と悪い解決策を見てきました。しかし、最善の解決策とは何か、落とし穴、欠点、大きな「いいえ、いいえ」とは.

私が望むのは、カスタムのグラフィカルな境界線を持つ動的で柔軟な DIV ブロックを作成することです。たとえば影付きの DIV ボックスですが、影があるとは限りません

更新: @Jeroen がコメントで次のように述べているように、私は「影を作成する最良の方法」を求めているだけではありません。クレイジーなカスタムグラフィカル ボーダー

box-shadowCSS3 ( 、border-imageおよびborder-radius)を使用したいくつかのソリューションがあることは知っていますが、 100% クロスブラウザーではありません。特に、1 つまたは 2 つのバージョンの古いブラウザーで作業する必要がある場合はそうではありません。

私が達成したいものの例の画像:

CSS サンプル画像を使用した DIV のカスタム グラフィカル ボーダー

また

CSS サンプル画像を使用した DIV のカスタム グラフィカル ボーダー

上記の例は、私が頻繁に使用する 1 つの方法で実際に行われています。それは仕事をし、すべての要件を満たしています。

  • さまざまなサイズの DIV ブロックに適応します。
  • カスタムグラフィックを使用しています。
  • クロスブラウザーとバージョンで動作します。
  • 適用は非常に簡単で迅速です。
  • JavaScript がなく、100% CSS/HTML です。

...しかし、もちろんいくつかの短所があります。

  • 8枚の画像が必要です。
  • 実際のコンテンツのない8 つの追加の DIV ブロックが必要です。
  • ソースではあまりきれいではありません。

HTML DIV ブロックの例:

<div class="flowBox">
    <h1>Header 1</h1>

    Vivamus tincidun...

    <div class="border_t"></div>
    <div class="border_b"></div>
    <div class="border_l"></div>
    <div class="border_r"></div>
    <div class="border_br"></div>
    <div class="border_bl"></div>
    <div class="border_tr"></div>
    <div class="border_tl"></div>
</div>

CSS の例:

<style type="text/css">
<!--
.flowBox {
    background:#FFFFFF;
    margin:10px;
    float:left;
    padding:10px;
    width:250px;
    position:relative;
}
.border_t {
    background:url(border_t.png) repeat-x;
    position:absolute;
    top:-2px; left:0;
    width:100%;
    height:2px;
}
.border_b {
    background:url(border_b.png) repeat-x;
    position:absolute;
    bottom:-6px; left:0;
    width:100%;
    height:6px;
}
.border_l {
    background:url(border_l.png) repeat-y;
    position:absolute;
    top:0; left:-3px;
    width:3px;
    height:100%;
}
.border_r {
    background:url(border_r.png) repeat-y;
    position:absolute;
    top:0; right:-6px;
    width:6px;
    height:100%;
}
.border_br {
    background:url(border_br.png);
    position:absolute;
    bottom:-6px; right:-6px;
    width:6px;
    height:6px;
}
.border_bl {
    background:url(border_bl.png);
    position:absolute;
    bottom:-6px; left:-3px;
    width:3px;
    height:6px;
}
.border_tr {
    background:url(border_tr.png);
    position:absolute;
    top:-2px; right:-5px;
    width:5px;
    height:2px;
}
.border_tl {
    background:url(border_tl.png);
    position:absolute;
    top:-2px; left:-2px;
    width:2px;
    height:2px;
}
-->
</style>

ご覧のとおり、これはおそらく最適なソリューションではありません。 しかし、より良い方法はありますか?

更新: 1 つの標準ではありませんが、ほとんどのブラウザーとバージョンでシャドウがサポートされています。css-shadow を使用したソース: http://pastebin.com/LZHUQRW9 しかし、私の質問はシャドウだけに関連するものではありません。

完全なソース コード: http://pastebin.com/wxFS2PHr

4

3 に答える 3

3

http://css3pie.comをご覧ください。

これにより、古いブラウザーで CSS 3 要素を使用できるようになり、マークアップをよりクリーンに保つのに役立つはずです。

また、CSS 3 をサポートするブラウザーでは CSS 3 を使用し、他のブラウザーでは CSS Pie 機能に戻すロジックを追加することもできます。

于 2012-05-08T13:58:38.070 に答える
2

次のようなものを試すことができます: http://robertnyman.com/2010/03/16/drop-shadow-with-css-for-all-web-browsers/

同じことを達成するために、JavaScript、.htcなど、他にも多くのライブラリがあると思います。

編集: 8 枚の異なる写真を使用することはできないと思います。ただし、必要な DIV をオンザフライで追加する JavaScript を作成することもできます。たとえば、クラス境界を持つ各 DIV についてです。

これにより、HTML マークアップがクリーンアップされますが、DOM は複雑なままです..

于 2012-05-08T13:44:13.123 に答える
0

おそらく、css-tricks usingに関するこの記事をborder-imageお探しですか? リンク先のインタラクティブなデモは、あなたが求めていることをしているようです。

もちろん、このソリューションはcss3 border-imageをサポートするブラウザでのみ利用できます。上記のデモは、FF と Chrome では機能しましたが、IE9 では機能しませんでした。Modernizr のドキュメントによると、 のサポートを追加するために使用できますがborder-image、自分で試したことはありません。それが機能する場合、これは比較的クリーンなソリューションを提供します。

于 2012-05-08T18:29:50.390 に答える