Показать сообщение отдельно
  #104 (permalink)  
Старый 23.09.2019, 21:21
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Malleys,
скорее всего ты прав, эта „пляска интерфейса “ скорее всё портит, возникает вопрос как при текущем месяце кнопку "сегодня" заменить на див в котором вывести часы/минуты/секунды,,а при просмотре др месяцев этот див становился кнопкой с текстом "сегодня"?

<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="utf-8" />
    <title></title>
    <style type="text/css">
      body {
        width: 360px;
      }
      body,
      select,
      input {
        font: 14px serif;
      }
      #calendar {
        width: 330px;
        display: inline-block;
        border: 1px solid #a9a9a9;
        border-radius: 6px/4px;
        padding: 5px;
      }
      #navigation_panel {
        background-color: hsl(207, 100%, 92%);
        height: 53px;
        border: 1px solid #a9a9a9;
        border-radius: 6px/4px;
        padding: 5px;
        margin-bottom: 3px;
        text-align: center;
        vertical-align: middle;
      display: -webkit-box;
      display: -webkit-flex;
      display: flex;
      -webkit-box-align: center;
      -webkit-align-items: center;
      align-items: center;
      -webkit-box-pack: center;
      -webkit-justify-content: center;
      justify-content: center;
      -webkit-flex-wrap: wrap;
      flex-wrap: wrap;
      }
      #navigation_panel button,
      #navigation_panel #calendar_year {
        background-color: hsl(207, 100%, 85%);
        color: hsl(207, 100%, 35%);
        font: 14px serif;
        border: 1px solid hsl(207, 100%, 35%);
      }
      #calendar_month {
        background-color: transparent;
        color: hsl(207, 100%, 35%);
        font: 14px serif;
        border: 1px solid hsl(207, 100%, 35%);
      }
      #navigation_panel button {
        height: 24px;
        vertical-align: middle;
      }
      #background_month {
        background-color: hsl(207, 100%, 85%);
        display: inline-block;
      }
      button.minus {
        width: 28px;
        text-align: center;
        border-radius: 12px 0 0 12px / 10px 0 0 10px;
        margin-right: -1px;
      }
      button.plus {
        width: 28px;
        text-align: center;
        border-radius: 0 12px 12px 0 / 0 10px 10px 0;
        margin-left: -1px;
      }
      .month_plus {
        margin-right: 35px;
        margin-left: px;
      }
      #presently {
        width: 288px;
        margin-top: 5px;
        border-radius: 12px/10px;
        -webkit-box-flex: 0;
        -webkit-flex: 0 0 288px;
        flex: 0 0 288px;
      }
      #calendar_month {
        width: 89px;
        display: inline-block;
      }
      #calendar_year {
        width: 54px;
        display: inline-block;
      }
      select {
        height: 24px;
      }
      input {
        height: 20px;
        border: 1px solid #a9a9a9;
        display: inline-block;
        text-align: center;
      }
      #table {
        font: sans-serif;
        width: 100%;
        height: 222px;
        padding: 2px;
      }
      #table,
      td {
        border: 1px solid #a9a9a9;
        border-radius: 6px/4px;
      }
      td {
        margin: 1px;
        text-align: center;
      }
      td.week-day {
        height: 33px;
      }
      .prevMonth {
        opacity: 0.5;
      }
      .curMonth {
        background-color: #ff69b4;
      }
      .nextMonth {
        opacity: 0.4;
      }
      .nextMonth:nth-child(n + 6) {
      background-color: #ffebf5;
      }
      .curDay {
        background-color: #fffacd;
      }
      #presently.hide {
        display: none;
      }
      .week-day {
        background-color: #c2d6ff;
        color: #0069ff;
      }
      .week-day.curDay {
        border: 1px solid #285fcd;
        background-color: #6b9cff;
        color: #e6f5ff;
        font-weight: bold;
      }
      .week-day:nth-child(n + 6) {
        background-color: #ffcae3;
        color: #ff0075;
      }
      .week-day.curDay:nth-child(n + 6) {
        border: 1px solid #ff0075;
        background-color: #ff97c8;
        color: #fff8fc;
        text-shadow:
        1px 1px #ff0075,
        1px -1px #ff0075,
        -1px 1px #ff0075,
        -1px -1px #ff0075,
        1px 0 #ff0075,
        -1px 0 #ff0075,
        0 1px #ff0075,
        0 -1px #ff0075;
      }
      #table tbody td {
        background-color: #def1ff;
        color: #0091ff;
      }
      #table tbody td:nth-child(n + 6) {
        background-color: #ffdced;
        color: #ff0075;
      }
      #table tbody td.curMonth.curDay {
        background-color: #c2d6ff;
        border: 1px solid hsl(207, 100%, 35%);
        font-weight: bold;
        color: #fff;
        text-shadow: 1px 1px hsl(207, 100%, 35%), -1px 1px hsl(207, 100%, 35%), 1px -1px hsl(207, 100%, 35%), -1px -1px hsl(207, 100%, 35%),
          1px 0 hsl(207, 100%, 35%), 0 1px hsl(207, 100%, 35%), -1px 0 hsl(207, 100%, 35%), 0 -1px hsl(207, 100%, 35%);
      }
      #table tbody td.curMonth.curDay:nth-child(n + 6) {
        background-color: #ffbadb;
        border: 1px solid #ff0075;
        
        text-shadow:
        1px 1px #ff0075,
        1px -1px #ff0075,
        -1px 1px #ff0075,
        -1px -1px #ff0075,
        1px 0 #ff0075,
        -1px 0 #ff0075,
        0 1px #ff0075,
        0 -1px #ff0075;
      }
    </style>
  </head>
  <body>
    <div id="calendar">
      <div id="navigation_panel">
        <button class="month_minus minus">‹</button>
        <span id="background_month"><select id="calendar_month"></select></span>
        <button class="month_plus plus">›</button>
        <button class="year_minus minus">‹</button>
        <input type="text" size="4" id="calendar_year" />
        <button class="year_plus plus">›</button><br />
        <button id="presently">сегодня</button>
      </div>
      <table id="table">
        <thead>
          <tr>
            <td class="week-day">Пн.</td>
            <td class="week-day">Вт.</td>
            <td class="week-day">Ср.</td>
            <td class="week-day">Чт.</td>
            <td class="week-day">Пт.</td>
            <td class="week-day">Сб.</td>
            <td class="week-day">Вс.</td>
          </tr>
        </thead>
        <tbody></tbody>
      </table>
    </div>
    <script>
