Javascript.RU

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

рони,
подскажи как решить вопрос на css, типа как тут, пыталась сама разобраться, но убила день и ничего не получается...
Ответить с цитированием
  #42 (permalink)  
Старый 01.10.2019, 00:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

Блондинка,
<!DOCTYPE html>
<head lang="ru">
<meta charset="utf-8">
<title></title>
<style>
td { border: 1px solid #000; height: 100px; margin: 1px; }
table tbody tr{
    display: flex;
}
table tbody tr td{
    border: 1px solid #a9a9a9; border-radius: 6px/4px;
    flex: 1;
}
table tbody tr td.week-day{
    flex:  none;
    width: 62px;
}

</style>
</head>
<body>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr>
<td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td></tr>
</table></div>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr>
<td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
</tr></table></div>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr><td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr></table>
</div>
<br>
если в строке (tr) 5 ячеек, то td id=week-day 62px, остальные ячейки 62px<br>
если в строке (tr) 5 ячеек, то td id=week-day 62px, остальные ячейки 48px<br>
если в строке (tr) 7 ячеек, то td id=week-day 62px, остальные ячейки 39px
</body>
</html>
Ответить с цитированием
  #43 (permalink)  
Старый 01.10.2019, 01:02
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

рони,
ширина ячеек работает, но сейчас не знаю как ячейки растянуть на всю высоту, с учетом появления/исчезновения кнопки 'сегодня', помоги если можешь, чтобы я опять всю ночь не 'трахалась' с этим календарём

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<title></title>
<style>
@import url('https://fonts.googleapis.com/css?family=Baumans&display=swap');
body { width: 760px; }
body, select, input { font: 14px serif; }
#calendar { width: 350px; height: 475px; display: inline-block; border: 1px solid #a9a9a9; border-radius: 6px/4px; padding: 5px; }
#navigation_panel { background-color: hsl(207, 100%, 92%); min-height: 34px; max-height: 78px; border: 1px solid #a9a9a9; border-radius: 6px/4px; padding: 10px; margin-bottom: 6px; 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(210,100%,50%); font: 14px serif; border: 1px solid hsl(210,100%,50%); }
#calendar_month { background-color: transparent; color: hsl(210,100%,50%); font: 14px serif; border: 1px solid hsl(210,100%,50%); }
#navigation_panel button { height: 34px; 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; }
#presently { width: 288px; margin-top: 10px; border-radius: 12px/10px;}
#calendar_month { width: px; display: inline-block; }
#calendar_year { width: px; display: inline-block; }
select { height: 34px; }
input { height: 30px; border: 1px solid #a9a9a9; display: inline-block; text-align: center; }
#table { font-family: 'Baumans', cursive; width: 100%; height: 413px; padding: 2px; }
#table, td { border: 1px solid #a9a9a9; border-radius: 6px/4px; }
td { margin: 1px; text-align: center; }
#table tbody td.prevMonth { background-color: hsl(210,100%,95%); color: hsl(210,100%,80%); border: 1px solid hsl(0,0%,80%); }
#table tbody tr:nth-child(n + 6) td.prevMonth { background-color: hsl(348,100%,95%); color: hsl(348,100%,80%); border: 1px solid hsl(0,0%,80%); }
.curMonth { background-color: ; }
#table tbody td.nextMonth { background-color: hsl(210,100%,95%); color: hsl(210,100%,80%); border: 1px solid hsl(0,0%,80%); }
#table tbody tr:nth-child(n + 6) td.nextMonth { background-color: hsl(348,100%,95%); color: hsl(348,100%,80%); border: 1px solid hsl(0,0%,80%); }
.curDay { background-color: #fffacd; }
#presently.hide { display: none; }
#table tbody tr td.week-day { background-color: hsl(210,100%,85%); color: hsl(210,100%,50%); border: 1px solid hsl(0,0%,60%); width: 62px; } /* день недели */
#table tbody tr:nth-child(n + 6) td.week-day { background-color: hsl(348,100%,85%); color: hsl(348,100%,50%); border: 1px solid hsl(0,0%,60%); } /* день недели выходной*/
#table tbody tr td.week-day.curDay { border: 1px solid hsl(210,100%,50%); background-color: hsl(210,100%,75%); color: hsl(210,100%,95%); font-weight: bold; text-shadow: 1px 1px hsl(210,100%,50%), -1px 1px hsl(210,100%,50%), 1px -1px hsl(210,100%,50%), -1px -1px hsl(210,100%,50%), 1px 0 hsl(210,100%,50%), 0 1px hsl(210,100%,50%), -1px 0 hsl(210,100%,50%), 0 -1px hsl(210,100%,50%); } /* сегодн день недели */
#table tbody tr:nth-child(n + 6) td.week-day.curDay { border: 1px solid hsl(348,100%,50%); background-color: hsl(348,100%,75%); color: hsl(348,100%,95%); font-weight: bold; text-shadow: 1px 1px hsl(348,100%,50%), 1px -1px hsl(348,100%,50%), -1px 1px hsl(348,100%,50%), -1px -1px hsl(348,100%,50%), 1px 0 hsl(348,100%,50%), -1px 0 hsl(348,100%,50%), 0 1px hsl(348,100%,50%), 0 -1px hsl(348,100%,50%); } /* сегодн день недели выходной */
#table tbody td { background-color: hsl(210,100%,90%); color: hsl(210,100%,50%); } /* будние дни текущего месяца */
#table tbody tr:nth-child(n + 6) td{ background-color: hsl(348,100%,90%); color: hsl(348,100%,50%); } /* выходные дни текущего месяца */
#table tbody tr td.curMonth.curDay { background-color: hsl(210,100%,80%); border: 1px solid hsl(210, 100%, 50%); font-weight: bold; color: hsl(210,100%,100%); text-shadow: 1px 1px hsl(210,100%,50%), -1px 1px hsl(210,100%,50%), 1px -1px hsl(210,100%,50%), -1px -1px hsl(210,100%,50%), 1px 0 hsl(210,100%,50%), 0 1px hsl(210,100%,50%), -1px 0 hsl(210,100%,50%), 0 -1px hsl(210,100%,50%); }
#table tbody tr:nth-child(n + 6) td.curMonth.curDay: { background-color: hsl(348,100%,80%); border: 1px solid hsl(348,100%,50%); color: hsl(348,100%,100%); text-shadow: 1px 1px hsl(348,100%,50%), 1px -1px hsl(348,100%,50%), -1px 1px hsl(348,100%,50%), -1px -1px hsl(348,100%,50%), 1px 0 hsl(348,100%,50%), -1px 0 hsl(348,100%,50%), 0 1px hsl(348,100%,50%), 0 -1px hsl(348,100%,50%); }
table tbody tr { display: flex; }
table tbody tr td { border: 1px solid #a9a9a9; border-radius: 6px/4px; flex: 1; }
table tbody tr td.week-day { flex:  none; width: 62px; }
</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">
<colgroup width="58">
<colgroup span="6" width="2*">
<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);
});
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 indexcurDay;
 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');
 indexcurDay = index % 7;
 }
 value[index % 7] += '<td class="' + className + '">' + date;
 return value
 }, ['<tr><td class="week-day">Пн.',
             '<tr><td class="week-day">Вт.',
             '<tr><td class="week-day">Ср.',
             '<tr><td class="week-day">Чт.',
             '<tr><td class="week-day">Пт.',
             '<tr><td class="week-day">Сб.',
             '<tr><td class="week-day">Вс.']);
 document.querySelector('#table tbody').innerHTML = html.join('');
 var daysTd = document.querySelectorAll('.week-day');
 if(indexcurDay !== void 0) daysTd[indexcurDay].classList.add('curDay');
}
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>
Ответить с цитированием
  #44 (permalink)  
Старый 01.10.2019, 03:39
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Сообщение от рони Посмотреть сообщение
Блондинка,
<!DOCTYPE html>
<head lang="ru">
<meta charset="utf-8">
<title></title>
<style>
td { border: 1px solid #000; margin: 1px; }
table tbody tr{
    display: flex;
    height: 14.3%;
}
table tbody tr td{
    border: 1px solid #a9a9a9; border-radius: 6px/4px;
    flex: 1;
}
table tbody tr td.week-day{
    flex:  none;
    width: 62px;
}

</style>
</head>
<body>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr>
<td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td></tr>
</table></div>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr>
<td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
</tr></table></div>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr><td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr></table>
</div>
<br>
если в строке (tr) 5 ячеек, то td id=week-day 62px, остальные ячейки 62px<br>
если в строке (tr) 5 ячеек, то td id=week-day 62px, остальные ячейки 48px<br>
если в строке (tr) 7 ячеек, то td id=week-day 62px, остальные ячейки 39px
</body>
</html>
установила высоту tr 14.3%, работает вроде, но не могу выровнять текст ячеек по вертикали
Ответить с цитированием
  #45 (permalink)  
Старый 01.10.2019, 05:17
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

laimas,
может лучше добавить что то типа
let tbl = document.querySelector('table');
console.log(tbl.rows); //массив строк таблицы
console.log(tbl.rows[0].cells.length);//кол-во ячеек в первой строке
console.log(tbl.rows[0].cells[0].clientWidth);//ширина первой ячейки первой строки
//назначаем второй ячейке ширину первой
tbl.rows[0].cells[1].style.width = tbl.rows[0].cells[0].clientWidth + 'px'; 
//если ячеек много, то в цикле
let widthCell = tbl.rows[0].cells[0].clientWidth + 'px';
for(let i = 1; i < tbl.rows[0].cells.length; i++){
    tbl.rows[0].cells[i].style.width = widthCell;
}
Ответить с цитированием
  #46 (permalink)  
Старый 01.10.2019, 06:27
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Блондинка,
я не понимаю чего вы пытаетесь сотворить и почему куча таблиц вместо одной, но если нужно установить размеры ячеек одной таблицы по колонкам, то tbl.rows[0].cells.length, а далее согласно своим условиям для всех ее строк.

Но зачем это все для таблицы я вообще не понимаю. Размер ячейки таблицы будет зависеть от ее содержания и если указать первой ячейке размер фиксированный, и содержимое ячеек помещается в них свободно, то остальные ячейки сами примут равные размеры в процентном соотношении от ширины таблицы минус размер первой ячейки. Другое дело если нужно жестко указать размеры ячеек таблицы, в которые разместить содержимое. Или же используется не таблица, а иные элементы, вот тогда flex, grid. Выше у вас flex и чем он вас не устраивает не знаю, ведь размеры будут рассчитываться все равно от родителя. Коли вы точно хотите подогнать их, то учитывайте размеры всех элементов и их стилей. Например, посредством скрипта, для div и сетки:

<style>
.wrapper {
    width: 314px;
    margin: 1px;
    display: grid;
    grid-gap: 1px;
}

.wrapper > div {
    border: 1px solid #ddd;
    padding: 4px;
}

table {
    border-collapse: separate;
    width: 315px;
}

td {
    border: 1px solid #ddd;
    padding: 4px;
}

td:first-child {
    width: 52px;
}
</style>

<div class="wrapper">
   <div>1</div>
   <div>2</div>
   <div>3</div>
   <div>4</div>
   <div>5</div>
</div>

<div class="wrapper">
   <div>1</div>
   <div>2</div>
   <div>3</div>
   <div>4</div>
   <div>5</div>
   <div>6</div>
</div>

<div class="wrapper">
   <div>1</div>
   <div>2</div>
   <div>3</div>
   <div>4</div>
   <div>5</div>
   <div>6</div>
   <div>7</div>
</div>

<table>
<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr>
</table>

<script>
document.querySelectorAll('.wrapper').forEach((a)=> {
    a.style.gridTemplateColumns = '62px repeat('+(a.children.length-1)+',1fr)';
})
</script>


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

Последний раз редактировалось laimas, 01.10.2019 в 07:55.
Ответить с цитированием
  #47 (permalink)  
Старый 03.10.2019, 09:44
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

laimas,
колонка где числа 1-9 уже чем колонка с числами 10-19, а колонка с числами 20-31 самая широкой получается, а надо сделать эти колонки равной ширины, независимо от количества недель в месяце, вот и вся проблема...
Ответить с цитированием
  #48 (permalink)  
Старый 03.10.2019, 09:48
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Сообщение от рони Посмотреть сообщение
Блондинка,
<!DOCTYPE html>
<head lang="ru">
<meta charset="utf-8">
<title></title>
<style>
td { border: 1px solid #000; height: 100px; margin: 1px; }
table tbody tr{
    display: flex;
}
table tbody tr td{
    border: 1px solid #a9a9a9; border-radius: 6px/4px;
    flex: 1;
}
table tbody tr td.week-day{
    flex:  none;
    width: 62px;
}

</style>
</head>
<body>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr>
<td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td></tr>
</table></div>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr>
<td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
</tr></table></div>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr><td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr></table>
</div>
<br>
если в строке (tr) 5 ячеек, то td id=week-day 62px, остальные ячейки 62px<br>
если в строке (tr) 5 ячеек, то td id=week-day 62px, остальные ячейки 48px<br>
если в строке (tr) 7 ячеек, то td id=week-day 62px, остальные ячейки 39px
</body>
</html>
насколько я поняла, выровнять текст в ячейках по вертикали не получится?
Ответить с цитированием
  #49 (permalink)  
Старый 03.10.2019, 09:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,129

Сообщение от Блондинка
текст в ячейках по вертикали
строка16.
<!DOCTYPE html>
<html>
<head lang="ru">
<meta charset="utf-8">
<title></title>
<style>
table tbody tr{
    display: flex;
}
table tbody tr td{
    border: 1px solid #000;
    height: 100px;
    margin: 1px;
    border-radius: 6px/4px;
    flex: 1;
    line-height: 100px;
    text-align: center;
}
table tbody tr td.week-day{
    flex:  none;
    width: 62px;
}

</style>
</head>
<body>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr>
<td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td></tr>
</table></div>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr>
<td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
</tr></table></div>
<div style="border: 1px solid #000; width: 350px; padding: 5px;"><table style="border: 1px solid #00f; width: 100%; padding: 2px;"><tr><td class="week-day">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr></table>
</div>
<br>
если в строке (tr) 5 ячеек, то td id=week-day 62px, остальные ячейки 62px<br>
если в строке (tr) 6 ячеек, то td id=week-day 62px, остальные ячейки 48px<br>
если в строке (tr) 7 ячеек, то td id=week-day 62px, остальные ячейки 39px
</body>
</html>
Ответить с цитированием
  #50 (permalink)  
Старый 03.10.2019, 10:03
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

рони,
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработать скрипт добавив функцию Блондинка Общие вопросы Javascript 5 28.08.2019 05:43
Не получается доработать скрипт калькулятора последнего дня отпуска insider999 Общие вопросы Javascript 15 22.07.2016 15:35
Помогите доработать скрипт Kalashmet Ваши сайты и скрипты 2 02.09.2013 19:50
Помогите исправить скрипт fAmOus Элементы интерфейса 4 31.08.2012 01:02
Помогите Исправить элементарный скрипт! с location.searсh pp-vp Events/DOM/Window 5 12.08.2010 14:40