CSS-сетка, событие JS-mouse onClick

В моем HTML у меня есть один родительский div и внутри него 25 div.

<div class="container>
  <div class="faces"></div>
  <div class="faces"></div>
  <div class="faces"></div>
  .
  .
  .
  .
  .
</div>

Я использую CSS-сетки

.container {
    display: grid;
    grid-template-columns: repeat(5, auto);
    margin: 2% auto;
    width: 750px;
    grid-gap: 1px;
}

.container > div {
    overflow: hidden;
    height: 150px;
    border: 1px solid;
}

.faces img {
    height: 150px;
}   

Это дает мне 5 дел в каждом ряду.

Теперь, когда я нажимаю на любой div, я хочу его расширить

$('.faces').click(function() {
  $(this).css('grid-column','span 3');
  $(this).css('grid-row','span 2');
  $(this).css('height','auto');
}):

Этот JS действительно работает. Но я просто хочу, чтобы только элемент clicked имел такое свойство css. При нажатии другого элемента div предыдущий должен вернуть свою позицию.

Как мне это сделать?

2 ответа

Решение

Вы можете сначала удалить атрибут style со всех граней, а затем установить свойства css.

Попробуйте следующее.

$('.faces').click(function() {
  $('.faces').removeAttr('style');
  $(this).css('grid-column','span 3');
  $(this).css('grid-row','span 2');
  $(this).css('height','auto');
}); //<-- In your solution is a colon instead of semicolon

Здесь вы можете прочитать об удалении атрибута style из элемента. /questions/33011395/kak-udalit-stil-dobavlennyij-s-pomoschyu-funktsiicss/33011415#33011415


Есть и лучшее решение. Вы можете просто использовать removeClass и addClass в JQuery. Таким образом, вы можете создать один класс со свойствами для расширения div.

$('.faces').click(function() {
  $('.faces').removeClass('expand');
  $(this).addClass('expand');
});

Определите expand класс в css

  .expand{
     grid-column: span 3;
     grid-row: span 2;
     height: auto;
  }

Я сделал для вас пример (просто нажмите на красные прямоугольники):

var lastClickedFace = null;

$(".faces").click(function(e) {
 if (lastClickedFace) {
  $(lastClickedFace).css("background-color", "red");
 }
  
 $(this).css("background-color", "green");
  
 lastClickedFace = this;
});
.faces {
  width: 20px;
  height: 20px;
  background-color: red;
  margin-top: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
  <div class="faces"></div>
  <div class="faces"></div>
  <div class="faces"></div>
  <div class="faces"></div>
</div>

Ключ в том, чтобы сохранить "последнее нажатое лицо". В этом случае мы просто назначаем его переменной "lastClickedFace".

В следующий раз, когда вы щелкнете по любому лицу, мы проверим, не является ли эта переменная нулевой (это означает, что у нас было "лицо, которое было нажато последним").

Другие вопросы по тегам