首页 > 解决方案 > CSS - 更改气泡的“句柄”

问题描述

我正在修改我在此处找到的一些 CSS/HTML,它显示带有气泡的 iOS 样式聊天消息。我想交换我设法做到的蓝色和绿色气泡的对齐方式,但我唯一不确定的是如何更改出现在左下角和右下角的小“手柄” .

这是它目前的样子:

/* Bit of normalisation */

body {
	background-color: #eee;
	color: #222;
	font: 0.8125em/1.5 'Helvetica Neue', Helvetica, Arial, sans-serif;
}

img {
	display: block;
	height: auto;
	max-width: 100%;
}

.container {
	padding: 40px 20px;
	margin: 0 auto;
	width: 400px;
}

/* .bubble */

.bubble {
	background-image: linear-gradient(bottom, rgb(210,244,254) 25%, rgb(149,194,253) 100%);
background-image: -o-linear-gradient(bottom, rgb(210,244,254) 25%, rgb(149,194,253) 100%);
background-image: -moz-linear-gradient(bottom, rgb(210,244,254) 25%, rgb(149,194,253) 100%);
background-image: -webkit-linear-gradient(bottom, rgb(210,244,254) 25%, rgb(149,194,253) 100%);
background-image: -ms-linear-gradient(bottom, rgb(210,244,254) 25%, rgb(149,194,253) 100%);
background-image: -webkit-gradient(
	linear,
	left bottom,
	left top,
	color-stop(0.25, rgb(210,244,254)),
	color-stop(1, rgb(149,194,253))
);
	border: solid 1px rgba(0, 0, 0, 0.5);
	/* vendor rules */
	border-radius: 20px;
	/* vendor rules */
	box-shadow: inset 0 5px 5px rgba(255, 255, 255, 0.4), 0 1px 3px rgba(0, 0, 0, 0.2);
	/* vendor rules */
	box-sizing: border-box;
	clear: both;
	float: right;
	margin-bottom: 20px;
	padding: 8px 30px;
	position: relative;
	text-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);
	width: auto;
	max-width: 100%;
	word-wrap: break-word;
}

.bubble:before, .bubble:after {
	border-radius: 20px / 10px;
	content: '';
	display: block;
	position: absolute;
}

.bubble:before {
	border: 10px solid transparent;
	border-bottom-color: rgba(0, 0, 0, 0.5);
	bottom: 0;
	left: -7px;
	z-index: -2;
}

.bubble:after {
	border: 8px solid transparent;
	border-bottom-color: #d2f4fe;
	bottom: 1px;
	left: -5px;
}

.bubble--alt {
	background-image: linear-gradient(bottom, rgb(172,228,75) 25%, rgb(122,205,71) 100%);
background-image: -o-linear-gradient(bottom, rgb(172,228,75) 25%, rgb(122,205,71) 100%);
background-image: -moz-linear-gradient(bottom, rgb(172,228,75) 25%, rgb(122,205,71) 100%);
background-image: -webkit-linear-gradient(bottom, rgb(172,228,75) 25%, rgb(122,205,71) 100%);
background-image: -ms-linear-gradient(bottom, rgb(172,228,75) 25%, rgb(122,205,71) 100%);
background-image: -webkit-gradient(
	linear,
	left bottom,
	left top,
	color-stop(0.25, rgb(172,228,75)),
	color-stop(1, rgb(122,205,71))
);
	float: left;
}

.bubble--alt:before {
	border-bottom-color: rgba(0, 0, 0, 0.5);
	border-radius: 20px / 10px;
	left: auto;
	right: -7px;
}

.bubble--alt:after {
	border-bottom-color: #ace44b;
	border-radius: 20px / 10px;
	left: auto;
	right: -5px;
} 
<div class="container">

	
	<div class="bubble">
		Blue text bubble
	</div>
	
	<div class="bubble bubble--alt">
		Green text bubble
	</div>
	
	<div class="bubble">
		A bubble containing lots and lots and lots and lots of content on multiple lines
	</div>
	
	<div class="bubble bubble--alt">
		Bubble with image
		<img src="http://placekitten.com/800/600" alt="" />
	</div>
	
	<div class="bubble">
		Bubblewitharidiculouslylongwordwhichwrapseffortlesslyontotwolines
	</div>
	
