7

ここの最初の画像は、Webデザイナーによって作成されたドラフトです。

ここの2番目の画像は、このための適切なHTML/CSSレイアウトを作成した結果です。

問題は、適切なHTML5とCSSのみを使用して、評価ピルの周りにこの透明なフィールドを作成するにはどうすればよいかということです。ソリューションは、クロスブラウザーで超互換性がある必要があります(IE7以降を含む)。

定格ピルの幅は固定されておらず、その中の数に依存するため、透明なフィールドはこれを反映する必要があります。

これが私の現在のレイアウトです:

<div class="evo-module-c4b style="background-image: url('/i/oranges.jpg');">

    <div class="price">
        <span class="icon"></span>
        <span class="value">10,950</span>
    </div>

    <div class="die"></div>

    <div class="rating-wrapper">
        <div class="evo-rating">
            <span class="value">+100500</span>
        </div>
    </div>

    <div class="content">
        <h2>Lorem ipsum dolor</h2>
        <p class="author">Donec et</p>
        <p class="data">24.08.2012 10:53</p>
        <h3>Nunc pellentesque justo diam, sed dictum dolor.</h3>
    </div>

</div>

以下:

div.evo-module-c4b {
    position: relative;
    width: @module-big-width;
    height: 250px;
    background-color: @color-gray-1;
    background-position: 0 0;
    background-repeat: no-repeat;
    overflow: hidden;

    div.price {
        position: absolute;
        top: 18px;
        right: 24px;
        span.icon {
            display: block;
            float: left;
            width: 16px;
            height: 16px;
            background-image: url('/i/evo/icons-imageset.png');
            background-position: -20px 0;
            background-repeat: no-repeat;
        }
        span.value {
            display: block;
            float: left;
            margin-left: 4px;
            font-size: 18px;
            font-weight: bold;
            color: @color-white;
        }
    }

    div.die {
        position: absolute;
        left: 0;
        bottom: 0;
        width: 100%;
        height: 108px;
        background-color: @color-gray-10;
        //background-image: url('/i/evo/modules/c4b/die.png');
        background-position: 0 0;
        background-repeat: no-repeat;
        z-index: 0;
    }

    div.rating-wrapper {
        position: absolute;
        width: 100%;
        top: 122px;
        text-align: center;
        div.evo-rating {
            display: inline-block;
        }
    }

    div.content {
        position: absolute;
        left: 0;
        top: 172px;
        width: 100%;
        z-index: 1;

        h2, h3, p {
            margin: 0;
            padding: 0;
            line-height: normal;
            text-align: center;
        }

        h2 {
            font-size: 18px;
            font-weight: bold;
        }

        p.author {
            font-size: 12px;
            font-weight: bold;
        }

        p.data {
            font-size: 10px;
            color: @color-gray-4;
        }

        h3 {
            font-size: 12px;
            color: @color-gray-4;
        }
    }
}

div.evo-rating {
    span.value {
        .evo-border-radius(@rating-height / 2 + 3px);
        display: block;
        height: @rating-height;
        font-size: 18px;
        font-weight: bold;
        line-height: @rating-height;
        color: @color-major;
        background-color: @color-white;
        border: 3px solid @color-major;
        padding: 0 5px;
    }
}

助言がありますか?)。

4

5 に答える 5

2

穴にアルファが付いた画像の灰色の背景を変更し、画像の上に追加します。幅が変わる可能性があるため、異なるサイズが必要になる場合があります。

于 2012-08-24T12:52:01.003 に答える
2

moopetから提供されたコメントから、私はこの回答を作成し、彼のアイデアを説明するjsFiddleを作成しました。

ページ構造

私はこれがあなたのページを構成するHTMLであるという仮定で働いています:

<div class="picture">

  <div class="pill-wrapper">
    <div class="pill">+1030</div>
  </div>

  <div class="content">
  </div>    

</div>​

この透明なピルの境界にどのようにアプローチしますか?

moopetがコメントで私たちに与えた考えを理解すると、.pill-wrapperを絶対に配置できます(そして、LESS変数*を使用して正しい中心位置を見つけることができます)。この.pill-wrapperにパディングとborder-radiusを与えると、背景を使用して偽の透明な境界線を作成できます。表示されている画像と一致するように背景を設定background-positionし、ページ上の評価ピルの位置と一致させるために使用するだけです(ここでも、LESS変数を使用すると、これが簡単になります)。

これはCSSにどのように変換されますか?

以下に示すCSSを調べてください。重要なCSSのみが示されていることに注意してください。フォントのスタイルはすべて自分で適用する必要があります。

.picture {
  position: absolute;

  width: 100%;
  height: 500px;

  background: url('http://goo.gl/Zi4hw');
}

.pill {
  box-sizing: border-box;

  width: auto;
  height: 36px;
  padding: 5px;

  background: #0066aa;
  border-radius: 18px;
  border: 2px solid #ffffff;
}

.pill-wrapper {
  position: absolute;
  top: 225px;
  left: 100px;

  height: 36px;
  padding: 10px;  

  background: url('http://goo.gl/Zi4hw') -100px -225px;
  border-radius: 36px;

}

.content {
  height: 250px;
  margin-top: 250px;
  background: rgba(255,255,255,0.9);
}

この方法には明確な問題があります。まず、LESSはすべてを前処理しますが、動的でも流動的でもないことに注意してください。たとえば、水平方向のブラウザーのサイズ変更中にピルを中央に維持するために、追加のJavascriptがおそらくそして残念ながら機能するはずです。第二に、調査すべき互換性の問題がおそらくいくつかあります。

しかし、基本はあなたが作業するためにここにあります。

提案されたソリューションの実際の動作は、http: //jsfiddle.net/bakkerjoeri/R99NT/3/で確認できます。

**:LESSでのコーディングの経験がないので、私が想定している誤りについてお詫びします。お気軽に訂正してください。*

于 2012-08-24T15:21:47.883 に答える
1

私に関しては、本当に簡単な解決策はありません。しかし、私はいくつかのdivを使用してブロックと評価を組み合わせようとします。アイデアは、下半分が灰色で上が透明な灰色の背景を持ついくつかの画像を準備できるということです。ピル自体の問題は、3(?)divから組み合わせることで解決できます。1つは左の丸い境界線用です。これは、境界線、灰色の背景など、下にある画像が表示される透明な部分のある画像にすることができます。1つはそれ自体を評価するためのもので、もう1つは右の丸い角のためのものです。すべてが並んで配置される方法で構築された背景画像を持っているでしょう、彼らはその丸薬を作ります。そして今、あなたはそれをすべてあなたの一番上の画像の上にシフトする必要があります。

于 2012-08-24T12:58:31.217 に答える
1

最も近い解決策には以下が含まれる可能性がありますが、完全に達成することは不可能だと思います。

ピルと同じですが、より大きな要素を作成します。絶対-新しい要素をピルの下に配置しますが、大きくします。メインの「オレンジ」の画像と同じ背景画像を与えますが、正しく整列するように背景の位置をいじります。これは明らかに、残りのcssの実装に依存します。

于 2012-08-24T15:08:31.017 に答える
0

ピルがセレクター「:after」と「:before」で作成されている場合、左側と右側に灰色のdivを作成し、ピルの近くであるが反対側に境界半径を入力できます。ピルの下に大きな灰色のものを置くことができます。

于 2012-08-24T13:15:05.280 に答える