Робсон, есть несколько вещей, которые нужно учитывать.Но в основном кажется, что вы хотите, чтобы всплывающее окно или модальное окно появлялись в одном месте, предоставляя ему больше возможностей для отображения текста.Я обновил код, чтобы изменить некоторые CSS и JS.По сути, вы просто хотите включать и выключать «активный» класс, когда пользователь щелкает или время истекает.Также вы хотите, чтобы положение всплывающего / модального окна было правильным, то есть полностью слева, так как оно обеспечивает наибольшее пространство для текста.В качестве альтернативы может потребоваться перенос, в котором вы можете установить максимальную ширину модального / всплывающего окна, ограничив его соответствующими размерами.
JavaScript: здесь я только что добавил вызов jQuery, поскольку вы используете его дляпереключите активный класс и прокомментировали прямые значения CSS, которые вы устанавливали.
CSS: я изменил «видимость» на «отображение», так как он выводит его из потока документов.По сути, видимость: скрытый элемент все еще имеет div в потоке и влияет на выравнивание, даже если он не «видим».Дисплей с другой стороны удаляет его из потока, поэтому выравнивание не влияет.Используемые мной значения: display: none для невидимого и display: block для его отображения, так как он является блочным элементом.Исследуйте другие значения для других аффектов.
var elements = $('#content').find('h1, p, span');
var setMenuPosition = function(x, y) {
var m = $('#content');
$("menu").toggleClass('active');
//$("#menu").css('top', y);
//$("#menu").css('left', x);
};
var setSelectedText = function() {
$('#menu').data('text', $(this).text());
};
var openMenu = function(e) {
e.stopPropagation();
elements.css('border', '1px solid transparent');
$(this).css('border', '1px dashed #333');
$('#menu').addClass('active');
$('#selected-text').text($('#menu').data('text'));
setMenuPosition(e.pageX, e.pageY);
};
var closeMenu = function() {
elements.css('border', '1px solid transparent');
$('#menu').removeClass('active');
};
$('#content').find('h1, p, span').on('mouseenter', setSelectedText);
$('#content').find('h1, p, span').on("click", openMenu);
$('#menu').on('mouseleave', closeMenu);
h1,
p,
span {
border: 1px solid transparent;
}
#content {
background-color: #e9e9ea;
padding: 25px;
}
#menu {
/*visibility: hidden;*/
display:none;
opacity: 0;
transition: visibility 0s, opacity 0.5s linear;
background-color: #84ce6a;
color: #fff;
padding: 15px;
/*position: absolute;*/
position:relative;
top:0;
left:0;
min-width: 200px;
border-radius: 8px;
}
#menu.active {
/*visibility: visible;*/
display:block;
opacity: 1;
}
#my-span {
background-color: rgb(255, 79, 79);
color: rgb(255, 255, 255);
padding: 0px 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="content">
<h1>My Title</h1>
<p>My text</p>
<p>My another text</p>
<p>My text <span id="my-span">My span</span>, other part of the same text</p>
</div>
<div id="menu">
<h4>Selected text is: <span id="selected-text"></span></h4>
<button>
Ok
</button>
</div>