4

以下に示すように、3 つの画像で構成されるアンカー タグを使用して HTML ボタンを作成しました。

<body>
    <ul>
        <li>
            <a href="#" class="my_button">
                <div style="width:77px">
                    <div class="left"></div>
                    <div class="middle">Log In</div>
                    <div class="right"></div>
                </div>
            </a>
        </li>
    </ul>
</body>

結果ボタンは次のようになります。

ボタン画像

私のCSSコード:

.my_button .left {
    background: url("./images/left.png") left center no-repeat;
}

.my_button .right {
    background: url("./images/right.png") left center no-repeat;
}

.my_button .middle {
    color:#FFFAF0;
    background: url("./images/middle.png") repeat-x;
}

3 つの画像を構成するボタンを作成するより良い方法はありますか? ページに 10 個のボタンを作成する必要があり、10 個のボタンに対して上記のアプローチに従うとコードが重複するためです。何か提案はありますか?

4

8 に答える 8

1

どのような種類のブラウザ サポートが必要ですか? そして、優雅な劣化で大丈夫ですか?(つまり、古いブラウザーではボタンの外観がまったく同じではありませんが、それでも完全に機能します)。

疑似要素あり

これらを使用すると、1 つの html 要素のみが必要になり、残りは CSS で実行できます。

.my_button:before {
        content:'';
        background: url("./images/left.png") left center no-repeat;
        position:absolute;
        left:0;
        height:XXpx;
        width:XXpx;
    }

    .my_button:after {
        content:'';
        background: url("./images/right.png") left center no-repeat;
        position:absolute;
        right:0;
        height:XXpx;
        width:XXpx;
    }

    .my_button .middle {
        color:#FFFAF0;
        background: url("./images/middle.png") repeat-x;
    }

上記のコードでは、XXpx は背景画像要素の高さと幅である必要があります。

または CSS3 を使用

これはもっと良い方法です: CSS3 を使用してボタンのスタイルを設定するだけです:

.my-button {
    border-radius:5px; /* don't forget browser prefixes */
    padding:Xpx;
    border:solid 1px blue;
    /* code for css gradient */
}

CSS グラデーション ジェネレーターを使用する

この方法は、すべてのブラウザーで機能するとは限りません。代わりに、ユーザーには、border-radius とグラデーションのないログイン ボタンが表示されますが、それでも問題なく機能します。

于 2013-07-29T12:20:46.887 に答える
0

ここに1つの方法があります:

html を整理して、共通のクラスでプレーンなアンカーを使用することから始めます。

<ul>
    <li> <a href="#" class="my_button">Log In</a></li>
    <li> <a href="#" class="my_button">Other Function</a></li>
    <li> <a href="#" class="my_button">Extra Function</a></li>
</ul>

次に、jQuery を使用して、そのクラスのすべてのアンカーに余分な div を挿入します。

$("a.my_button").html(function (i, oldHtml) {
  return '<div style="width:' + ($(this).width()+40) + 'px"><div class="left"></div>' +
         '<div class="middle">' + oldHtml + '</div>' +
         '<div class="right"></div></div>';
});

(関数を渡すと、.html()一致する要素ごとに 1 回、関数が繰り返し呼び出され、関数からの戻り値が現在の要素の新しい html になります。)

于 2013-07-29T12:17:10.963 に答える
0

「ボタン」要素を使用するだけです。何を達成したいのか完全にはわかりませんが、10 個のボタンに同じクラスを与えることができます。

HTML:

<button class="myButton" onClick="location.href='myPage.html'")>Log In</button>
<button class="myButton" onClick="location.href='anotherPage.html'")>Next Link</button>

CSS:

.myButton{
   background-image:url("image.jpg");
}

.myButton:hover{
   background-image:url("hover.jpg");
}

私はあなたが達成しようとしていることに完全に基づいていない可能性がありますが、それはあなたが達成しようとしていると私が思うものにはうまくいきます.

ボタンのスタイルをまったく設定せず、それ自体で素敵なホバー効果を得ることもできますが、すべてのブラウザーで同じになるわけではありません。

あなたが持っているような通常のアンカータグを使用して、すべてのボタンで動作するクラスを与えることもできます:

