#html #css
#HTML #css
Вопрос:
Я хочу сделать наведение для всей строки, но в моем коде ниже наведение работает только для текста. Я хочу сделать это для всей строки, включая caret
и заголовок меню.
Я попробовал этот код:
$(".treeparent").click(function () {
var $tog = $(this).next('.tog');
$tog.slideToggle();
if ($tog.hasClass('open')){
$tog.removeClass('open');
$(this).removeClass('caret-down');
}else{
$tog.addClass('open');
$(this).addClass('caret-down');
}
});
ul, #myUL {
list-style-type: none;
}
#myUL {
margin: 0;
padding: 0;
}
.caret {
cursor: pointer;
-webkit-user-select: none; /* Safari 3.1 */
-moz-user-select: none; /* Firefox 2 */
-ms-user-select: none; /* IE 10 */
user-select: none;
font-size: 17px;
}
.caret::before {
font-family: "FontAwesome";
content: "f078";
color: #007BFF;
margin-right: 10px;
float:right;
-moz-transition: transform 0.6s;
-webkit-transition: transform 0.6s;
transition: transform 0.6s;
}
.caret-down::before {
-ms-transform: rotate(-180deg); /* IE 9 */
-webkit-transform: rotate(-180deg); /* Safari */
transform: rotate(-180deg);
}
.nested {
display: none;
margin: 10px;
}
.active {
display: block;
}
.treeparent {
/* display: table-cell; */
overflow: auto;
max-width: 350px;
max-height: 350px;
margin: auto;
height: 35px;
font-size: 14px;
color: #007BFF;
margin: 3px;
width: 260px;
vertical-align:middle;
padding: 2px;
}
.treeparent:hover {
background-color: #cee0f5;
color: black;
transition: background 0.5s;
}
.flip {
transform: rotate(-180deg);
}
.ripple {
background-position: center;
}
.ripple:hover {
background: #cee0f5 radial-gradient(circle, transparent 5%, #a8cdf7 1%) center/15000%;
}
.ripple:active {
background-color: #6eb9f7;
background-size: 100%;
transition: background 0s;
}
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
color: #007bff;
background-color: #f8f9fa!important;
font-weight: bold;
}
.nav-item {
margin-bottom: -8px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="myUL">
<div class="menu-text">
<li>
<span class="caret treeparent ripple">Menu 1<i class="fas fa-chevron-down arrow"></i></span>
<ul class="nested nav nav-pills flex-column tog">
<li class="nav-item" rel="0">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 1</a>
</li>
<li class="nav-item" rel="1">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 2</a>
</li>
</ul>
</li>
<li>
<span class="caret treeparent ripple">Menu 2<i class="fas fa-chevron-down arrow"></i></span>
<ul class="nested nav nav-pills flex-column tog">
<li class="nav-item" rel="0">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 1</a>
</li>
</ul>
</li>
</div>
</ul>
Вы можете воспроизвести проблему -> https://jsfiddle.net/gL4ombkt /
Как я должен изменить свой код, чтобы устранить проблему?
Комментарии:
1. К вашему сведению, я добавил соответствующий код из скрипки во фрагмент, чтобы мы могли видеть подменю. Для дальнейшего использования весь код, который применяется к проблеме, должен быть включен непосредственно в сам вопрос (вы включили свой HTML, но CSS также был важен!). Внешние ссылки могут со временем прерываться или меняться, и вопрос не был бы полезен для других пользователей, если бы это произошло 🙂
Ответ №1:
Вы можете использовать класс display:inline-block;
to .caret{...}
.
ul,
#myUL {
list-style-type: none;
}
#myUL {
margin: 0;
padding: 0;
}
.caret {
cursor: pointer;
-webkit-user-select: none;
/* Safari 3.1 */
-moz-user-select: none;
/* Firefox 2 */
-ms-user-select: none;
/* IE 10 */
user-select: none;
font-size: 17px;
display: block;
}
.caret::before {
font-family: "FontAwesome";
content: "f078";
color: #007BFF;
margin-right: 10px;
float: right;
-moz-transition: transform 0.6s;
-webkit-transition: transform 0.6s;
transition: transform 0.6s;
}
.caret-down::before {
-ms-transform: rotate(-180deg);
/* IE 9 */
-webkit-transform: rotate(-180deg);
/* Safari */
transform: rotate(-180deg);
}
.nested {
display: none;
margin: 10px;
}
.active {
display: block;
}
.treeparent {
/* display: table-cell; */
overflow: auto;
max-width: 350px;
max-height: 350px;
margin: auto;
height: 35px;
font-size: 14px;
color: #007BFF;
margin: 3px;
width: 260px;
vertical-align: middle;
padding: 2px;
}
.treeparent:hover {
background-color: #cee0f5;
color: black;
transition: background 0.5s;
}
.flip {
transform: rotate(-180deg);
}
.ripple {
background-position: center;
}
.ripple:hover {
background: #cee0f5 radial-gradient(circle, transparent 5%, #a8cdf7 1%) center/15000%;
}
.ripple:active {
background-color: #6eb9f7;
background-size: 100%;
transition: background 0s;
}
.nav-pills .nav-link.active,
.nav-pills .show>.nav-link {
color: #007bff;
background-color: #f8f9fa!important;
font-weight: bold;
}
.nav-item {
margin-bottom: -8px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="myUL">
<div class="menu-text">
<li>
<span class="caret treeparent ripple">Menu 1<i class="fas fa-chevron-down arrow"></i></span>
<ul class="nested nav nav-pills flex-column tog">
<li class="nav-item" rel="0">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 1</a>
</li>
<li class="nav-item" rel="1">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 2</a>
</li>
</ul>
</li>
<li>
<span class="caret treeparent ripple">Menu 2<i class="fas fa-chevron-down arrow"></i></span>
<ul class="nested nav nav-pills flex-column tog">
<li class="nav-item" rel="0">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 1</a>
</li>
</ul>
</li>
</div>
</ul>
Ответ №2:
Вам нужно применить CSS для hover
применения к элементу блока, который включает текст и caret
(на данный момент они находятся во встроенном элементе, а курсор плавает из родительского).
Вы можете добиться этого, создав span.treeparent
блочный элемент, например block
или inline-block
.menu-text li span{
display: block;
}
Если вы также хотите, чтобы эффект наведения применялся к элементам в выпадающем списке, вы можете применить тот же стиль, что и .treeparent:hover
вот так:
.treeparent:hover,
.nested.nav li:hover {
background-color: #cee0f5;
color: black;
transition: background 0.5s;
}
Рабочий пример: (Обратите внимание, что при превращении span в блочный элемент теперь также применяется стиль CSS, который вы использовали с заполнением, шириной и т.д., Который не работает со встроенным элементом)
$(".treeparent").click(function () {
var $tog = $(this).next('.tog');
$tog.slideToggle();
if ($tog.hasClass('open')){
$tog.removeClass('open');
$(this).removeClass('caret-down');
}else{
$tog.addClass('open');
$(this).addClass('caret-down');
}
});
ul,
#myUL {
list-style-type: none;
}
#myUL {
margin: 0;
padding: 0;
background: #ddd;
}
.caret {
cursor: pointer;
-webkit-user-select: none;
/* Safari 3.1 */
-moz-user-select: none;
/* Firefox 2 */
-ms-user-select: none;
/* IE 10 */
user-select: none;
font-size: 17px;
}
.caret::before {
font-family: "FontAwesome";
content: "f078";
color: #007BFF;
margin-right: 10px;
float: right;
-moz-transition: transform 0.6s;
-webkit-transition: transform 0.6s;
transition: transform 0.6s;
}
.caret-down::before {
-ms-transform: rotate(-180deg);
/* IE 9 */
-webkit-transform: rotate(-180deg);
/* Safari */
transform: rotate(-180deg);
}
.nested {
display: none;
margin: 10px;
}
.active {
display: block;
}
.treeparent {
/* display: table-cell; */
overflow: auto;
max-width: 350px;
max-height: 350px;
margin: auto;
height: 35px;
font-size: 14px;
color: #007BFF;
margin: 3px;
width: 260px;
vertical-align: middle;
padding: 2px;
background: #CFB;
}
.menu-text li span{
display: block;
}
.treeparent:hover,
.nested.nav li:hover {
background-color: #cee0f5;
color: black;
transition: background 0.5s;
}
.flip {
transform: rotate(-180deg);
}
.ripple {
background-position: center;
}
.ripple:hover {
background: #cee0f5 radial-gradient(circle, transparent 5%, #a8cdf7 1%) center/15000%;
}
.ripple:active {
background-color: #6eb9f7;
background-size: 100%;
transition: background 0s;
}
.nav-pills .nav-link.active,
.nav-pills .show>.nav-link {
color: #007bff;
background-color: #f8f9fa!important;
font-weight: bold;
}
.nav-item {
margin-bottom: -8px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="myUL">
<div class="menu-text">
<li>
<span class="caret treeparent ripple">Menu 1<i class="fas fa-chevron-down arrow"></i></span>
<ul class="nested nav nav-pills flex-column tog">
<li class="nav-item" rel="0">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 1</a>
</li>
<li class="nav-item" rel="1">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 2</a>
</li>
</ul>
</li>
<li>
<span class="caret treeparent ripple">Menu 2<i class="fas fa-chevron-down arrow"></i></span>
<ul class="nested nav nav-pills flex-column tog">
<li class="nav-item" rel="0">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 1</a>
</li>
</ul>
</li>
</div>
</ul>
Комментарии:
1. Существует проблема с вашим ответом. Когда я нажимаю на указатель мыши, это не работает. Он должен щелкнуть по заголовку меню. Мой ожидаемый результат заключается в том, что при нажатии должна отображаться вся строка вывода.
2. @user_v12 Хорошо, я изменю его, чтобы он работал с этим… Я не включил JS, так как не знал, что это важно 🙂
3. Мой проверенный код хорошо работает на обычном экране ноутбука. Но когда я использую дополнительный монитор (широкоэкранный с высоким разрешением)
menu titles (Menu 1, Menu 2)
, на боковой панели есть место. Моя настоящая проблема в этом. Приведенный выше ответ Yore не решает мою проблему.4. @user_v12 Вы имеете в виду большое пространство справа от вашего меню? Можете ли вы объяснить, какое пространство вы имеете в виду? В коде, который вы нам дали, не упоминается боковая панель, поэтому мы не можем помочь вам решить проблему, если я не знаю, в чем она! Если вы запустите пример, я добавлю фон, чтобы сделать его более четким. Я подозреваю, что проблема может быть в том, что
treeparent
не может увеличиться более чем на 350px, потому что CSS имеетmax-width: 350px;
Ответ №3:
пожалуйста, добавьте отступы справа на 100% к классу treeparent
.treeparent {
.............
padding-right: 100%;
}