У меня есть код для скрытия определенных div при щелчке, который я показал на изображениях ниже, но как я могу заставить плитки заполнять белые пространства на скрытых div, а затем возвращаться на свое место, снова показывая поля?
Код:
.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
Я хочу, чтобы между второй строкой столбцов всегда оставалось верхнее поле, как можно добиться этого без второй строки?
@shilly, позвольте мне посмотреть, можно ли это обновить и работает ли это.
@SaintLouisEvents: отметьте ответ Фади как принятый.
@fnostro Просто сделал это! Спасибо за ввод, я все еще не понимаю stackOverflow.



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


Попробуй это:
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, спасибо за ввод, но, к сожалению, с моей стороны это не помогло, и теперь поля больше не отображаются при нажатии, поэтому я вернул код. Я очень признателен за помощь!
В фрагменте кода все еще есть много пробелов. Я не понимаю, почему изменение прозрачности элемента приведет к смещению его положения.
@SaintLouisEvents Вы уверены, что вставляете его правильно ?? Он отлично работает в средстве выполнения фрагментов кода
@Shilly Прозрачность удерживает его на одном месте без какого-либо отображения.
@SaintLouisEvents Ваш вопрос в том, как удалить плитки, а затем сделать эту область белой, правильно?
@Shilly Подождите, вопрос как свернуть его позицию ??? Я думал, что это было ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо
@SheshankShankar Вот как я это истолковал: да, показанные изображения похожи на стрелки, где OP ожидает, что элементы будут скользить. Но я не знаю, как он взаимодействует с flexbox и т. д.
Ооо, хорошо, я вижу
@SheshankShankar Я проверил ваш код, и он был очень близок, но я протестировал приведенный ниже код Фади, и, похоже, он выполняет необходимую работу по заполнению всех пробелов. Я очень ценю вашу помощь! Проголосую.
вот что тебе следует делать сначала поместите все столбцы начальной загрузки только в одну строку
Второй момент - это кусок 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»?
вы можете легко назначить класс "margin-bottom" для всех блоков div, содержащих .col-md-4, например .margin-bottom {margin-bottom: 20px; }
@SaintLouisEvents также, пожалуйста, если вы обнаружите, что решение работает, отметьте его как принятый ответ, спасибо
Я пробовал добавить новый <div> перед div Teams и определить стиль полей, но по какой-то причине каждый раз, когда плитки переходят наверх, они оставляют поле сверху.
просто сделайте следующее <div class = "col-md-4 margin-bottom" style = "text-align: center;"> и в свои стили просто добавьте этот класс .margin-bottom {margin-bottom: 20px; }
Еще раз спасибо за ввод, я попытался добавить нижний край к классу и определить его, но у него та же проблема, когда эти нижние приложения идут вверх, а затем он оставляет поле сверху также i.imgur.com/eReg8KG.png
пожалуйста, проверьте правку, которую я сделал @SaintLouisEvents, и скажите, работает ли она
Ты мужчина! Работает безупречно, я проголосовал за и выбрал этот ответ как лучший ответ. Еще раз спасибо всем за помощь!
Позвольте нам продолжить обсуждение в чате.
Я использовал комбинацию 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.
Хм, а вы пробовали заменить
else{d.style.display = '';}наelse{d.style.display = 'flex';}? Я раньше не работал с flexbox, но что-то мне подсказывает, что если у вас есть display: flex в css, а затем ничего не перезаписать, ваша компоновка, основанная на flexbox, сломается.