#html #css #bootstrap-4 #blazor
#HTML #css #bootstrap-4 #блейзор
Вопрос:
В компоненте razor моего приложения Blazor я пытаюсь реализовать переворачивание карты по щелчку мыши. Каждый раз, когда пользователь нажимает на плитку, окно будет переворачиваться и отображать содержимое на обратной стороне, а когда пользователь нажимает на заднюю плитку, оно снова переключается на переднюю плитку. Я могу добиться этого с помощью наведения курсора мыши, но я хотел добиться этого с помощью щелчка мыши. Вот мой код для получения дополнительной информации:
.card-container {
display: grid;
perspective: 700px;
}
.card-flip {
display: grid;
grid-template: 1fr / 1fr;
grid-template-areas: "frontAndBack";
transform-style: preserve-3d;
transition: all 0.7s ease;
}
.front {
grid-area: frontAndBack;
}
.back {
grid-area: frontAndBack;
transform: rotateY(-180deg);
}
.card-container:hover .card-flip {
transform: rotateY(180deg);
}
<!-- Card 2 -->
<div class="col-md-4 card-container">
<div class="card-flip">
<!-- Card 2 Front -->
<div class="card front">
<img src="https://nikonrumors.com/wp-content/uploads/2014/03/Nikon-1-V3-sample-photo.jpg" class="card-img-top img-fluid">
<div class="card-block">
<h4 class="card-title">Front Card Title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
</div>
</div>
<!-- End Card 2 Front -->
<!-- Card 2 Back -->
<div class="card back">
<div class="card-header">
Featured
</div>
<div class="card-block">
<h4 class="card-title">Special title treatment</h4>
<p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
<a href="#" class="btn btn-primary">Go somewhere</a>
</div>
</div>
<!-- End Card 2 Back -->
</div>
</div>
<!-- End Card 2 -->
Комментарии:
1. Почему бы вам не сделать карточку кнопкой с изображением?
2. вы можете использовать jquery или javascript, чтобы легко перевернуть ее
Ответ №1:
Проще, чем я думал, javascript не требуется. Приятный эффект! Итак, здесь я добавляю / переключаю класс на основе щелчка.
<div class="col-md-4 card-container" @onclick="FlipMe">
<div class="card-flip @flipCss">
...
@code {
bool flipped;
void FlipMe() => flipped = !flipped;
string flipCss => flipped ? "im-flipped" : "";
}
/*.card-container:hover .card-flip {
transform: rotateY(180deg);
}*/
.im-flipped {
transform: rotateY(180deg);
}
Вот рабочий BlazorFiddle
Ответ №2:
Я рекомендую сделать это с помощью javascript или jquery, это очень просто, однако, если вы хотите сделать это только с помощью CSS, вот пример, но <a>
элементы больше не будут работать.
.card-container {
display: grid;
perspective: 700px;
position:relative;
}
.card-flip {
display: grid;
grid-template: 1fr / 1fr;
grid-template-areas: "frontAndBack";
transform-style: preserve-3d;
transition: all 0.7s ease;
}
.front {
grid-area: frontAndBack;
}
.back {
grid-area: frontAndBack;
transform: rotateY(-180deg);
}
#flipCard:checked .card-flip {
transform: rotateY(180deg);
}
label.flipCard{
position:absolute;
top:0;
left:0;
height:100%;
width:100%;
cursor:pointer;
z-index:9999;
}
<!-- Card 2 -->
<div class="col-md-4 card-container">
<label class="flipCard" for="flipCard"></label>
<input type="checkbox" id="flipCard" hidden />
<div class="card-flip">
<!-- Card 2 Front -->
<div class="card front">
<img src="https://nikonrumors.com/wp-content/uploads/2014/03/Nikon-1-V3-sample-photo.jpg" class="card-img-top img-fluid">
<div class="card-block">
<h4 class="card-title">Front Card Title</h4>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
</div>
</div>
<!-- End Card 2 Front -->
<!-- Card 2 Back -->
<div class="card back">
<div class="card-header">
Featured
</div>
<div class="card-block">
<h4 class="card-title">Special title treatment</h4>
<p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
<a href="#" class="btn btn-primary">Go somewhere</a>
</div>
</div>
<!-- End Card 2 Back -->
</div>
</div>
<!-- End Card 2 -->
Комментарии:
1. Спасибо, ваше решение также сработало для меня.