<a class="myButton" href="myPage.html">Log In</a>
<a class="myButton" href="anotherPage.html">Link 2</a>

ああ、それをしたくない場合は、ボタンを現在と同じままにして、HTML を複製し、アンカーのリンク先とテキストを次のように変更します。

<body>
    <ul>
        <li>
            <a href="#" class="my_button">
                <div style="width:77px">
                    <div class="left"></div>
                    <div class="middle">Log In</div>
                    <div class="right"></div>
                </div>
            </a>
        </li>
        <li>
            <a href="#1" class="my_button">
                <div style="width:77px">
                    <div class="left"></div>
                    <div class="middle">Different link</div>
                    <div class="right"></div>
                </div>
            </a>
        </li>
        <li>
            <a href="#2" class="my_button">
                <div style="width:77px">
                    <div class="left"></div>
                    <div class="middle">Another link.</div>
                    <div class="right"></div>
                </div>
            </a>
        </li>
    </ul>
</body>

PHP ソリューションの追加。

functions.php:

<?php 
    function myButton($link, $title){
     echo  '<a href="'.$link.'" class="my_button">
            <div style="width:77px">
                <div class="left"></div>
                <div class="middle">'.$title.'</div>
                <div class="right"></div>
            </div>
        </a>';
    }
?>

新しいページは page.php (html ではない) になります。

page.php:

<?php
include_once 'functions.php';
?>
<body>
        <ul>
            <li>
             <?php myButton('link.html', 'Click Me') ?>
            </li>
            <li>
             <?php myButton('anotherlink.html', 'No, Click Me!') ?>
            </li>
        </ul>
</body>

これにより、現在の構造を維持しながら、コードを削減できます。また、コードを 1 行入力するだけで、ボタンを動的に追加できます。

さらに情報が必要な場合はお知らせください。

于 2013-07-29T12:37:41.810 に答える
0

CSS3 を使用することをお勧めします。

.mybutton{ width:120px; border-radius:5px; background:#c3c3c3; padding:5px; }

また、最新の CSS クラスを使用することもできます。

于 2013-07-29T12:13:33.260 に答える
0

より良い方法は、css でボタンを作成することです。

a.button {
    text-decoration: none;
    background: #FFF;
    padding: 5px 10px;
    border: 1px solid #CCC;

    /* Adding Vendor Prefixes to ensure the best browser support 
       -moz-    : Gecko based browsers
       -webkit- : WebKit implementations
       -ms-     : Internet explorer's
       -o-      : Opera
    */

    /* Background Gradient */
    background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #F9F9F9), color-stop(100%, #E9E9E9));
    background-image: -webkit-linear-gradient(top, #F9F9F9, #E9E9E9);
    background-image: -moz-linear-gradient(top, #F9F9F9, #E9E9E9);
    background-image: -o-linear-gradient(top, #F9F9F9, #E9E9E9);
    background-image: linear-gradient(top, #F9F9F9, #E9E9E9);

    /* Gradient for IE6+ */
    filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, startColorstr='#f9f9f9', endColorstr='#e9e9e9');

    /* Border radius */
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
}

しかし、インターネット エクスプローラー 6-9 で、border-radius やその他の CSS3 装飾をレンダリングできるようにしたい場合は、CSS3PIE を含めることができます。

http://css3pie.com/

于 2013-07-29T12:42:33.230 に答える
0

エフェクトと呼ばれるものを使用して、これを 2 つの画像に減らすことができますsliding doors。中央の背景が非常に広い左キャップ画像も作成します。次に、2 番目の右キャップ イメージを作成します。

左/中央の画像は外側の div に入り、その内側に右のキャップ画像を持つ div が入ります。

彼らは投稿で、これはもはやベスト プラクティスではないと述べています。グラフィックの背景を作成していて、ボタンを作成するために CSS3 効果に頼ることができない場合でも、これは優れた手法であると言えます。記事の作成時期が古い (2003 年) ため、自動通知である可能性があります。

このページの他の場所で提案されているように、CSS スプライトを使用してこれを 1 つの物理的な画像に切り詰めることができます。

このヒントは 2012 年のもので、スプライトと引き戸を組み合わせたものです。

于 2013-07-29T12:31:18.977 に答える