唐山网站定制:如何使用CSS 3D变换创建等距布局

2019.08.02 mf_web

174

我们从Envato的最新计划中为本教程汲取灵感; Envato Elements。Elements的主页提供了一系列创意产品(字体,  图标,  图形模板  等),它们在整齐的等距网格布局上一起显示。

元素主页
该元素的主页

我们将使用CSS 3D Transforms重新创建这个等距景观。唐山网站定制

等距投影

天线宝宝第一高手论坛-tt538天线宝宝开奖结果-天线宝宝论坛精选资料专区-天线宝宝论坛开奖结果“等距投影”是一种方法(通常用于80年代和90年代的工程和游戏,其中3D处理能力非常有限),用于呈现明显三维的设计。 

使用等轴测投影查看某些对象。图片来自维基百科。

这些不是我们在现实生活中体验过的三个维度 - 它们展示的平面缺乏视角。

Z轴

天线宝宝第一高手论坛-tt538天线宝宝开奖结果-天线宝宝论坛精选资料专区-天线宝宝论坛开奖结果多年来,网络一直是一个二维环境,我们习惯于沿两个轴或方向定位元素:x轴(水平)和y轴(垂直)。 

注意:与原始笛卡尔坐标原理相反,卷筒纸上的y轴反转  ,因为从上到下读取卷筒纸。

天线宝宝第一高手论坛-tt538天线宝宝开奖结果-天线宝宝论坛精选资料专区-天线宝宝论坛开奖结果第三轴,即z轴,需要投影3D视图。该轴表示  深度,物体沿z轴的运动方向与我们的视点有关; 它可能会移动到上下,上下或近远。

3D平面中的三轴x,y和z。图片来自W3C。

这三个轴可应用于CSS变换功能以创建3D投影。在下面的演示中,我们使用  rotateX(),  rotateY()和  rotateZ() 函数来创建一个矩形的等角投影:

天线宝宝第一高手论坛-tt538天线宝宝开奖结果-天线宝宝论坛精选资料专区-天线宝宝论坛开奖结果现在我们已经有了等轴测投影的基本原理,我们可以将其付诸实践。我们从HTML开始。

HTML

与Envato Elements主页类似,我们有一个网格布局。我们的网格包含一列九列。每列包含一个产品图像,指向产品页面的链接,如下所示,span 我们将使用一个  元素来模拟图像阴影。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<div class="row">
    <div class="column">
        <div class="ItemCard">
            <a class="ItemCard__dest cover" href="https://elements.envato.com/items/type/fonts/herbert-lemuel-GHH8KT" target="_blank"></a>
            <figure class="ItemCard__thumb">
                <img src="./images/001.jpg" height="340" width="510" alt="">
                <span class="shadow cover"></span>
            </figure>
        </div>
    </div>
    <div class="column">
        <div class="ItemCard">
            <a class="ItemCard__dest cover" href="https://elements.envato.com/items/type/add-ons/roller-paint-brush-EZ9ZVZ" target="_blank"></a>
            <figure class="ItemCard__thumb">
                <img src="./images/002.jpg" height="340" width="510" alt="">
                <span class="shadow cover"></span>
            </figure>
        </div>
    </div>
    <!-- 7 more items... -->
</div>

CSS

天线宝宝第一高手论坛-tt538天线宝宝开奖结果-天线宝宝论坛精选资料专区-天线宝宝论坛开奖结果我们从重置某些元素的默认样式的样式开始。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
html {
    box-sizing: border-box;
}
*, *:before, *:after {
    box-sizing: inherit;
}
img {
    max-width: 100%;
    height: auto;
    display: block;
}
figure {
    margin: 0;
}

天线宝宝第一高手论坛-tt538天线宝宝开奖结果-天线宝宝论坛精选资料专区-天线宝宝论坛开奖结果这些样式设置了所有元素box-sizing,这将使得确定元素总大小更容易预测。我们还将图像渲染设置block为删除图像底部的小空白。最后,我们删除figure包装图像的元素边距。

然后我们继续进行行和列样式。

