Javascript сбрасывает мое существующее выравнивание CSS

#javascript #css

Вопрос:

Ниже приведена кнопка some javascript, которую я написал, чтобы скрыть/показать таблицу. По умолчанию таблица центрирована с полями: авто, и это работает.

Но всякий раз, когда я нажимаю кнопку, чтобы скрыть/показать таблицу, она сбрасывает автоматические поля и выравнивает таблицу по левому краю.

Если я отключу отображение:нет, он будет отображаться по центру таблицы, а если я удалю javascript, он будет отображаться нормально. Я попытался установить его снова с помощью

 document.getElementById("vcontrols").style.margin = "0 auto"  

Но это не работает

Вот используемый CSS.

 lt;stylegt;  body {  background-color: #111;  }   .container {  max-width: 80%;  margin: auto;  background: #333;  color: #fff;  text-align: center;  }   .tabela {  margin: 0 auto;  }   #vcontrols {  display: none;  } lt;/stylegt;  

Вот сценарий

 function toggleControls() {  var Skrivalica = document.getElementById('vcontrols');  var displaySetting = Skrivalica.style.display;  var hideshow = document.getElementById('hideshow');   if (displaySetting == 'block') {  Skrivalica.style.display = 'none';  hideshow.innerHTML = 'Full Details';  }  else {  Skrivalica.style.display = 'block';  hideshow.innerHTML = 'Hide Details';  }  }  

И вот основная часть, таблица

 lt;div class="container"gt;  lt;button onclick="toggleControls()" id="hideshow"gt;Full Detailslt;/buttongt;  lt;table class="tabela" id="vcontrols"gt;  lt;trgt;  lt;thgt;Action 1lt;/thgt;  lt;thgt;Action 2lt;/thgt;  lt;thgt;Action 3lt;/thgt;  lt;thgt;Action 4lt;/thgt;  lt;thgt;Action 5lt;/thgt;  lt;/trgt;  lt;trgt;  lt;tdgt;Item 1lt;/tdgt;  lt;tdgt;Item 2lt;/tdgt;  lt;tdgt;Item 3lt;/tdgt;  lt;tdgt;Item 4lt;/tdgt;  lt;tdgt;Item 5lt;/tdgt;  lt;/trgt;  lt;/tablegt;  lt;/divgt;  

Ответ №1:

 function toggleControls() {  var Skrivalica = document.getElementById('vcontrols');  var displaySetting = Skrivalica.style.display;  var hideshow = document.getElementById('hideshow');    if (displaySetting === 'block') {  Skrivalica.style.display = 'none';  hideshow.textContent = 'Full Details';  }  else {  Skrivalica.style.display = 'block';  hideshow.textContent = 'Hide Details';  } } 
 body {  background-color: #111;   }    .btn-container {  display: flex;  justify-content: center;  }   .container {  max-width: 80%;  margin-left: auto;  margin-right: auto;  background: #333;  color: #fff;  text-align: center;  display: flex;  }   .tabela {  margin: 0 auto;  }   #vcontrols {  display: none;  } 
 lt;div class="btn-container"gt;  lt;button onclick="toggleControls()" id="hideshow"gt;Full Detailslt;/buttongt;  lt;/divgt;  lt;div class="container"gt;  lt;table class="tabela" id="vcontrols"gt;  lt;trgt;  lt;thgt;Action 1lt;/thgt;  lt;thgt;Action 2lt;/thgt;  lt;thgt;Action 3lt;/thgt;  lt;thgt;Action 4lt;/thgt;  lt;thgt;Action 5lt;/thgt;  lt;/trgt;  lt;trgt;  lt;tdgt;Item 1lt;/tdgt;  lt;tdgt;Item 2lt;/tdgt;  lt;tdgt;Item 3lt;/tdgt;  lt;tdgt;Item 4lt;/tdgt;  lt;tdgt;Item 5lt;/tdgt;  lt;/trgt;  lt;/tablegt; lt;/divgt; 

Может быть, более простой способ, но я изменил некоторые HTML и CSS. Оставил JS в покое. Похоже, это работало на меня. Дай мне знать, если это не то, что ты хотел!

Комментарии:

1. Эй, Брент, я пытался уйти от flexbox и выполнить необходимую работу в коде javascript. Но ваше решение действительно работает. Для моего конкретного случая таблица находится в контейнере, поэтому я добавил display: flex; flex-направление: столбец; flex-обертывание: обертывание; в класс контейнера, и это сработало. Кнопка стилизована на моей стороне, так что никаких проблем нет. Так что это делает свою работу! Еще раз спасибо! ПРАВКА: Но теперь я вспомнил, что у меня есть несколько элементов, которые нужны в строке… XD Я посмотрю, смогу ли я исправить это с помощью css-сетки позже 😀