当前位置: 首页 > 面试题库 >

透明形状,带上角的箭头

荆修明
2023-03-14
问题内容

我想在的右上角添加一个箭头,将div其视为
可编辑输入框。请帮助我如何使用CSS实现此目标。我
无法使用SVG,因为我需要使用SVGdiv来将表情符号显示为图像


<div placeholder="Your message" id="Message">
...
</div>

问题答案:

您可以按照下面的代码片段进行操作。实现形状的方法
如下:

主要div元素只有顶部,底部和左侧边框。右边框被取消,因为元素及其箭头需要透明。使用透明箭头,如果存在右边框,也会显示该边框。
使用skew相对于形状右边缘放置的ed元素可实现右侧的箭头。
通过使用另一个伪元素来实现形状的右边界,该伪元素的大小与整个容器的高度相同-箭头伪元素的高度。此元素相对于形状的右下角定位。
您可以根据需要调整高度和边界半径。我已将
位置设置为即使父母的身高/宽度也不会受到影响

div.shape {

  position: relative;

  width: 300px;

  height: 100px;

  padding: 4px;

  margin-top: 20px;

  border: 2px solid gray;

  border-right: none; /* not required as the shape needs to be transparent */

  border-radius: 8px; /* not required as the right border is done through pseudo element */

  border-top-right-radius: 0px;

  border-bottom-right-radius: 0px;

}

div.shape:before {

  position: absolute;

  content: '';

  top: -2px; /* equal to border top of parent - no need to change*/

  right: -6px; /* for positioning - no need to change*/

  height: 15%; /* should be changed depending on height of arrow */

  width: 10%; /* should be changed depending on width of arrow */

  border-top: 2px solid gray;

  border-right: 3px solid gray; /* thicker border because skew makes it thin */



  /* to achieve the arrow like shape */

  -webkit-transform-origin: bottom right;

  -webkit-transform: skew(-45deg);

  -moz-transform: skew(-45deg);

  transform: skew(-45deg);

}

div.shape:after {

  position: absolute;

  content: '';

  right: -6px; /* for positioning - no need to change*/

  height: 85%; /* height of parent - height of arrow */

  width: 2%; /* no need to change */

  bottom: -2px; /* equal to border bottom of parent - no need to change*/

  border-right: 2px solid gray;

  border-bottom: 2px solid gray;

  border-bottom-right-radius: 8px; /* for producing curve on bottom right */

}



/* Just for demo */



body {

  background: -webkit-linear-gradient(0deg, crimson, indianred, purple);

  background: -moz-linear-gradient(90deg, crimson, indianred, purple);

  background: linear-gradient(90deg, crimson, indianred, purple);

}


<div class="shape">

  Lorem Ipsum Dolor Sit Amet...

</div>

可以通过更改定位属性
和偏斜方向(从正角到负角)将箭头添加到左侧,如
下面的代码片段所示。

div.shape {

  position: relative;

  width: 300px;

  height: 100px;

  padding: 4px;

  margin-top: 20px;

  margin-left: 20px;

  border: 2px solid gray;

  border-left: none; /* not required as the shape needs to be transparent */

  border-radius: 8px; /* not required as the right border is done through pseudo element */

  border-top-left-radius: 0px;

  border-bottom-left-radius: 0px;

}

div.shape:before {

  position: absolute;

  content: '';

  top: -2px; /* equal to border top of parent - no need to change*/

  left: -6px; /* for positioning - no need to change*/

  height: 15%; /* should be changed depending on height of arrow */

  width: 10%; /* should be changed depending on width of arrow */

  border-top: 2px solid gray;

  border-left: 3px solid gray; /* thicker border because skew makes it thin */



  /* to achieve the arrow like shape */

  -webkit-transform-origin: bottom right;

  -webkit-transform: skew(45deg);

  -moz-transform: skew(45deg);

  transform: skew(45deg);

}

div.shape:after {

  position: absolute;

  content: '';

  left: -6px; /* for positioning - no need to change*/

  height: 85%; /* height of parent - height of arrow */

  width: 2%; /* no need to change */

  bottom: -2px; /* equal to border bottom of parent - no need to change*/

  border-left: 2px solid gray;

  border-bottom: 2px solid gray;

  border-bottom-left-radius: 8px; /* for producing curve on bottom right */

}



/* Just for demo */



body {

  background: -webkit-linear-gradient(0deg, crimson, indianred, purple);

  background: -moz-linear-gradient(90deg, crimson, indianred, purple);

  background: linear-gradient(90deg, crimson, indianred, purple);

}


<div class="shape">

  Lorem Ipsum Dolor Sit Amet...

</div>


 类似资料:
  • 如何使三角形的边框颜色不同于其他形状?如果我改变笔画的颜色,它有点起作用,好吧,我有两个不同颜色的边,没有第三个边框。我该如何改正呢?

  • 如果我使用以下形状可绘制 然后不知何故圆角结束了颜色(黑灰色)。除了拐角处,形状的内部是透明的。当我将纯色设置为白色或黑色时,边框内的所有东西都是预期的颜色。 我的问题是,为什么当纯色是透明的(甚至没有设置)时,圆角似乎会显示颜色? 谢啦

  • 问题内容: 我需要使我的Google Map V3变成一个完整的圆圈。我在其上使用CSS3边界半径,但仅在Firfox中可正常使用,其他人则将其保留为矩形。以下是代码: 和CSS: 是的,我知道,我可以使用一些具有背景色的叠加图像。但是真正的问题是背景不仅是彩色的。它根据其内容而变化,通常是一个渐变。有没有办法使Chrome和其他基于wabkit的浏览器和Opera(我对IE没有希望)以与FF相同

  • 问题内容: 请看一下http://jsfiddle.net/ghAgQ/我需要与箭头相同的渐变,因为它与矩形相同。有什么想法的吗?谢谢 ​ 问题答案: 您可以以一种简单得多的方式来执行此操作,仅使用一个元素和一个旋转的伪元素(任何支持CSS渐变的浏览器也支持CSS变换和伪元素和成角度的线性渐变。 在Windows上使用当前版本的Chrome,Opera,Firefox,IE。 HTML 只是 相关

  • 我正在尝试创建一个角度的小小吃栏,它将一个数组作为输入并显示每个通知几秒钟,然后从堆栈中弹出并显示下一个通知。 我希望在这些通知之间有一个不透明度转换。 过渡属性似乎不起作用 这是堆栈闪电战链接 更多信息: < li >应用程序组件有一个按钮,每次单击都会生成一个通知 < li>snackbar组件显示3秒钟的通知,然后删除它并切换到下一个。 < li>snackbar容器用0 opacity()

  • 我知道这个问题已经被问过很多次了,但是所有的答案要么不起作用,要么使用不推荐的代码: Android完全透明的状态栏 透明状态栏-Android 4.4(KitKat)之前的版本 Lollipop:在状态栏后面绘制,颜色设置为透明 我想实现与最新的谷歌地图应用程序相同的效果: 完全透明的状态栏(只有状态栏,而不是导航栏!) 部分工作,因为它还隐藏了导航栏