简体   繁体   English

添加CSS梯形:按钮后

[英]Adding CSS Trapezoid Shape :After Button

I'm attempting to create a button style for a client, and cannot seem to get it working using the after pseudo-class. 我正在尝试为客户端创建按钮样式,但似乎无法使用after伪类使其工作。

<style>
$varBase: 40px;
$imsblue: #012169;
$imsgrey: #012169;

body {
  background:grey;
}

.btn {
  position: relative;
  float: left;
  height: $varBase;
  font-family: sans-serif;
  text-align: center;
  line-height: $varBase;
  color: white;
  white-space: nowrap;
  text-transform: uppercase;
  background: $imsblue;
  &:before {
    float: left;
    content:"";
    width: ($varBase/4);
    height: ($varBase/2);
  }
  &:after {
    position: absolute;
    content:"";
    height: ($varBase/2);
    border-left: ($varBase/2) solid $imsblue;
    border-bottom: ($varBase/2) solid transparent;
  }
  a {
    color: white;
    text-decoration:none;
    padding: ($varBase/4) ($varBase/2);
    margin-right: -10px;
  }
}
.btn3 {
  display: inline;
  color: white;
  background: linear-gradient(135deg, rgba(1,33,105,1) 0%, rgba(1,33,105,1) 93%, rgba(30, 87, 153, 0) 93%, rgba(30, 87, 153, 0) 100%);
  outline: 0;
  border: 0;
  padding: 10px 0px;
  a {
    color: inherit ;
    text-transform: uppercase;
    text-decoration:none;
    padding: ($varBase/4) $varBase;
  }
}
</style>
<div class="btn"><a href="#">Click to Submit</a></div>
<div class="btn3"><a href="#">Click to Submit</a></div>

I can get it to show using two DIVs, but I need this to work with just one class. 我可以使用两个DIV来显示它,但是我只需要一个类就可以使用它。 Can someone help me see what I'm doing wrong? 有人可以帮我看看我在做什么错吗?

It's supposed to look like this (barring color and size of course): 它应该看起来像这样(当然不包括颜色和大小): btn示例

I believe the key element missing is that you need to include a content:"" in your :after pseudoclass. 我相信缺少的关键元素是您需要在:after伪类中包含content:"" See the example below. 请参见下面的示例。

 .btn { height: 40px; background: red; width: 128px; float:left; } .btn:after { width: 0px; height: 20px; border-left: 20px solid red; border-bottom: 20px solid white; float:right; content:""; } 
 <div class="btn">Button</div> 

This will work - I had to convert your SCSS to CSS, but it's clear enough. 这将起作用-我不得不将您的SCSS转换为CSS,但是很清楚。

 .btn { height: 40px; width: 200px; background: red; position: relative; /* work as container */ } .btn:after { content: ''; /* needed */ display: block; position: absolute; /* position to container */ right: 0; bottom: 0; border-left: 20px solid red; border-bottom: 20px solid white; } 
 <div class="btn">Button</div> 

Unfortunately, you can't have "transparent" overlay, it just wont work. 不幸的是,您不能有“透明”叠加层,它只会起作用。 I had to use white for it. 我不得不用白色。

I found a solution that works where the "cut" is transparent. 我找到了一种解决方案,该解决方案在透明的“剪切”位置有效。 You can use regular background or image background for the button: 您可以为按钮使用常规背景或图像背景:

在此处输入图片说明

http://jsfiddle.net/q45w2f78/ http://jsfiddle.net/q45w2f78/

<div class="buttoncut gon">My button</div>

CSS: CSS:

.gon {
  width: 220px;
  height: 220px;
  background: darkblue;
  background-size: 220px 220px;

  /* Text styling */
  line-height: 220px;
  text-align: center;
  font-family: sans-serif;
  font-size: 15px;
  font-weight: bold;
  letter-spacing: 6px;
  color: beige;
}
.gon:hover {
  color: #fff;
  text-shadow: 0 0 10px white;
}

