我正试图显示一个浮动气泡,其中一条消息位于气泡的左侧,我已经使用绝对定位并为left
属性设置了一个固定值。但是,当消息文本更改时,div宽度将减小/扩大,并从气泡中移开。
我应该如何定位它,使浮动消息保持在气泡的左侧,而不考虑文本?
代码如下:
var floatingMessage = document.querySelector("#floating-message");
var toggleBtn = document.querySelector("#toggleMessage");
var messages = ["Hello There 👋, chat with us!", "Hello There 👋", "Welcome!", "blah blah", "looooooooooooooooooooonoooooooooooooog text"];
var currentIndex = 0;
toggleBtn.addEventListener('click', function() {
currentIndex = (currentIndex + 1) % messages.length;
floatingMessage.textContent = messages[currentIndex];
});
body {
font-family: calibri;
background-color: lightgray;
}
#floating-bubble {
background-color: teal;
position: fixed;
bottom: 0;
right: 0;
margin-bottom: 20px;
margin-right: 20px;
border-radius: 50%;
width: 50px;
height: 50px;
box-shadow: 0 0 20px rgba(0,0,0,.5);
transition: box-shadow .5s ease-in-out;
cursor: pointer;
z-index: 2147483645;
border-bottom-right-radius: 0;
background-image: url('https://cdn0.iconfinder.com/data/icons/thin-communication-messaging/57/thin-036_bubble_comment_chat_message-512.png');
background-position: center;
background-size: 80%;
background-repeat: no-repeat;
border-bottom-right-radius: 0;
}
#floating-message {
background: #3a96dd;
padding: 5px;
left: -180px;
transition: none;
animation-duration: .5s;
animation-name: slidein,wiggle;
animation-iteration-count: 1,4;
animation-direction: normal,alternate;
animation-timing-function: ease-in,ease-in-out;
border-radius: 10px;
top: 10px;
font-size: 14px;
box-shadow: 0 0 10px #000;
position: absolute;
color: #fff;
font-family: Calibri, sans-serif;
}
<button id="toggleMessage">
Toggle Message
</button>
<div id="floating-bubble">
<div id="floating-message">Hello There 👋, chat with us!</div>
</div>
Fiddle
最佳答案
很简单,用这个:
对于#floating-message
使用right: 60px
(60px
,因为50px
正在由#floating-bubble
使用)并删除left
样式,这样消息将粘贴到屏幕的末尾,但现在它有时会分成两行,因此要修复此问题,请使用white-space: nowrap
。
另外,我认为在2147483645
中为z-index
使用#floating-bubble
是多余的,我已经将其更改为2
,以防其他元素有1
。
var floatingMessage = document.querySelector("#floating-message");
var toggleBtn = document.querySelector("#toggleMessage");
var messages = ["Hello There 👋, chat with us!", "Hello There 👋", "Welcome!", "blah blah", "looooooooooooooooooooonoooooooooooooog text"];
var currentIndex = 0;
toggleBtn.addEventListener('click', function() {
currentIndex = (currentIndex + 1) % messages.length;
floatingMessage.textContent = messages[currentIndex];
});
body {
font-family: calibri;
background-color: lightgray;
}
#floating-bubble {
background-color: teal;
position: fixed;
bottom: 0;
right: 0;
margin-bottom: 20px;
margin-right: 20px;
border-radius: 50%;
width: 50px;
height: 50px;
box-shadow: 0 0 20px rgba(0,0,0,.5);
transition: box-shadow .5s ease-in-out;
cursor: pointer;
z-index: 2;
border-bottom-right-radius: 0;
background-image: url('https://cdn0.iconfinder.com/data/icons/thin-communication-messaging/57/thin-036_bubble_comment_chat_message-512.png');
background-position: center;
background-size: 80%;
background-repeat: no-repeat;
border-bottom-right-radius: 0;
}
#floating-message {
background: #3a96dd;
padding: 5px;
right: 60px; /* Added right over here, so that message stick to the end of screen */
white-space: nowrap; /* Added this over here, so that it forces the message to be in single line */
transition: none;
animation-duration: .5s;
animation-name: slidein,wiggle;
animation-iteration-count: 1,4;
animation-direction: normal,alternate;
animation-timing-function: ease-in,ease-in-out;
border-radius: 10px;
top: 10px;
font-size: 14px;
box-shadow: 0 0 10px #000;
position: absolute;
color: #fff;
font-family: Calibri, sans-serif;
}
<button id="toggleMessage">
Toggle Message
</button>
<div id="floating-bubble">
<div id="floating-message">Hello There 👋, chat with us!</div>
</div>