Заполнение пробелов в div скрыть / показать

У меня есть код для скрытия определенных div при щелчке, который я показал на изображениях ниже, но как я могу заставить плитки заполнять белые пространства на скрытых div, а затем возвращаться на свое место, снова показывая поля?

Изображение 1

Изображение 2

Код:

.decisionTreeBox {
	background-color: #4B92DB;
	color: white;
	width: 300px;
	height: 140px;
	display: flex;
  	justify-content: center;
  	align-items: center;
}

#decisionTreeOneDrive {
	background-color: #094AB2;
	color: white;
	width: 300px;
	height: 140px;
	display: flex;
  	justify-content: center;
  	align-items: center;
}

#decisionTreeProject {
	background-color: #3C8B12;
	color: white;
	width: 300px;
	height: 140px;
	display: flex;
  	justify-content: center;
  	align-items: center;
}

#decisionTreeSharePoint {
	background-color: #008CE7;
	color: white;
	width: 300px;
	height: 140px;
	display: flex;
  	justify-content: center;
  	align-items: center;
}

#decisionTreeTeams {
	background-color: #4A1EBD;
	color: white;
	width: 300px;
	height: 140px;
	display: flex;
  	justify-content: center;
  	align-items: center;
}

#decisionTreePlanner {
	background-color: #247D0E;
	color: white;
	width: 300px;
	height: 140px;
	display: flex;
  	justify-content: center;
  	align-items: center;
}

#decisionTreeYammer {
	background-color: #39A4C1;
	color: white;
	width: 300px;
	height: 140px;
	display: flex;
  	justify-content: center;
  	align-items: center;
}

#innerBoxHeadings {
	color: white!important; 
	text-align: center; 
	padding-top: 5px;
}

#columnMiddleBorderLeft, #pageTitle {
	display:none!important;
}
<div class = "outer-container">
            <div class = "row">
                <div class = "col-md-4" style = "text-align: center;">
                    <div data-collaborate = "projects" class = "decisionTreeBox" style = "font-size: larger;">
						Collaborate on Projects</div>
                </div>
                <div class = "col-md-4" style = "text-align: center;">
                    <div data-collaborate = "files" class = "decisionTreeBox" style = "font-size: larger;">
						Collaborate on Files</div>
                </div>
                <div class = "col-md-4" style = "text-align: center;">
                    <div data-collaborate = "socially" class = "decisionTreeBox" style = "font-size: larger;">
						Collaborate Socially</div>
                </div>
            </div>
            <hr />
            <div class = "container" style = "padding: 0px;">
            <div class = "row">
                <div class = "col-md-4" style = "text-align: center;">
                    <div data-decision = "projects" id = "decisionTreeOneDrive"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/onedrive-logo.png" style = "width: 65px; height: 65px; padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>OneDrive</h3></div>
                    </div>
                <div class = "col-md-4" style = "text-align: center;">
                    <div data-decision = "projects" id = "decisionTreeProject"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/Project.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>Project</h3></div>
                    </div>
                <div class = "col-md-4" style = "text-align: center;">
                    <div data-decision = "files" id = "decisionTreeSharePoint"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/SharePointDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>SharePoint</h3></div>
                    </div>
                </div>
                <div class = "row" style = "margin-top: 40px;">
                <div class = "col-md-4" style = "text-align: center;">
                    <div data-decision = "files" id = "decisionTreeTeams"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/TeamsDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>Teams</h3></div>
                </div>
                <div class = "col-md-4" style = "text-align: center;">
                    <div data-decision = "socially" id = "decisionTreePlanner"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/PlannerDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>Planner</h3></div>
                </div>
                <div class = "col-md-4" style = "text-align: center;">
                    <div data-decision = "socially" id = "decisionTreeYammer"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/YammerDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>Yammer</h3></div>
                </div>
            </div>
            </div>
            <script>
            function projectCollab(){
                var divsToCange = document.querySelectorAll('[data-decision]'),
                    attr = this.getAttribute('data-collaborate');

                for(var i = 0; i < divsToCange.length; i++){
                    var d = divsToCange[i];

                    if (d.getAttribute('data-decision') == attr){
                        d.style.display = (!d.style.display) ? 'none' : '';
                    }else{
                        d.style.display = '';
                    }
                }
                return false;
            }

            var divButtons = document.querySelectorAll('[data-collaborate]');

            for(var i = 0; i < divButtons.length; i++){
                divButtons[i].addEventListener('click', projectCollab);
            }
            </script>
</div>

Обновлять

Я выбрал путь Фади и разместил их все в один ряд.

