【问题标题】:css input corner triangle label with border radiuscss输入带有边框半径的角三角形标签
【发布时间】:2017-12-07 12:30:06
【问题描述】:

我想在输入(文本)元素中创建一个三角形标签,就像这样:

到目前为止,我设法做到的是:

我怎样才能把这个三角形“在”输入边框,让我们说,保持边框半径从输入切割这个三角形的边缘?

这是我的代码:

<div class="input">
   <label>email adress</label>
   <div class="note">
      <p>*</p>
      <input type="text" placeholder="Enter your email adress">
   </div>
</div>

.input {
   display: flex;
   flex-direction: column;
   width: 100%;
}
.note > input {
   width: 515px;
   height: 48px;
   border-radius: 5px;
   border: 1px solid #7d7d7d;
   box-shadow:inset 0 0 5px 1px lightgray;
   padding-left: 20px;
   color: #acacac;
   -webkit-color: #acacac;
   -moz-color: #acacac;
   -ms-color: #acacac;
   -o-color: #acacac;
   font-size: 16px;
   background-color: rgba(211, 211, 211, 0.50);
}

.note > input:focus {
   outline: none;
   background-color: #f9f9f9;
}

.note {
   position: relative;
   display: inline-block;
}
.note:after {
   content: "";
   position: absolute;
   top: 0;
   right: 0;
   width: 0; 
   height: 0; 
   display: block;
   border-left: 35px solid transparent;
   border-bottom: 35px solid transparent;
   border-top: 35px solid #0094bb;
}

我想没有办法给这个三角形本身赋予边界半径而不失去它的形状,对吗?

【问题讨论】:

  • 你能用sn-p输入你的代码吗

标签: html css forms input


【解决方案1】:

我为您的 P 标签添加了绝对位置并将其放置在角落。 边框半径是通过向您的 .note 包装器添加边框半径并设置溢出:隐藏来实现的。

.note > input {
   width: 515px;
   height: 48px;
   border-radius: 5px;
   border: 1px solid #7d7d7d;
   box-shadow:inset 0 0 5px 1px lightgray;
   padding-left: 20px;
   color: #acacac;
   -webkit-color: #acacac;
   -moz-color: #acacac;
   -ms-color: #acacac;
   -o-color: #acacac;
   font-size: 16px;
   background-color: rgba(211, 211, 211, 0.50);
}

.note > input:focus {
   outline: none;
   background-color: #f9f9f9;
}

.note {
   position: relative;
   display: inline-block;
   border-radius: 5px;
   overflow:hidden;
}
.note:after {
   content: "";
   position: absolute;
   top: 0;
   right: 0;
   width: 0; 
   height: 0; 
   display: block;
   border-left: 35px solid transparent;
   border-bottom: 35px solid transparent;
   border-top: 35px solid #0094bb;
   z-index:0;
   
}
.note p{
  position: absolute;
  right: 5px;
  top: 5px;
  color:white;
  z-index:1;
  margin:0;
  padding:0;
}

label { 
  display:block;
}
<div class="input">
   <label>email address</label>
   <div class="note">
      <p>*</p>
      <input type="text" placeholder="Enter your email adress">
   </div>
</div>

【讨论】:

  • 很高兴为您提供帮助!如果它帮助您解决问题,请接受答案。
【解决方案2】:

考虑将 伪元素 声明为 .note 的嵌套元素。

这将允许您在包含元素而不是 伪元素 上指定所需的border-radius 属性。此外,在这个新的包含元素上声明了 overflow: hidden 规则,伪元素的右上角将从视图中“截断”,传达出这是一个元素的印象嵌套在输入字段中。

代码片段演示:

.note > input {
   width: 515px;
   height: 48px;
   border-radius: 5px;
   border: 1px solid #7d7d7d;
   box-shadow:inset 0 0 5px 1px lightgray;
   padding-left: 20px;
   color: #acacac;
   -webkit-color: #acacac;
   -moz-color: #acacac;
   -ms-color: #acacac;
   -o-color: #acacac;
   font-size: 16px;
   background-color: rgba(211, 211, 211, 0.50);
}

.note > input:focus {
   outline: none;
   background-color: #f9f9f9;
}

.note {
   position: relative;
   display: inline-block;
}

/* additional */
.note .required {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 1;
    color: white;
    padding: 5px;
    box-sizing: border-box;
    border-top-right-radius: 5px;
    overflow: hidden;
    width: 35px;
    height: 35px;
    text-align: right;
}

.note .required:after {
    content: "";
    position: absolute;
    top: 0;
    right: 0;
    width: 0;
    height: 0;
    display: block;
    border-left: 35px solid transparent;
    border-bottom: 35px solid transparent;
    border-top: 35px solid #0094bb;
    z-index: -1;
}
<div class="input">
   <label>email adress</label>
   <div class="note">
      <span class="required">*</span>
      <input type="text" placeholder="Enter your email adress">
   </div>
</div>

【讨论】:

    【解决方案3】:

    我能用你的解决方案得到最接近的结果。但是我找到了其他让你满意的方式,好吧……

    .note > input {
       width: 515px;
       height: 48px;
       border-radius: 5px;
       border: 1px solid #7d7d7d;
       box-shadow:inset 0 0 5px 1px lightgray;
       padding-left: 20px;
       color: #acacac;
       -webkit-color: #acacac;
       -moz-color: #acacac;
       -ms-color: #acacac;
       -o-color: #acacac;
       font-size: 16px;
       background-color: rgba(211, 211, 211, 0.50);
    }
    
    .note > input:focus {
       outline: none;
       background-color: #f9f9f9;
    }
    
    .note {
       position: relative;
       display: inline-block;
    }
    .note:after {
       content: "";
       position: absolute;
       top: 0;
       right: 0;
       width: 0; 
       height: 0; 
       display: block;
       line-height: 48px;
       text-align: top;
       border-left: 35px solid transparent;
       border-bottom: 35px solid transparent;
       border-top: 35px solid #0094bb;
    }
    .note::before {
       content: "*";
       position: absolute;
       right: 7px;
       z-index: 1;
       top: 5px;
       color: white;
    }
    <div class="input">
       <label>email adress</label>
       <div class="note">
          <input type="text" placeholder="Enter your email adress">
       </div>
    </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多