гладкое выравнивание ячеек строки заголовка сетки

Я использую гладкую сетку для отображения данных в сетке. Гладкая сетка вычисляет все такие вещи, как высота, ширина, когда создается эта конкретная сетка, и сетка выглядит очень хорошо. Проблема возникает, когда сетка создана, но скрыта, и при действии чего-то еще (выбор флажка/переключателя) сетка становится видимой. на этот раз расчет идет неправильно, и заголовки и ячейки строк (столбец для заголовка) не выровнены по вертикали. enter image  описание здесь

Я не могу понять, как это контролировать. Если кто-то еще пострадал от рук скользкой сетки и смог защитить себя, пожалуйста, обнажите боеприпасы.

В ожидании, Преманшу


person Premanshu    schedule 19.12.2011    source источник


Ответы (7)


Ни одно из этих решений не сработало для меня, возможно, потому, что код SlickGrid изменился с 2012 года :) Я нашел решение в этом post, он похож на @Wex, но с небольшими отличиями:

.slickgrid, 
.slickgrid *,
.slick-header-column {
    box-sizing: content-box;
    -moz-box-sizing: content-box;
    -webkit-box-sizing: content-box;
}

Где .slickgrid — селектор элемента контейнера сетки.

person coquin    schedule 02.06.2014

Я смог заставить это работать в начальной загрузке 3 (среда, где box-sizing установлено на border-box), просто применив box-sizing: content-box к .slick-header-column.

.slick-header > .slick-header-columns > .slick-header-column {
  -webkit-box-sizing: content-box;                                                              
  -moz-box-sizing: content-box;
  box-sizing: content-box; }

Просто будьте осторожны при изменении border свойств .slick-header-column. Мне удалось удалить границу справа, установив цвет transparent:

.slick-header > .slick-header-columns > .slick-header-column:last-child { 
  border-right-color: transparent;
}

Примечание. Вы можете поиграть со спецификой селектора — селектор, который вы перезаписываете:

.slick-header-column.ui-state-default { ... }
person Wex    schedule 18.04.2014

У меня была аналогичная проблема при использовании его на странице, на которой был twitter bootstrap css. Решение состояло в том, чтобы переопределить box-sizing на content-box

*, *:до, *:после { -webkit-box-sizing: content-box; -moz-box-sizing: поле содержимого; box-sizing: контент-бокс; }

вероятно, следует выяснить, каким именно классам это действительно нужно, но это отсортировало вещи для меня.

person Alan Bell    schedule 12.09.2013
comment
Лучше всего просто переопределить подэлементы .grid, иначе вы можете повлиять на Bootstrap, который рассчитывает иметь дело с размерами рамки. Например. .grid *, .grid:before *, .grid:after * { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; } - person IlluminAce; 20.10.2013

У меня была аналогичная проблема при динамическом отображении/скрытии сеток с использованием JQuery .show() и .hide().

Если вы создаете тег div с display: none (поэтому он изначально скрыт), столбцы сетки не инициализируются должным образом. Чтобы обойти это, я создаю тег div с visibility: hidden и удаляю этот стиль перед использованием методов .hide() и .show().

Мой код выглядит примерно так:

  <div id="mygrid" style="visibility: hidden"></div>

  $grid = $("#mygrid")

  grid = new Slick.Grid($grid, gridData, gridColumns, gridOptions);

  // Hide grid by default, remembering to remove the visibility style
  $grid.hide();
  $grid.css("visibility", "visible");

  // You can now show and hide the grid using normal jQuery methods
  $grid.show();
  $grid.hide();

После инициализации и удаления свойства visibility: hidden; я использую .hide() и .show(), но я подозреваю, что это сработает, если вы манипулируете атрибутом display: none; напрямую, если вы не используете JQuery.

Надеюсь это поможет.

person njr101    schedule 19.12.2011
comment
@njr .. Спасибо за ответ ... но почему-то этот обходной путь кажется недостаточно внимательным для решения проблемы. ![Изображение в вопросе](C:\Users\premanshu\Desktop\slickalignment1 - это то, что я получаю после использования вашего ответа. - person Premanshu; 20.12.2011
comment
Я также добавил несколько пользовательских классов в заголовки, и кажется, что это является причиной такого неправильного выравнивания. Я попробовал один в jsfiddle, используя ваш, и он работал нормально. jsfiddle.net/wLPLA/13 - person Premanshu; 20.12.2011
comment
В вашем jsFiddle у вас есть сетка, определенная с помощью display:none в разметке HTML. Попробуйте вместо этого использовать visibility: hidden - person njr101; 20.12.2011
comment
обновленная скрипта - jsfiddle.net/wLPLA/18, но она дает мне тот же результат - person Premanshu; 20.12.2011
comment
Какой браузер. Протестировано в FF и Chrome, и оба выглядят нормально. Может быть, вы можете включить скриншот. - person njr101; 20.12.2011
comment
Проблема, которая преследует меня, еще предстоит определить. Хотя в jsfiddle дела обстоят лучше, они становятся нарушителями при работе в любом из браузеров. @njr: возможно ли это из-за того, что если я добавил некоторые классы в заголовки, и они являются виновниками !!!! - person Premanshu; 21.12.2011
comment
Да, использование пользовательских классов вполне может быть связано, особенно если вы редактировали стандартные таблицы стилей. Предложенный мной ответ основан только на решении, которое решило мою проблему. Мое предложение состояло бы в том, чтобы начать со стандарта и добавлять свои классы один за другим, пока он не сломается. Если @Tin говорит, что это должно сработать, то я ему верю - в конце концов, он написал это. - person njr101; 21.12.2011
comment
@Tin: Не могли бы вы поделиться, должен ли SlickGrid быть совместимым с IE7? - person Premanshu; 29.12.2011

У меня была точно такая же проблема, и, прочитав ответы @Premanshu и @Tin, я нашел другой способ ее решения.

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

    var myGrid = $("<div id='myGrid' style='width:600px;height:500px;'></div>");
    grid = new Slick.Grid(myGrid, data, columns, options);


   // ... later on, append the container to the DOM and initialize SlickGrid
   setTimeout(function(){
     myGrid.appendTo(that.$el);
     grid.init();
   },1);
person James    schedule 18.12.2012

Это поддерживается и не должно происходить. Фактически, большинство примеров (включая http://mleibman.github.com/SlickGrid/examples/example1-simple.html) имеют такую ​​же реализацию, чтобы убедиться, что она работает правильно.

Можете ли вы включить репродукцию jsfiddle.net?

person Tin    schedule 19.12.2011
comment
если сетка инициализирована и видна при загрузке страницы, она работает отлично. Но если сетка инициализирована и не видна при загрузке страницы, это не работает. - person Premanshu; 20.12.2011
comment
Поддерживалось ли это в версии 1.4.2??? Я использую этот выпуск в качестве основы, и помимо него существуют мои настройки. - person Premanshu; 20.12.2011
comment
Не помню когда меняли. - person Tin; 20.12.2011

Решил это для меня. Вот что я делал: 1. Инициализировал сетку 2. Добавлял к ней данные 3. Представлял ее с помощью модального элемента div, содержащего сетку

Чтобы решить, я сделал это: 1. Представьте его, используя модальный элемент div, содержащий сетку. 2. Инициализируйте сетку. 3. Добавьте данные.

person dinesh salve    schedule 16.10.2014