#css #angularjs #chart.js
#css #angularjs #chart.js
Вопрос:
labels = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];
chartData = [
{
label: 'Doctors',
data: [10, 20, 30, 40, 50, 40, 30, 20, 10, 20, 30, 40],
backgroundColor: 'rgb(81, 193, 190)',
},
{
label: 'Clinics',
data: [20, 30, 40, 50, 40, 30, 20, 10, 20, 30, 40, 50],
backgroundColor: 'rgb(46, 135, 203)',
},
{
label: 'Hospitals',
data: [30, 40, 50, 40, 30, 20, 10, 20, 30, 40, 50, 40],
backgroundColor: 'rgb(209, 174, 200)',
},
{
label: 'Pathology/Diagnosis',
data: [40, 50, 40, 30, 20, 10, 20, 30, 40, 50, 40, 30],
backgroundColor: 'rgb(103, 48, 121)',
}
];
ngOnInit() {
this.showChart();
}
showChart() {
//var ctx = document.getElementById('barCanvas');
const canvas = <HTMLCanvasElement> document.getElementById('barCanvas');
const ctx = canvas.getContext('2d');
this.barChart = new Chart(ctx, {
type: 'bar',
data: {
labels: this.labels,
datasets: this.chartData
},
options: {
responsive: true,
//maintainAspectRatio: false
}
});
this.barChart.reDraw();
}
.flex-container {
display: flex;
flex-direction: column;
background-color: #ff80bf;
flex-wrap: wrap;
}
.child-div {
background-color: #6600cc;
width: 100px;
margin: 10px;
text-align: center;
padding-top: 20px;
padding-bottom: 20px;
font-size: 30px;
}
.chart-container {
position: relative !important;
width: 100%;
height: 100%;
// display: block !important;
canvas {
width: 100% !important;
max-width: 800px;
height: auto !important;
}
}
.row {
display: block;
// border: 1px solid red;
}
.col-12{
display: inline-block;
width: 100%;
}
.col-9{
display: inline-block;
width: 75%;
}
.col-3{
display: inline-block;
width: 25%;
}
.p1{
padding: 1em 1em;
}
<div class='row'>
<div class='col-9'>
<div class="chart-container">
<canvas id="barCanvas"></canvas>
</div>
</div>
<div class='col-3 p1'>
<div>
<div class="flex-container">
<div class="title">Dummy Heading</div>
<div class="child-div">1</div>
<div class="child-div">2</div>
<div class="child-div">3</div>
</div>
</div>
</div>
</div>
Я пытаюсь добавить диаграмму с помощью chart.js и некоторые связанные данные в 2 столбца строки. Я реализовал гистограмму программно, как указано в их официальных документах здесь. Я создал класс ‘row’ и 2 столбца шириной 75% и 25%. Я хочу заполнить 75% столбца диаграммой, а остальные 25% некоторыми данными. Но div (как показано на 1-м изображении розовым цветом с пронумерованным полем 1,2,3) отображается на той же высоте, что и диаграмма. Вместо этого он находится под диаграммой, как показано на 2-м изображении. Я нашел проблему для этого. Согласно официальным документам, родительский div холста диаграммы должен иметь позицию как относительную, что я и сделал. Но динамический div с именем класса chartjs-size-monitor
добавляется в качестве родительского div canvas с помощью chart.js библиотека. Этот div имеет позицию стиля как абсолютную, что приводит к перемещению моего правого раздела данных вниз. Если я сниму флажок с этого стиля позиции, то div переместится вверх, как показано на рисунке 1. Кто-нибудь может помочь мне с этой проблемой? Спасибо.
Комментарии:
1. Можете ли вы поделиться своим HTML-кодом, чтобы четко видеть, что вы делаете? Есть ли у вашего родительского div класс col-12 или row? Если нет, вы можете попробовать поместить свой родительский элемент в строку
2. Обновил мой запрос с помощью html, css и ts.
Ответ №1:
- кажется, что розовая область больше, чем любая из этих ячеек внутри нее. Возможно, вам следует изменить col-9 col-3 на col-10 col-2
- вы можете создать класс css, точно такой же, как тот, который вы проверяете в консоли разработчиков Google, и добавить в него только position:relative !important
- вы можете уменьшить поля в дочернем элементе и сделать относительную ширину с процентами вместо пикселей
Это первые решения, которые я могу предложить. Но я не интерфейсный разработчик! Я думаю, что будут гораздо лучшие решения.
Комментарии:
1. что касается 2-го пункта, класс div динамически генерируется chart.js библиотека как класс-оболочка для canvas, и этот класс div имеет абсолютную позицию. Не удается удалить этот стиль из этого динамического div
2. Хорошо, я вижу это. Я пытаюсь сказать следующее: если у вас есть свой собственный файл css в проекте, добавьте в него класс, такой как .chartjs-size-monitor, .chartjs-size-monitor-expand, .chartjs-size-monitor-shrink { position: relative !important } или дайте вашему родительскому div идентификатор и создайте класс, который будет применяться только к этому идентификатору. Я не знаю, работает ли это, но вы можете быстро попробовать. Может быть, ваш динамический CSS будет применяться позже и игнорировать его, я не знаю! Просто пытаюсь помочь 😉
3. Я уже пытался создать класс CSS с именем chartjs-size-monitor и добавить позицию: относительная !важно. Это не сработало. У динамического div все еще была позиция: абсолютная
4. Почему бы вам не попробовать столбчатую диаграмму, такую как chartjs.org/samples/latest/charts/bar/stacked . html затем вы можете уменьшить ширину вашей диаграммы. И я думаю, что это будет намного понятнее, чем 3-4 столбца близко друг к другу за каждый месяц?