</div>

我不知道如何交换每个气泡底角的小把手,这样它们就在对面。我希望蓝色的出现在右下角,绿色的出现在左下角。

标签: htmlcss

解决方案


完整代码在这里:

在下面.bubble:before{..}.bubble:after {..}您已经使用left了应该为 'bubble--alt:before{..} bubble--alt:after{..}`的属性,right反之亦然。and

body {
  background-color: #eee;
  color: #222;
  font: 0.8125em/1.5 'Helvetica Neue', Helvetica, Arial, sans-serif;
}

img {
  display: block;
  height: auto;
  max-width: 100%;
}

.container {
  padding: 40px 20px;
  margin: 0 auto;
  width: 400px;
}


/* .bubble */

.bubble {
  background-image: linear-gradient(bottom, rgb(210, 244, 254) 25%, rgb(149, 194, 253) 100%);
  background-image: -o-linear-gradient(bottom, rgb(210, 244, 254) 25%, rgb(149, 194, 253) 100%);
  background-image: -moz-linear-gradient(bottom, rgb(210, 244, 254) 25%, rgb(149, 194, 253) 100%);
  background-image: -webkit-linear-gradient(bottom, rgb(210, 244, 254) 25%, rgb(149, 194, 253) 100%);
  background-image: -ms-linear-gradient(bottom, rgb(210, 244, 254) 25%, rgb(149, 194, 253) 100%);
  background-image: -webkit-gradient( linear, right bottom, right top, color-stop(0.25, rgb(210, 244, 254)), color-stop(1, rgb(149, 194, 253)));
  border: solid 1px rgba(0, 0, 0, 0.5);
  /* vendor rules */
  border-radius: 20px;
  /* vendor rules */
  box-shadow: inset 0 5px 5px rgba(255, 255, 255, 0.4), 0 1px 3px rgba(0, 0, 0, 0.2);
  /* vendor rules */
  box-sizing: border-box;
  clear: both;
  float: right;
  margin-bottom: 20px;
  padding: 8px 30px;
  position: relative;
  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);
  width: auto;
  max-width: 100%;
  word-wrap: break-word;
}

.bubble:before,
.bubble:after {
  border-radius: 20px / 10px;
  content: '';
  display: block;
  position: absolute;
}

.bubble:before {
  border: 10px solid transparent;
  border-bottom-color: rgba(0, 0, 0, 0.5);
  bottom: 0;
  right: -7px;
  z-index: -2;
}

.bubble:after {
  border: 8px solid transparent;
  border-bottom-color: #d2f4fe;
  bottom: 1px;
  right: -5px;
}

.bubble--alt {
  background-image: linear-gradient(bottom, rgb(172, 228, 75) 25%, rgb(122, 205, 71) 100%);
  background-image: -o-linear-gradient(bottom, rgb(172, 228, 75) 25%, rgb(122, 205, 71) 100%);
  background-image: -moz-linear-gradient(bottom, rgb(172, 228, 75) 25%, rgb(122, 205, 71) 100%);
  background-image: -webkit-linear-gradient(bottom, rgb(172, 228, 75) 25%, rgb(122, 205, 71) 100%);
  background-image: -ms-linear-gradient(bottom, rgb(172, 228, 75) 25%, rgb(122, 205, 71) 100%);
  background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0.25, rgb(172, 228, 75)), color-stop(1, rgb(122, 205, 71)));
  float: left;
}

.bubble--alt:before {
  border-bottom-color: rgba(0, 0, 0, 0.5);
  border-radius: 20px / 10px;
  right: auto;
  left: -7px;
}

.bubble--alt:after {
  border-bottom-color: #ace44b;
  border-radius: 20px / 10px;
  right: auto;
  left: -5px;
}
<div class="container">


  <div class="bubble">
    Blue text bubble
  </div>

  <div class="bubble bubble--alt">
    Green text bubble
  </div>

  <div class="bubble">
    A bubble containing lots and lots and lots and lots of content on multiple lines
  </div>

  <div class="bubble bubble--alt">
    Bubble with image
    <img src="http://placekitten.com/800/600" alt="" />
  </div>

  <div class="bubble">
    Bubblewitharidiculouslylongwordwhichwrapseffortlesslyontotwolines
  </div>

</div>


推荐阅读