Вот текущая проблема, с которой я столкнулся с кодом Фади: https://i.stack.imgur.com/mbkGX.png

Я хочу, чтобы между второй строкой столбцов всегда оставалось верхнее поле, как можно добиться этого без второй строки?

Хм, а вы пробовали заменить else{d.style.display = '';} на else{d.style.display = 'flex';}? Я раньше не работал с flexbox, но что-то мне подсказывает, что если у вас есть display: flex в css, а затем ничего не перезаписать, ваша компоновка, основанная на flexbox, сломается.

Shilly 08.06.2018 15:28

@shilly, позвольте мне посмотреть, можно ли это обновить и работает ли это.

user9727963 08.06.2018 15:37

@SaintLouisEvents: отметьте ответ Фади как принятый.

fnostro 08.06.2018 18:57

@fnostro Просто сделал это! Спасибо за ввод, я все еще не понимаю stackOverflow.

user9727963 08.06.2018 18:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
100
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуй это:

function projectCollab() {
      var divsToCange = document.querySelectorAll('[data-decision]'),
        attr = this.getAttribute('data-collaborate');

      for (var i = 0; i < divsToCange.length; i++) {
        var d = divsToCange[i];

        if (d.getAttribute('data-decision') == attr) {
          d.style.display = (!d.style.display) ? 'none' : '';
        } else {
          d.style.display = '';
        }
      }
      return false;
    }

    var divButtons = document.querySelectorAll('[data-collaborate]');

    for (var i = 0; i < divButtons.length; i++) {
      divButtons[i].addEventListener('click', projectCollab);
    }
    
.decisionTreeBox {
  background-color: #4B92DB;
  color: white;
  width: 300px;
  height: 140px;
  display: flex;
  justify-content: center;
  align-items: center;
}

#decisionTreeOneDrive {
  background-color: #094AB2;
  color: white;
  width: 300px;
  height: 140px;
  display: flex;
  justify-content: center;
  align-items: center;
}

#decisionTreeProject {
  background-color: #3C8B12;
  color: white;
  width: 300px;
  height: 140px;
  display: flex;
  justify-content: center;
  align-items: center;
}

#decisionTreeSharePoint {
  background-color: #008CE7;
  color: white;
  width: 300px;
  height: 140px;
  display: flex;
  justify-content: center;
  align-items: center;
}

#decisionTreeTeams {
  background-color: #4A1EBD;
  color: white;
  width: 300px;
  height: 140px;
  display: flex;
  justify-content: center;
  align-items: center;
}

#decisionTreePlanner {
  background-color: #247D0E;
  color: white;
  width: 300px;
  height: 140px;
  display: flex;
  justify-content: center;
  align-items: center;
}

#decisionTreeYammer {
  background-color: #39A4C1;
  color: white;
  width: 300px;
  height: 140px;
  display: flex;
  justify-content: center;
  align-items: center;
}

#innerBoxHeadings {
  color: white!important;
  text-align: center;
  padding-top: 5px;
}

#columnMiddleBorderLeft,
#pageTitle {
  display: none!important;
}
<div class = "outer-container">
  <div class = "row">
    <div class = "col-md-4" style = "text-align: center;">
      <div data-collaborate = "projects" class = "decisionTreeBox" style = "font-size: larger;">
        Collaborate on Projects</div>
    </div>
    <div class = "col-md-4" style = "text-align: center;">
      <div data-collaborate = "files" class = "decisionTreeBox" style = "font-size: larger;">
        Collaborate on Files</div>
    </div>
    <div class = "col-md-4" style = "text-align: center;">
      <div data-collaborate = "socially" class = "decisionTreeBox" style = "font-size: larger;">
        Collaborate Socially</div>
    </div>
  </div>
  <hr />
  <div class = "container" style = "padding: 0px;">
    <div class = "row">
      <div class = "col-md-4" style = "text-align: center;">
        <div data-decision = "projects" id = "decisionTreeOneDrive">
          <h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/onedrive-logo.png" style = "width: 65px; height: 65px; padding-bottom: 5px; padding-right: 10px; vertical-align: middle;" />OneDrive</h3>
        </div>
      </div>
      <div class = "col-md-4" style = "text-align: center;">
        <div data-decision = "projects" id = "decisionTreeProject">
          <h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/Project.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;" />Project</h3>
        </div>
      </div>
      <div class = "col-md-4" style = "text-align: center;">
        <div data-decision = "files" id = "decisionTreeSharePoint">
          <h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/SharePointDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;" />SharePoint</h3>
        </div>
      </div>
      <div class = "col-md-4" style = "text-align: center;">
        <div data-decision = "files" id = "decisionTreeTeams">
          <h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/TeamsDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;" />Teams</h3>
        </div>
      </div>
      <div class = "col-md-4" style = "text-align: center;">
        <div data-decision = "socially" id = "decisionTreePlanner">
          <h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/PlannerDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;" />Planner</h3>
        </div>
      </div>
      <div class = "col-md-4" style = "text-align: center;">
        <div data-decision = "socially" id = "decisionTreeYammer">
          <h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/YammerDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;" />Yammer</h3>
        </div>
      </div>
    </div>
    <div class = "row" style = "margin-top: 40px;">
      
    </div>
  </div>