01
02
03
04
05
06
07
08
09
10
11
12
13
.row {
    width: 960px;
    display: flex;
    flex-wrap:wrap;
    justify-content:flex-end;
    transform: rotateX(60deg) rotateY(0deg) rotateZ(-45deg);
}
.column {
    padding:20px;
    width:50%;
    max-width: 50%;
    flex: 1 1 50%;
}

天线宝宝第一高手论坛-tt538天线宝宝开奖结果-天线宝宝论坛精选资料专区-天线宝宝论坛开奖结果上面的样式将行设置为display: flex,将变换样式设置为3D,以便浏览器正确地遵循z轴变换,旋转行以创建等轴测视图,最后将行内的列分成一半。

接下来,我们必须添加在3D视图中定位行和列的子元素的样式。以下风格至关重要。的transform-style: preserve-3d具有下被包装的每个元素被声明.row,以使它们能被正确地呈现在3D空间-具体地,在Firefox -和Z轴自动生效。

1
2
3
4
6
7
8
9
.row,
.column,
.ItemCard,
.ItemCard__dest,
.ItemCard__thumb {
    position: relative;
    backface-visibility: hidden;
    transform-style: preserve-3d;
}

接下来,我们将.cover 类添加到  类,我们已添加到产品链接锚标记和  span 元素(很快将成为阴影)。

1
2
3
4
6
7
8
.cover {
    display: block;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

天线宝宝第一高手论坛-tt538天线宝宝开奖结果-天线宝宝论坛精选资料专区-天线宝宝论坛开奖结果添加此样式后,产品链接以及  span 元素现在一直延伸到容器中。我们稍后也可以更改元素堆栈位置。

图像样式

以下样式控制图像包装元素位置,填充和一些3D内容。在backface-visibility被设定为使得我们不会通过堆叠中的平移或旋转元件下方看到的,并且将不会看到图像的反转面。

我们对图像应用过渡,并在z轴上移动,使其“悬浮”在“阴影之上”  15px。同样,我们还添加了一些3D东西:  backface-visibility 并且  transform-style,它将正确渲染3D视图。

1
2
3
4
6
.ItemCard__thumb img {
    position: relative;
    z-index: 1;
    transition: transform 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);
    transform: translate3d(0, 0, 20px);
}

阴影样式

以下为我们提供了阴影样式。阴影扩散应该是窄的,并且阴影阴影更暗,因为此时图像更接近(通过 15px)到反射阴影的“地板”。

1
2
3
4
6
7
.shadow {
    display: block;
    transition: all 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);
    opacity: .9;
    background-color: rgba(0, 0, 0, 0.1);
    box-shadow: 0 0 5px 1px rgba(0, 0, 0, 0.1);
}

我们取得了一些进展:

注意圆角和阴影在图像下方展开。

悬停效果

悬停效果将使每个图像缩略图更具吸引力。

01
02
03
04
05
06
07
08
09
10
11
12
13
.column:hover .ItemCard__dest {
    z-index: 10;
}
.column:hover .ItemCard__dest,
.column:hover .ItemCard__thumb img {
    transform: translate3d(0, 0, 50px) rotateX(-5deg);
    transform-origin: center bottom;
}
.column:hover .ItemCard__thumb .shadow {
    opacity: .6;
    background-color: rgba(0, 0, 0, 0.1);
    box-shadow: 0 0 10px 6px rgba(0, 0, 0, 0.1);
}

在悬停状态下,如上面的代码片段所示,我们将首先将元素堆栈向上移动,因此图像(和链接)将出现在网格中其余项目的上方。

我们也会略微抬起图像; 将它从“地板”移开,更接近“光”源。这就是说阴影会失去一些清晰度,所以我们减少了阴影的不透明度。

悬停状态项目悬浮高于其余项目并略微倾斜

唐山网站定制

随机推荐

最新案例

联系电话 400-6065-301
赚钱高手两组三中三-三中三复式计算公式-三码中特全免费公开码 本港台现场报码直播j2-本港开奖结果现场开码-本港台现场搅珠直播 正版管家婆一句赢大钱-www管家婆27735com-管家婆小鱼儿论坛心水 九龙心水三肖永不改料-九龙心水525757com-九龙老牌图库彩图大全 澳门123696com开奖结果-626969cc澳门资料大全-2021澳门合彩开彩结果