0

divをこの種の形状に変換してから画像で塗りつぶすことは可能ですか?または、画像をその形状に変換する方がよいでしょうか。CSSまたはJavascriptの両方。次に、このよう

に複数を配置します。2番目の図のように、形状をいくつかのリングにグループ化する予定です。写真はダイナミックになりますので、事前にカットすることはできません。

*編集:私は実際に欲しい効果を見つけました。実はマスキングです。webkitでは、このcssプロパティ:-webkit-mask-box-imageはうまく機能します(マスクにも.png画像を使用できます)が、Firefoxのマスキングを試みた場合(Illustratorで生成された.svgファイルを使用)、機能しません。 tは機能しているようです。同じ.svgファイルは、-webkit-mask-box-imagecssプロパティを使用してChromeで機能します

4

3 に答える 3

2

はい、可能です。JavaScriptやブラウザ固有のプロパティを使用しなくても。

デモ

私はそれをテストしました、そしてそれはChrome、IE、FF、Opera、Safariのすべての現在のバージョン(Windows7上で)で動作します。

アイデアは、異なる角度のスライスを持つ複数のホイールを持つことです(スキュー変換を使用して角度を取得します。スライスも回転変換を使用して回転します)。内側の車輪は外側の車輪の中央部分を覆っています。

私が作成したバージョンは非常に単純なもので、2つのホイール、内側のホイール用に8つの画像(つまり、内側のホイールの各スライスが360°/ 8 = 45°)と外側のホイール用に12の画像(=>外側のスライスの各スライスは360°/12=30°です)。

関連するHTML

<div class='picture-wheel'>
    <div class='outer-wheel wheel'>
        <div class='slice'><div class='bg'></div></div>
        <!-- the rest of the slices, 11 more for this demo -->
        <div class='inner-wheel wheel'>
            <div class='slice'><div class='bg'></div></div>
            <!-- the rest of the slices, 7 more for this demo -->
            <div class='cover-wheel wheel'></div>
        </div>
    </div>
</div>

関連するCSS

.wheel {
    overflow: hidden;
    position: relative;
    border-radius: 50%;
    box-shadow: 0 0 1em;
}
.picture-wheel {
    width: 30em; height: 30em;
    margin: 3em auto 0;
}
.slices-wrapper { 
    position: absolute;
    width: 100%; height: 100%;
}
.slice {
    overflow: hidden;
    position: absolute;
    bottom: 50%; right: 50%;
    transform-origin: 100% 100%;
}
.outer { width: 30em; height: 30em; }
.inner-wheel {
    transform: rotate(7.5deg);
    width: 21em; height: 21em;
    margin: 4.5em;
}
.cover-wheel {
    width: 12em; height: 12em;
    margin: 4.5em;
    box-shadow: inset 0 0 1em;
    background: white;
}
.bg {
    border-radius: 50%;
    background-position: 50% 0;
    background-repeat: no-repeat;
    background-size: 8em 6em;
}
.outer-wheel > .slice {
    width: 15em; height: 15em;
    transform: skewY(60deg);
}
.outer-wheel > .slice:nth-child(2) { transform: rotate(30deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(3) { transform: rotate(60deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(4) { transform: rotate(90deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(5) { transform: rotate(120deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(6) { transform: rotate(150deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(7) { transform: rotate(180deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(8) { transform: rotate(-150deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(9) { transform: rotate(-120deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(10) { transform: rotate(-90deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(11) { transform: rotate(-60deg) skewY(60deg); }
.outer-wheel > .slice:nth-child(12) { transform: rotate(-30deg) skewY(60deg); }
.outer-wheel > .slice .bg {
    width: 30em; height: 30em;
    transform: skewY(-60deg) rotate(-15deg);
}
.outer-wheel > .slice .bg {
    background-image:
        url(image-for-first-slice-outer.jpg);
}
.outer-wheel > .slice:nth-child(2) .bg {
    background-image:
        url(image-for-second-slice-outer.jpg);
}
/* background images for the other slices of the outer wheel */
.inner-wheel > .slice {
    width: 10.5em; height: 10.5em;
    transform: skewY(45deg);
}
.inner-wheel > .slice:nth-child(2) { transform: rotate(45deg) skewY(45deg); }
.inner-wheel > .slice:nth-child(3) { transform: rotate(90deg) skewY(45deg); }
.inner-wheel > .slice:nth-child(4) { transform: rotate(135deg) skewY(45deg); }
.inner-wheel > .slice:nth-child(5) { transform: rotate(180deg) skewY(45deg); }
.inner-wheel > .slice:nth-child(6) { transform: rotate(-135deg) skewY(45deg); }
.inner-wheel > .slice:nth-child(7) { transform: rotate(-90deg) skewY(45deg); }
.inner-wheel > .slice:nth-child(8) { transform: rotate(-45deg) skewY(45deg); }
.inner-wheel > .slice .bg {
    width: 21em; height: 21em;
    transform: skewY(-45deg) rotate(-22.25deg);
}
.inner-wheel > .slice .bg {
    background-image:
        url(image-for-first-slice-inner.jpg);
}
.inner-wheel > .slice:nth-child(2) .bg {
    background-image:
        url(image-for-second-slice-inner.jpg);
}
/* background images for the other slices of the inner wheel */

もう1つのわずかに異なる拡張バージョン:

デモ

于 2012-09-26T05:19:13.443 に答える
0

Canvas要素を使用して描画してみてください

http://jsfiddle.net/m6QgV/6/

これが例です

于 2012-09-26T02:54:27.833 に答える
0

CSS3変換を見てください。標準の行列変換(OpenGLまたはDirectXの場合と同様)を使用できるはずです。

于 2012-09-26T03:03:50.523 に答える