</div>

Это работает?

Привет, @Sheshank, спасибо за ввод, но, к сожалению, с моей стороны это не помогло, и теперь поля больше не отображаются при нажатии, поэтому я вернул код. Я очень признателен за помощь!

user9727963 08.06.2018 15:39

В фрагменте кода все еще есть много пробелов. Я не понимаю, почему изменение прозрачности элемента приведет к смещению его положения.

Shilly 08.06.2018 15:40

@SaintLouisEvents Вы уверены, что вставляете его правильно ?? Он отлично работает в средстве выполнения фрагментов кода

Sheshank S. 08.06.2018 15:40

@Shilly Прозрачность удерживает его на одном месте без какого-либо отображения.

Sheshank S. 08.06.2018 15:41

@SaintLouisEvents Ваш вопрос в том, как удалить плитки, а затем сделать эту область белой, правильно?

Sheshank S. 08.06.2018 15:43

@Shilly Подождите, вопрос как свернуть его позицию ??? Я думал, что это было ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо

Sheshank S. 08.06.2018 15:44

@SheshankShankar Вот как я это истолковал: да, показанные изображения похожи на стрелки, где OP ожидает, что элементы будут скользить. Но я не знаю, как он взаимодействует с flexbox и т. д.

Shilly 08.06.2018 15:47

Ооо, хорошо, я вижу

Sheshank S. 08.06.2018 15:48

@SheshankShankar Я проверил ваш код, и он был очень близок, но я протестировал приведенный ниже код Фади, и, похоже, он выполняет необходимую работу по заполнению всех пробелов. Я очень ценю вашу помощь! Проголосую.

user9727963 08.06.2018 17:09
Ответ принят как подходящий

вот что тебе следует делать сначала поместите все столбцы начальной загрузки только в одну строку

Второй момент - это кусок js

            for(var i = 0; i < divsToCange.length; i++){
                var d = divsToCange[i];
                if (d.getAttribute('data-decision') == attr){
                    d.parentNode.style.display ='none' ;
                }
                else{
                    d.parentNode.style.display = 'block';
                }
            }

вот полный HTML + JS

<div class = "outer-container">
        <div class = "row">
            <div class = "col-md-4" style = "text-align: center;">
                <div data-collaborate = "projects" class = "decisionTreeBox" style = "font-size: larger;">
                    Collaborate on Projects</div>
            </div>
            <div class = "col-md-4" style = "text-align: center;">
                <div data-collaborate = "files" class = "decisionTreeBox" style = "font-size: larger;">
                    Collaborate on Files</div>
            </div>
            <div class = "col-md-4" style = "text-align: center;">
                <div data-collaborate = "socially" class = "decisionTreeBox" style = "font-size: larger;">
                    Collaborate Socially</div>
            </div>
        </div>
        <hr />
        <div class = "container" style = "padding: 0px;">
        <div class = "row">
            <div class = "col-md-4 margin-bottom-20" style = "text-align: center;">
                <div data-decision = "projects" id = "decisionTreeOneDrive"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/onedrive-logo.png" style = "width: 65px; height: 65px; padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>OneDrive</h3></div>
                </div>
            <div class = "col-md-4 margin-bottom-20" style = "text-align: center;">
                <div data-decision = "projects" id = "decisionTreeProject"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/Project.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>Project</h3></div>
                </div>
            <div class = "col-md-4 margin-bottom-20" style = "text-align: center;">
                <div data-decision = "files" id = "decisionTreeSharePoint"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/SharePointDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>SharePoint</h3></div>
                </div>
            <div class = "col-md-4 margin-bottom-20" style = "text-align: center;">
                <div data-decision = "files" id = "decisionTreeTeams"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/TeamsDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>Teams</h3></div>
            </div>
            <div class = "col-md-4 margin-bottom-20" style = "text-align: center;">
                <div data-decision = "socially" id = "decisionTreePlanner"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/PlannerDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>Planner</h3></div>
            </div>
            <div class = "col-md-4 margin-bottom-20" style = "text-align: center;">
                <div data-decision = "socially" id = "decisionTreeYammer"><h3 id = "innerBoxHeadings"><img src = "/TrainingResourceCenter/O365Training/PublishingImages/YammerDecisionTree.png" style = "padding-bottom: 5px; padding-right: 10px; vertical-align: middle;"/>Yammer</h3></div>
            </div>
        </div>
        </div>
        <script>
        function projectCollab(){
            var divsToCange = document.querySelectorAll('[data-decision]'),
                attr = this.getAttribute('data-collaborate');

            for(var i = 0; i < divsToCange.length; i++){
                var d = divsToCange[i];
                console.info("2@ ",attr)
                if (d.getAttribute('data-decision') == attr){
                    d.parentNode.style.display ='none' ;
                }
                else{
                    d.parentNode.style.display = 'block';
                }
            }
            return false;
        }

        var divButtons = document.querySelectorAll('[data-collaborate]');

        for(var i = 0; i < divButtons.length; i++){
            divButtons[i].addEventListener('click', projectCollab);
        }
        </script>

