Ответ 1
Проблема заключается в том, что он, кажется, добавляет атрибут ширины, который намного шире чем на самом деле нуждается, что создает дополнительное лишнее пространство.
Причина:
Таким образом был разработан пользовательский интерфейс jQuery.
- Он использует магическое число
17
для вычисления ширины контейнера.
Из кода jquery UI v1.11.4 js
в номерах строк от 4561 до 4574:
var origyearshtml,
numMonths = this._getNumberOfMonths(inst),
cols = numMonths[1],
width = 17,
activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
if ( activeCell.length > 0 ) {
datepicker_handleMouseover.apply( activeCell.get( 0 ) );
}
inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
if (cols > 1) {
inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
}
Он проверяет, больше ли количество столбцов (месяцев для показа) больше 1
, и вычисляет ширину как (17 * cols) + 'em'
.
- Отдых основывается на основном CSS. Существуют стили
ui-datepicker-multi-2
доui-datepicker-multi-4
, которые имеют предопределенную ширину в%
. Это приводит к тому, что внутренний.ui-datepicker-group
будет соответствовать ширине, вычисленной в коде Javascript, и применяется в той же строке (см. Выше код js). Если вы увидите основной CSS, вы обнаружите, что он оформлен только в течение 4 месяцев. Если число месяцев превышает 4, ширина не применяется к.ui-datepicker-group
(хотя соответствующий класс применяется через js), и, следовательно, они не расширяются до всей ширины контейнера.
От jQuery UI v1.11.4 css
в номерах строк от 333 до 341:
.ui-datepicker-multi-2 .ui-datepicker-group {
width: 50%;
}
.ui-datepicker-multi-3 .ui-datepicker-group {
width: 33.3%;
}
.ui-datepicker-multi-4 .ui-datepicker-group {
width: 25%;
}
Вы можете видеть, что классы для ...multi-5
и выше не определены.
Каков наилучший способ устранения этого пробела?
Рекомендуемое решение:
Просто добавьте дополнительные классы, как требуется в вашем пользовательском CSS. Это рекомендуемый способ (также предлагается в ответе здесь: https://forum.jquery.com/topic/datepicket-problem-with-width-when-showing-multiple-months). А также самое чистое решение.
Просто добавьте следующие строки в свой собственный CSS:
.ui-datepicker-multi-5 .ui-datepicker-group { width: 20%; }
.ui-datepicker-multi-6 .ui-datepicker-group { width: 16.666%; }
.ui-datepicker-multi-7 .ui-datepicker-group { width: 14.285%; }
.ui-datepicker-multi-8 .ui-datepicker-group { width: 12.5%; }
.ui-datepicker-multi-9 .ui-datepicker-group { width: 11.111%; }
.ui-datepicker-multi-10 .ui-datepicker-group { width: 10%; }
.ui-datepicker-multi-11 .ui-datepicker-group { width: 9.0909%; }
.ui-datepicker-multi-12 .ui-datepicker-group { width: 8.333%; }
Это обеспечит все возможности до 12 месяцев. Добавьте дополнительные классы, если это необходимо, в соответствии с вашим прецедентом.
Для полноты, вот демонстрация:
Фрагмент:
$("#myCalendar").datepicker({ numberOfMonths: 5, showButtonPanel: false });
.ui-datepicker-multi-5 .ui-datepicker-group { width: 20%; }
.ui-datepicker-multi-6 .ui-datepicker-group { width: 16.666%; }
.ui-datepicker-multi-7 .ui-datepicker-group { width: 14.285%; }
.ui-datepicker-multi-8 .ui-datepicker-group { width: 12.5%; }
.ui-datepicker-multi-9 .ui-datepicker-group { width: 11.111%; }
.ui-datepicker-multi-10 .ui-datepicker-group { width: 10%; }
.ui-datepicker-multi-11 .ui-datepicker-group { width: 9.0909%; }
.ui-datepicker-multi-12 .ui-datepicker-group { width: 8.333%; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://code.jquery.com/ui/1.11.4/themes/ui-lightness/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<div id="myCalendar"></div>