I have a working example of my issue here: http://plnkr.co/edit/vwZS5e?p=preview
Here's the problem span:
<div class="test-container">
<span uib-popover="Test"
popover-placement="top"
popover-trigger="mouseenter"
popover-append-to-body="true">
MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe
</span>
</div>
I'm trying to display a popover above the center of this span when I mouseover it. I'm using text-overflow to cut off my text when it's too long. But it seems like uib-popover doesn't account for the overflow.. the popover appears way too far to the right.
Here's my css:
.test-container {
text-overflow:ellipsis;
overflow:hidden;
width:100px;
border:1px solid red;
margin-top:50px;
margin-left:50px;
}
I know I can place the popover on the test-container div, but I'd prefer the popover be in the center of the span.
Does anyone have an idea on how to fix this?
<span> is an inline element and width of an inline element depends on its content. If you will add more content, its width will increase and vice versa.
In above situation, you have very long string of text even without spaces. If you will inspect your <span> you will see that the width of <span> is much larger than the width of its parent .test-container.
uib-popover is taking its position according to the width of <span>. If you will increase or decrease content of <span> element you will see change in position of uib-popover as well.
You can fix this by making <span> a block element and moving text clipping properties on it.
(function(){
'use strict';
angular
.module('app', ['ui.bootstrap', 'ngAnimate']);
})();
(function(){
'use strict';
angular
.module('app')
.controller('appController', AppController);
AppController.$inject = ['$log', '$timeout'];
function AppController($log, $timeout) {
var vm = this;
return vm;
}
})();
html,
body {
background-color:darkgray;
}
.test-container {
width:100px;
border:1px solid red;
margin-top:50px;
margin-left:50px;
}
.test-container span {
text-overflow:ellipsis;
overflow:hidden;
display: block;
}
<link data-require="bootstrap@*" data-semver="3.3.5" rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" />
<script data-require="jquery@*" data-semver="2.1.4" src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script data-require="bootstrap@*" data-semver="3.3.5" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script data-require="[email protected]" data-semver="1.4.6" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-animate.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.14.3/ui-bootstrap-tpls.min.js"></script>
<div ng-app="app" data-ng-controller="appController as vm">
<div class="test-container">
<span uib-popover="Test"
popover-placement="top"
popover-trigger="mouseenter"
popover-append-to-body="true">
MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe..MouseoverMe
</span>
</div>
</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With