如何使用CSS3实现一个3D商品标签

techbrood 发表于 2016-05-15 12:50:47

标签: css3, label, 3d, ribbon

- +

使用3D缎带形状的标签是常见的一个设计模式,用在商品折扣、文章标题或网站推荐信息上,

来突出显示重点内容,吸引用户视觉焦点。实现的方法有2种,一种是使用背景图片,一种是使用三角形的CSS3伪元素。

本文介绍第2种方法,使用一个最简化的实例来讲解如何实现这个效果:

blob.png

上面的界面是一张简化的商品卡片,包含标签和商品描述,我们使用h2元素来容纳标签,HTML代码如下:

<div class="fancy">
  <h2>
    <span class="ribbon-center">50% OFF!</span>
  </h2>
  <p>
    <img src="/uploads/160501/glass.jpg">
    Check out these killer deals from Oakley! 
    Get an additional 50% off sale items for a limited time.
  </p>
</div>

接下来给卡片和商品描述添加样式,来限定高宽和间距:

.fancy {
    width: 340px;
    margin: 20px auto 20px auto;
    background: #E7E7E7;
    padding: 15px;
}
.fancy p {
    padding-top: 10px;
    margin: 5px 0;
    line-height: 1.5;
}
.fancy img {
    width: 340px
}

blob.png

现在页面看起来像上面这样,接下来就是要给标签(h2元素)添加样式,一个是背景色,一个是左边的3D折纸效果。

折边效果其实就是给h2的左下角拼接一个三角形的元素,我们使用伪元素来实现,代码如下:

.fancy h2 {
    font-style: italyc;
    line-height: 1;
    padding: 5px 0;
    color: #FFF;
    margin: 0;
    width: 205px;
    left: -35px;// 相对卡片向左偏移35px
    background-color: #e54439;
    position: relative;
    z-index: 6;
}
.fancy h2:after {// 定义一个斜三角形
    content: "";
    width: 0;
    height: 0;
    position: absolute;
    font-size: 0;
    line-height: 0;
    z-index: 5;
    border-top: 0 solid transparent;
    border-bottom: 15px solid transparent;
    bottom: -15px;
}
.fancy h2:after {
    border-right: 20px solid rgb(230, 107, 97);
    left: 0;
}
.fancy h2 .ribbon-center {
    display: block;
    padding: 10px 0;
    background-color: #e54439;
}

其中h2的left属性为-35px,这使得h2相对卡片向左偏移35px,这样就看起来像是包装在卡片外面。

h2:after伪元素是一个常用的三角形定义(宽高为0的元素加上border调整可以实现各种三角形形状),这样就可以了。

你可以自己试试看

possitive(9) views13060 comments0

发送私信

最新评论

请先 登录 再评论.
相关文章
  • 微信公众号在线生成二维码带参数怎么搞?

    带参数二维码是微信公众号渠道二维码的一种实现
    微信的带参数二维码有两种,一种是临时二维码,一种是永久二维码,但是永久二维码的生成是有个数限制的,微...

  • CentOS6 Apache2.2多站点HTTPS配置

    可以使用letsencrypt(certbot)免费证书服务。支持多系统、多站点和多目录,支持wildcard(通配符域名),90天生效,可用定时任务自动更新。需要注意一点的是apache2.4以下版本需要在默认的ssl配置中添加如下的指令:NameVirtualHost

  • 2019年开源WebRTC媒体服务器选型比较

    什么是WebRTC服务器?在WebRTC的早期开始,该技术的主要卖点之一是它允许点对点(浏览器到浏览器)通信,几乎没有服务器的干预,服务器通常仅用于信令(比如用于...

  • OpenGL/WebGL顶点坐标变换过程简介

    世界坐标是按照笛卡尔坐标系定义出来的绝对坐标系,下面的各种坐标系都建立在世界坐标的基础上。对象坐标系对象被应用于任何...

  • 增强现实引擎ARToolKit工作原理简介

    ARToolkit是一个基于CV(计算机视觉)和Marker(标识)的开源增强现实引擎。其具备如下功能特性:A. 鲁棒跟踪,包括基于标记的跟踪与基于特征的跟踪;

  • A-Frame WebVR(网页虚拟现实)快速开发入门教程

    WebVR和WebGL应用程序接口使得我们已经可以在浏览器上创建虚拟现实(VR)体验,但从工程化的角度而言,开发社区还需要更多方便强大的开发库来简化编程,Mozilla的

  • Blender2.7给平面模型添加纹理贴图

    在blender中给模型添加纹理,需要有2个步骤:首先在对象属性栏中给该对象添加材料和纹理建立纹理映射添加材料和纹理这是常见操作,略过步骤。但是仅仅这样操作,...

  • WebAssembly工作原理和JavaScript语言性能对比分析

    本文简单说明WebAssembly(简称wasm)工作原理和高性能的原由(和JavaScript相比)。不过需要提醒的是Wasm并非设计来完全替代JS,而是对JS的一个强大补充,JS中...

  • NodeJS、Java和PHP性能考量和若干参考结论

    首先需要说明的是,严格而言NodeJS和Java、PHP并非对等概念,NodeJS是基于JS的一个应用程序,而Java/PHP是语言。我们这里实际指的是分别使用node、java和php来实...

  • HTML5动画背后的数学2 - 仿生智能算法综述

    本文是前文

  • 计算WebGL中的uniforms变量使用数

    在使用Three.js为人体模型加载皮肤材料时,启用了skinning:true的参数。有时候会导致GL编译错误,提示“too many uniforms”。下面的文章有助于理解错误原因和检...

  • Three.js入门教程6 - 创建全景图和纹理

    全景图非常酷。使用Three.js做一个属于自己的全景图并不是那么困难。要做一个全景图,你需要一个软件用来做一张全景图片。我使用了iPhone上的Microsoft Photosyn...

  • D3.js读取外部json数据

    D3.js是一个很好的数据可视化工具,支持从web服务读取json数据,或者从外部文件如.json, .csv文件中直接读取。由于部分服务比如flickrs上的图文数据服务需要VPN...

  • 更多...