Date.prototype.reduce = function(callback, value) {
  var year = this.getFullYear();
  var month = this.getMonth();
  var step = new Date(year, month, 1);
  var last = new Date(year, month + 1, 0);
  step.setHours(24 * (0 - ((step.getDay() + 6) % 7)));
  last.setHours(24 * (6 - ((last.getDay() + 6) % 7)));
  for (var i = 0; step <= last; i++) {
    value = callback(value, new Date(+step), i, this);
    step.setHours(24);
  }
  return value;
};
var data = new Date();
var selectMonth = document.querySelector('#calendar_month');
var monthNames = [
  'Январь',
  'Февраль',
  'Март',
  'Апрель',
  'Май',
  'Июнь',
  'Июль',
  'Август',
  'Сентябрь',
  'Октябрь',
  'Ноябрь',
  'Декабрь',
];
monthNames.forEach(function(monthName, i) {
  selectMonth.options[i] = new Option(monthName, i);
});
selectMonth.addEventListener('change', function() {
  data.setMonth(this.value);
  createCalendar(data);
});
var minusMonth = document.querySelector('.month_minus');
minusMonth.addEventListener('click', function() {
  data.setMonth(data.getMonth() - 1);
  createCalendar(data);
});
var plusMonth = document.querySelector('.month_plus');
plusMonth.addEventListener('click', function() {
  data.setMonth(data.getMonth() + 1);
  createCalendar(data);
});
var minusYear = document.querySelector('.year_minus');
minusYear.addEventListener('click', function() {
  data.setYear(data.getFullYear() - 1);
  createCalendar(data);
});
var plusYear = document.querySelector('.year_plus');
plusYear.addEventListener('click', function() {
  data.setYear(data.getFullYear() + 1);
  createCalendar(data);
});
var inputYear = document.querySelector('#calendar_year');
inputYear.addEventListener('input', function() {
  if (/^\d{4}$/.test(this.value)) {
    data.setYear(this.value);
    createCalendar(data);
  }
});
var currentButton = document.querySelector('#presently');
currentButton.addEventListener('click', function() {
  data = new Date();
  createCalendar(data);
});

var daysTd = document.querySelectorAll('.week-day');
function createCalendar(data) {
  var now = new Date().setHours(0, 0, 0, 0);
  var year = data.getFullYear();
  inputYear.value = year;
  var month = data.getMonth();
  selectMonth.selectedIndex = month;
  currentButton.classList.remove('hide');
  var dayTd = document.querySelector('.week-day.curDay');
  if (dayTd) dayTd.classList.remove('curDay');

  var cls = ['prevMonth', 'curMonth', 'nextMonth'],
    indexCls = 0;
  var html = data.reduce(function(value, current, index, source) {
    var date = current.getDate();
    if (date == 1) indexCls++;
    var className = cls[indexCls];

    if (+now == +current && indexCls == 1) {
      className += ' curDay';
      currentButton.classList.add('hide');
      daysTd[index % 7].classList.add('curDay');
    }
    if (current.getDay() == 1) value += '<tr>';
    return value + '<td class="' + className + '">' + date;
  }, '');
  document.querySelector('#table tbody').innerHTML = html;
}
createCalendar(data);
var timer;
function refresh() {
  window.clearTimeout(timer);
  var finish = new Date().setHours(24, 0, 0, 0);
  finish -= data;
  timer = window.setTimeout(function() {
    createCalendar(data);
    refresh();
  }, finish);
}

refresh();
    </script>
  </body>
</html>
Ответить с цитированием