Я работаю над Веб-сайт с таблицами цен. В этих таблицах цен есть кнопка внизу и шкала преобразования при наведении курсора, но они не работают должным образом. Таблица внизу страницы работает, как и предполагалось, а над ней — нет. У кого-нибудь есть объяснение, почему это происходит?
Вот мой код CSS и HTML для этой части сайта:
.first-titre-table {
color: black;
font-size: 40px;
font-family: 'Open Sans';
}
.titre-table {
margin-top: 50%;
color: black;
width: auto;
height: auto;
font-size: 40px;
font-family: 'Open Sans';
}
@import url(https://fonts.googleapis.com/css?family=Open+Sans:300,400,700);
.snip1404 {
font-family: 'Open Sans';
color: #ffffff;
text-align: left;
font-size: 16px;
max-width: 1000px;
left: 20%;
margin-right: auto;
width: 100%;
padding: 10px;
margin-top: 7%;
display: block;
flex-wrap: wrap;
align-content: center;
position: relative;
}
.snip1404 img {
position: absolute;
left: 0;
top: 0;
height: 100%;
z-index: -1;
}
.snip1404 .plan {
margin: 6px;
margin-top: 7px;
width: 25%;
position: relative;
float: left;
overflow: hidden;
border: 5px solid #730000;
box-shadow: 0px 0px 10px #000;
background-color: #b30000;
}
.snip1404 .plan:hover {
-webkit-transform: scale(1.1);
transform: scale(1.1);
}
.snip1404 * {
-webkit-box-sizing: border-box;
box-sizing: border-box;
-webkit-transition: all 0.25s ease-out;
transition: all 0.25s ease-out;
}
.snip1404 header {
background-color: #b30000;
color: #ffffff;
}
.snip1404 .plan-title {
background-color: rgba(0, 0, 0, 0.5);
position: relative;
margin: 0;
padding: 20px 20px 0;
text-transform: uppercase;
letter-spacing: 4px;
}
.snip1404 .plan-title::after {
position: absolute;
content: '';
top: 100%;
left: 0;
width: 0;
height: 0;
border-style: solid;
border-width: 40px 300px 0 0;
border-color: rgba(0, 0, 0, 0.5) transparent transparent;
}
.snip1404 .plan-cost {
padding: 40px 20px 10px;
text-align: right;
}
.snip1404 .plan-price {
font-weight: 600;
font-size: 3em;
}
.snip1404 .plan-type {
opacity: 0.8;
font-size: 0.9em;
text-transform: uppercase;
}
.snip1404 .plan-features {
padding: 0 0 20px;
margin-left: 10px;
list-style: outside none none;
text-align: center;
}
.snip1404 .plan-features li {
padding: 8px 5%;
}
.snip1404 .plan-features i {
margin-right: 8px;
color: rgba(0, 0, 0, 0.5);
}
.snip1404 .plan-select {
border-top: 1px solid rgba(0, 0, 0, 0.2);
padding: 20px;
text-align: center;
}
.snip1404 .plan-select a {
background-color: #700000;
color: #ffffff;
text-decoration: none;
padding: 12px 20px;
font-size: 0.75em;
font-weight: 600;
border-radius: 20px;
text-transform: uppercase;
letter-spacing: 4px;
display: inline-block;
}
.snip1404 .plan-select a:hover {
background-color: #ff4d4d;
}
.text-garantie {
font-size: 17px;
display: inline;
color: #fff;
font-weight: bold;
text-shadow: 0px 0px 7px #ddd;
}
@media only screen and (max-width: 767px) {
.snip1404 .plan {
width: 50%;
}
.snip1404 .plan-title,
.snip1404 .plan-select a {
-webkit-transform: translateY(0);
transform: translateY(0);
}
.snip1404 .plan-select,
.snip1404 .plan-featured .plan-select {
padding: 20px;
}
.snip1404 .plan-featured {
margin-top: 0;
}
}
@media only screen and (max-width: 440px) {
.snip1404 .plan {
width: 100%;
}
.snip1404 .plan-non-featured {
width: 100%;
}
.snip1404 .plan-featured {
width: 100%;
}
}<div class = "snip1404">
<h2 class = "first-titre-table">
Contrats Chaudière Gaz
</h2>
<div class = "plan">
<header>
<h4 class = "plan-title">
Contrat 1 an
</h4>
<div class = "plan-cost">
<span class = "plan-price">
188€
</span>
<span class = "plan-type">
/an
</span>
</div>
</header>
<ul class = "plan-features">
<li>
1 intervention/an
</li>
<li style = "margin-bottom:63%;">
</li>
</ul>
<div class = "plan-select">
<a href = "">
Choisir
</a>
</div>
</div>
</div>Для HTML все таблицы цен имеют одинаковый код. Единственная разница между ними заключается в показанной цене и количестве строк в списке «план-функции». Я также использую некоторый код JavaScript, но не думаю, что это вызывает проблему. Я всегда могу опубликовать сценарий, если это необходимо.
потому что snip1404 имеет неправильную высоту, дайте ему 700, это должно исправить
Нет, это было не так, но Михай Т продвинул меня на один шаг вперед в решении моей проблемы.
Похоже, это проблема с JS - если вы берете последний блок из класса (этот блок затем сильно ломается), но теперь работает предпоследний блок
Пожалуйста, взгляните на мой ответ. Я добавил к нему еще несколько деталей. Дайте мне знать в комментариях к этому ответу, если он работает для вас или вам нужна дополнительная помощь.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема с float:left на .plan . Использование float выведет элемент из обычного потока документа. Вот почему вы никогда не должны использовать float для целей макета. Это приводит к тому, что плавающий элемент не находится внутри своего контейнера, поэтому вы не можете взаимодействовать с ним (наводить указатель мыши) так, как вам хотелось бы.
Вместо этого используйте flex на контейнере snip1404 . И width:100% в заголовке, который я вижу, имеет много «имен». Вы должны использовать общий класс для всех заголовков и присвоить этому классу width:100% . Тогда все пойдет хорошо.
Также позиционирование с position:absolute на контенте не идеально. Другие поля и т. д. выглядят странно. Но ваша проблема определенно вызвана float:left.
Кроме того, чтобы разместить кнопку внизу, не используйте margin-bottom:63% или что-то подобное на li. Это почти никогда не работает на адаптивном веб-сайте. У вас есть много вариантов, чтобы кнопка всегда оставалась внизу.
Вы также можете использовать display:flex вместе с flex-direction: column в элементе plan. Это потому, что мы хотим использовать гибкие стили для его дочерних элементов и column потому что мы хотим, чтобы его дочерние элементы располагались один поверх другого, а не рядом. Затем используйте flex-grow:1 в списке (функции), чтобы он увеличивался и занимал по высоте доступное пространство между заголовком и кнопкой. Таким образом, кнопка всегда будет в самом низу элемента plan.
я сделал простой пример ниже
.snip1404 {
display:flex;
flex-wrap: wrap;
}
.first-titre-table { /* here use a common class for all titles */
width:100%;
}
.plan {
background:red;
/* use display:flex so we can use flex styles on the children */
display:flex;
flex-direction: column;
/* no float left */
}
.plan-features {
/* will occupy all the space available between the header and the button */
flex-grow:1;
}
.plan:hover {
transform: scale(1.2);
}<div class = "snip1404">
<h2 class = "first-titre-table">Contrats Chaudière Gaz</h2>
<div class = "plan">
<header>
<h4 class = "plan-title">
Contrat 1 an
</h4>
<div class = "plan-cost"><span class = "plan-price">188€</span><span class = "plan-type">/an</span></div>
</header>
<ul class = "plan-features">
<li>1 intervention/an</li>
<li style = "margin-bottom:63%;"></li>
</ul>
<div class = "plan-select"><a href = "">Choisir</a></div>
</div>
<div class = "plan">
<header>
<h4 class = "plan-title">
Contrat 1 an
</h4>
<div class = "plan-cost"><span class = "plan-price">188€</span><span class = "plan-type">/an</span></div>
</header>
<ul class = "plan-features">
<li>1 intervention/an</li>
<li style = "margin-bottom:63%;"></li>
</ul>
<div class = "plan-select"><a href = "">Choisir</a></div>
</div>
<div class = "plan">
<header>
<h4 class = "plan-title">
Contrat 1 an
</h4>
<div class = "plan-cost"><span class = "plan-price">188€</span><span class = "plan-type">/an</span></div>
</header>
<ul class = "plan-features">
<li>1 intervention/an</li>
<li></li>
</ul>
<div class = "plan-select"><a href = "">Choisir</a></div>
</div>
</div>Да, это сработало для меня, я внес предложенные вами изменения, и теперь все работает отлично, спасибо! Также я обновлю свой сайт, чтобы вы могли видеть изменения.
Я задавался вопросом о консоли веб-сайта с указанной выше ссылкой, где я вижу ошибку Jquery, что-то вроде этого $(".hover").mouseleave(он показывает ошибку Uncaught ReferenceError: $ не определен в main.js:1 это означает, что jquery script не связан должным образом. Пожалуйста, попробуйте устранить эту ошибку, и она может начать работать нормально, спасибо