带有边框半径的CSS输入框带三角形标签

4
我希望在输入框(text)中创建一个三角形标签,效果与下图相同: input triangle corner with border radius 目前我已经做到了以下效果: input triangle corner without border radius 我该如何将这个三角形放置在输入框的边框下方,以避免输入框的边框半径切割该三角形?
以下是我的代码:
<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;
}

我想,没有办法给这个三角形自身添加border-radius属性而不失去其形状,对吗?


请使用代码片段放置您的代码。 - core114
3个回答

4
我为您的P标签添加了position:absolute,并将其定位在角落。 通过向.note包装器添加边框半径并设置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;
   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>


很高兴能够帮助!如果我的回答解决了您的问题,请接受答案。 - mike_t

1
考虑将伪元素声明为.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>


1
我能做的最接近你解决方案。但是我找到了其他让你满意的方法,这个可以吗...

.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>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接