РЕДАКТИРОВАТЬ для проблемы с интервалом, пожалуйста, определите это в своем теге стиля

    <style>

.margin-bottom-20{
    margin-bottom:20px;
  }
... rest of your styles 

Я также обновил html, чтобы взять имя класса, как показано выше все, что я сделал, это <div class = "col-md-4 margin-bottom-20" style = "text-align: center;">

Это отлично работает @Fadi, как я могу сделать так, чтобы у второго набора div всегда был запас сверху? Есть ли верхнее поле во втором ряду, где находятся «Команды», «Планировщик» и «Yammer»?

user9727963 08.06.2018 17:55

вы можете легко назначить класс "margin-bottom" для всех блоков div, содержащих .col-md-4, например .margin-bottom {margin-bottom: 20px; }

Fadi Abo Msalam 08.06.2018 18:43

@SaintLouisEvents также, пожалуйста, если вы обнаружите, что решение работает, отметьте его как принятый ответ, спасибо

Fadi Abo Msalam 08.06.2018 18:44

Я пробовал добавить новый <div> перед div Teams и определить стиль полей, но по какой-то причине каждый раз, когда плитки переходят наверх, они оставляют поле сверху.

user9727963 08.06.2018 19:01

просто сделайте следующее <div class = "col-md-4 margin-bottom" style = "text-align: center;"> и в свои стили просто добавьте этот класс .margin-bottom {margin-bottom: 20px; }

Fadi Abo Msalam 08.06.2018 19:03

Еще раз спасибо за ввод, я попытался добавить нижний край к классу и определить его, но у него та же проблема, когда эти нижние приложения идут вверх, а затем он оставляет поле сверху также i.imgur.com/eReg8KG.png

user9727963 08.06.2018 19:09

пожалуйста, проверьте правку, которую я сделал @SaintLouisEvents, и скажите, работает ли она

Fadi Abo Msalam 08.06.2018 19:16

Ты мужчина! Работает безупречно, я проголосовал за и выбрал этот ответ как лучший ответ. Еще раз спасибо всем за помощь!

user9727963 08.06.2018 19:19

Позвольте нам продолжить обсуждение в чате.

user9727963 08.06.2018 20:47

Я использовал комбинацию jQuery и CSS свойство grid-auto-flow для достижения эффекта.

Я также использовал метод toggle() для переключения видимости в качестве теста.


$('.item1').click((e) => {
  e.stopPropagation();
  e.preventDefault();
  $(".item5, .item6").toggle();
});
.grid-container {
  display: grid;
  grid-template-columns: auto auto auto;
  grid-template-rows: auto auto;
  grid-gap: 10px;
}

div {
  text-align: center;
  padding: 15px;
}

[class^='item'] {
  background-color: #2196F3;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "grid-container controller" style = "grid-auto-flow: row;">
  <div class = "item1">1</div>
  <div class = "item2">2</div>
  <div class = "item3">3</div>
  <div class = "item4">4</div>
</div>

<hr>

<div class = "grid-container" style = "grid-auto-flow: row;">
  <div class = "item5">1</div>
  <div class = "item6">2</div>
  <div class = "item7">3</div>
  <div class = "item8">4</div>
</div>

Спасибо за помощь Алексу! К сожалению, это не работает с моим предопределенным CSS в нашем клиенте SharePoint.

user9727963 08.06.2018 17:54

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