.buttoncut {
  height: 200px;
  -webkit-clip-path: polygon(0% 0%, 100% 0, 100% 50%, 60% 100%, 0% 100%); clip-path: polygon(0% 0%, 100% 0, 100% 50%, 60% 100%, 0% 100%);
  -moz-clip-path: polygon(0% 0%, 100% 0, 100% 50%, 60% 100%, 0% 100%); clip-path: polygon(0% 0%, 100% 0, 100% 50%, 60% 100%, 0% 100%);
  -ms-clip-path: polygon(0% 0%, 100% 0, 100% 50%, 60% 100%, 0% 100%); clip-path: polygon(0% 0%, 100% 0, 100% 50%, 60% 100%, 0% 100%);
  clip-path: polygon(0% 0%, 100% 0, 100% 50%, 60% 100%, 0% 100%); clip-path: polygon(0% 0%, 100% 0, 100% 50%, 60% 100%, 0% 100%);
}

I used this generator to get the correct polygon css: http://bennettfeely.com/clippy/ 我使用此生成器来获取正确的多边形CSS: http : //bennettfeely.com/clippy/

Gradients: 梯度:

You could use gradients in order to achieve this, and that way you can apply it to any element (this one's done with a button element): 您可以使用渐变来实现此目的,这样就可以将其应用于任何元素(这是通过button元素完成的):

 html,body{ background:red; } button { background: -moz-linear-gradient(-45deg, rgba(30, 87, 153, 1) 0%, rgba(30, 87, 153, 1) 89%, rgba(30, 87, 153, 0) 90%, rgba(30, 87, 153, 0) 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, right bottom, color-stop(0%, rgba(30, 87, 153, 1)), color-stop(89%, rgba(30, 87, 153, 1)), color-stop(90%, rgba(30, 87, 153, 0)), color-stop(100%, rgba(30, 87, 153, 0))); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(-45deg, rgba(30, 87, 153, 1) 0%, rgba(30, 87, 153, 1) 89%, rgba(30, 87, 153, 0) 90%, rgba(30, 87, 153, 0) 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(-45deg, rgba(30, 87, 153, 1) 0%, rgba(30, 87, 153, 1) 89%, rgba(30, 87, 153, 0) 90%, rgba(30, 87, 153, 0) 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(-45deg, rgba(30, 87, 153, 1) 0%, rgba(30, 87, 153, 1) 89%, rgba(30, 87, 153, 0) 90%, rgba(30, 87, 153, 0) 100%); /* IE10+ */ background: linear-gradient(135deg, rgba(30, 87, 153, 1) 0%, rgba(30, 87, 153, 1) 89%, rgba(30, 87, 153, 0) 90%, rgba(30, 87, 153, 0) 100%); /* W3C */ filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#1e5799', endColorstr='#001e5799', GradientType=1); /* IE6-9 fallback on horizontal gradient */ outline:0; border:0; padding:5px; } 
 <button>PressMe</button> 


Pseudo Element (not great for gradient/image backgrounds) 伪元素(不适用于渐变/图像背景)

 div { position: relative; display:inline-block; padding:5px; background:gray; } div:after{ content:""; position:absolute; border-bottom:10px solid blue; border-left:10px solid transparent; bottom:0; right:0; } html,body{ background:blue; } 
 <div>Press Me!</div> 


Clip Path 剪切路径

 button { padding: 10px; height: 60px; width: 60px; -webkit-clip-path: polygon(0% 0%, 100% 0, 100% 75%, 75% 100%, 0% 100%); clip-path: polygon(0% 0%, 100% 0, 100% 75%, 75% 100%, 0% 100%); } html,body{ background:green; } 
 <button>press me!!!</button> 


Dynamic length 动态长度

by using the following snippet, you can make a great button, which isn't affected by length! 通过使用以下代码段,您可以制作一个很棒的按钮,该按钮不受长度的影响!

 button { position: relative; border: 0; outline: 0; height: 20px; background: gray; } button:after { position: absolute; content: ""; right: -10px; width: 0px; height: 0px; bottom: 0; border-bottom: 10px solid transparent; border-left: 10px solid gray; } button:before { position: absolute; content: ""; right: -10px; width: 10px; height: 10px; top: 0; background: gray; } html, body { background: red; } /*HOVER EFFECTS*/ button:hover, button:hover:before { background: yellow; } button:hover:after { border-left: 10px solid yellow; } 
 <button>press me and plus i can get really long!</button> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM