【问题标题】:How to create shape with text in CSS3 or SVG or HTML(5)?如何使用 CSS3 或 SVG 或 HTML(5) 中的文本创建形状?
【发布时间】:2013-04-30 10:40:48
【问题描述】:

我需要创建一个如下图所示的 HTML 页面。

我不知道如何创建包含文本的可点击表单。

文字不应该是图片并且不超过其区域(如溢出:隐藏)

我尝试了 HTML 中的区域和地图,但无法将文本放入其中。

请问该怎么做?

编辑

在阅读了 Phrogz 的答案后,我尝试使用 SVG 进行其他操作,但我的文字超出了我的三角形?我不明白为什么。

演示(在底部查看): http://jsfiddle.net/r7Jyy/3/

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)   -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Calque_1" 
 xmlns="http://www.w3.org/2000/svg" 
 xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 width="960px" height="560px" 
 viewBox="0 0 960 560" 
 style="enable-background:new 0 0 960 560;" xml:space="preserve">
   <g>
      <polygon style="fill-rule:evenodd;clip-rule:evenodd;fill:none;" points="524.131,495.773 524.771,495.615 524.179,495.282 "/>
      <polygon style="fill-rule:evenodd;clip-rule:evenodd;fill:#CCC;" points="569.476,-10 212.575,320.5 524.179,495.282 572.75,-1.521 "/>
   </g>
   <text transform="matrix(1 0 0 1 236 255)">
      <tspan x="0" y="0" style="fill:#888; font-family:'Arial'; font-size:36.0467;">500% </tspan>
      <tspan x="0" y="30.039" style="fill:#888; font-family:'Arial'; font-size:36.0467;">New</tspan>
    </text>
 </svg>

【问题讨论】:

  • 你需要支持哪些浏览器?
  • IE8-9-10、Chrome、Firefox、Safari..
  • 您编辑的示例确实使用了&lt;clipPath&gt; 元素或clip-path 属性,它们是实际将文本剪辑到三角形所必需的。

标签: html css svg css-shapes


【解决方案1】:

这是一个使用剪切路径将文本剪切到任意区域的 SVG 示例:

演示:http://jsfiddle.net/r7Jyy/

<svg xmlns="http://www.w3.org/2000/svg">
  <defs><clipPath id="triangle1">
    <polygon points="10,30 180,60 250,10"/>
  </clipPath></defs>
  <polygon points="10,30 180,60 250,10" fill="none" stroke="black"/>
  <text x="20" y="50" clip-path="url(#triangle1)">Hello World</text>
</svg>

使用SVG's filter effects 在文本上创建浮雕内阴影效果。这是一个示例(与您的需求不完全匹配):http://www.w3.org/2002/05/text.svg

【讨论】:

    【解决方案2】:

    您可能想在这里试一试 CSS3 ...

    你应该让你的代码更跨浏览器(例如添加-moz-transform等)

    并且必须更加努力地实现字母的内阴影,但您可以这样做:

    HTML:

      <div class='container'>
        <div class='text'>Hello<br />World<br /> I'm Steffi</div>
        <div class='triangleA'></div>
        <div class='triangleB'>
          <div class='text'>
            Can you <br />
            Help Me Please</div>
        </div>
        <div class='triangleC'>
          <div class='text'>
            Stackover-<br />flow.com
          </div>
        </div>
      </div>
    

    和 CSS :

    .container {
      position: absolute;
      overflow: hidden;
      width: 550px;
      height: 500px;
      background: #9f9f9f;
    }
    
    div.text {
      font: bold 45px 'Helvetica';
      text-align: left;
      margin: 120px 0 0 180px;
      line-height: 40px;
      color: #3f3f3f;
      text-transform: uppercase;
      text-shadow: 0px 1px rgba(255,255,255,.4);
    }
    
    div.triangleA, div.triangleB, div.triangleC {
      position: absolute;
    }
    
    div.triangleA {
      background: #afafaf;
      width: 500px;
      height: 600px;
      -webkit-transform: rotate(45deg);
      top: -350px;
      left: -230px; 
    }
    
    div.triangleB {
      background: rgba(255,255,255,.4);
      overflow: hidden;
      width: 500px;
      height: 600px;
      -webkit-transform: rotate(-70deg);
      top: 200px;
      left: -230px; 
    }
    
    div.triangleB div.text {
      -webkit-transform: rotate(70deg);
      margin-left: 240px;
      margin-top: 550px;
      width: 500px;
    }
    
    div.triangleC {
      background: #8f8f8f;
      -webkit-transform: rotate(-25deg);
      top: 370px;
      left: 100px;
      height: 300px;
      width: 600px;
      overflow: hidden;
    }
    
    div.triangleC div.text { 
        -webkit-transform: rotate(25deg); 
        margin: 0;
        margin-left: 190px;
        margin-top: 60px;
    }
    

    演示:http://jsbin.com/orazod/1/edit

    【讨论】:

      猜你喜欢
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      • 2014-12-06
      相关资源
      最近更新 更多