Intereting Posts
Как передать данные из файла js узла в html-файл как заменить img url в массиве Высота фантома при указании ширины LI с использованием jQuery Несколько jqGrid на одной странице, как определить, какая grid включена, когда нажимаете кнопку «добавить» в навигаторе? Как очистить текстовую область с помощью кнопки в html с помощью javascript? как исправить положение маски в snapsvg.js? Выйти из HTML на PHP или использовать эхо? Что лучше? Карта HTML для JSON Как сделать прокручиваемую DIV с полосой прокрутки за пределами div, как на facebook? Встроенный регулятор громкости Как сортировать значение внутри ребенка Firebase для остальных? Максимальная длина атрибута заголовка как установить размытие экрана на полную страницу и на странице клика перейти в TOP Ошибка при встраивании изображения в почтовый ящик с помощью Yii2 Большая таблица динамического размера html с фиксированной строкой прокрутки и фиксированной колонкой прокрутки

Как центрировать выровненные по правому краю числа в столбце таблицы с помощью CSS?

На рисунке ниже показано, что я пытаюсь выполнить:

введите описание изображения здесь

UPD. Как вы видите, мне нужно, чтобы самое длинное число было сосредоточено в его ячейке, а все остальные числа были правильно выровнены с правой границей самого длинного номера.

UPD 2. Числа динамические (изначально неизвестные).

Кажется, нет никакого прямого метода CSS. Но вы можете рассмотреть подход, предложенный @CMKanode в комментарии. Вам нужно будет предварительно обработать числа в столбце и вычислить самый большой из них (для этого требуется зависящий от языка синтаксический анализ, так как вы используете разделитель тысяч), а затем вы оставите на клавиатуре числа с одинаковым количеством символов, используя U +2007 РИСУНОК ПРОСТРАНСТВА как пространство, которое имеет ту же ширину, что и цифры. И, конечно, столбец будет объявлен как центрированный.

Таким образом, в примере «5» будет дополнено         5 (при условии, что вы используете обычное пространство как тысячи разделитель, U + 2009 THIN SPACE может быть лучше, но проблема с шрифтом.

Подход будет означать, что вам нужно использовать шрифт, где цифры имеют одинаковую ширину (большинство шрифтов на компьютерах) и содержит U + 2007.

Если разделитель тысяч был запятой или периодом, например, вам нужно будет использовать U + 2008 PUNCTUATION SPACE вместо него.

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

Ниже не идеальное решение, так как размер чисел изначально неизвестен, но он немного ближе без лишних тегов.

CSS:

 .numSpan { display: inline-block; width: 100px; text-align: right; } td { text-align: center; } 

HTML:

  5  

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

Пример кода:

HTML:

 
Some Title for Numbers in a Table
5 000 000
5 000
5
5 000 000

CSS:

 .container { width: 400px; border: 1px solid #999; } .title { font-weight: bold; text-align: center; } .container table { margin: 0px auto; } .container table td { text-align: right; }​ 

Добавьте div в td:

  

Text Aligned Right

Затем добавьте отступы / поля для точной настройки размещения div.

Если я правильно понял, вам нужно что-то вроде:

  .right-td { align:right; } 

с

 5000000 

Я считаю, что фактическое значение td в этой table (если это действительно таблица) будет иметь фиксированную ширину и множество отступов, чтобы создать иллюзию того, что он выравнивается по центру.

Вы можете попробовать грубый стиль, например:

 /* For demonstration purposes, a fixed width `th`. */ th.headrowrnum { width: 200px; } td.rightalignnum { width: 100px; padding: 0 50px; text-align: right; } 

HTML:

 > 
Col 1 Col 2
X 5
Y 500

Чтобы достичь этого выравнивания, вы должны сделать что-то вроде этого:

HTML:

  
12345

CSS:

 .my_td { width: 200px; align: center; } .content { width: 100px; margin-left: auto; margin-right: auto; text-align: right; } 

Вам просто нужно настроить ширину, чтобы соответствовать вашим требованиям, например, максимальные цифры в номере.

Другое возможное решение – использовать медиа-запросы. В нашем случае мы имеем примерно одинаковое количество столбцов в каждой таблице. Итак, просто измените правильное заполнение на основе размера экрана, чтобы дать желаемое выравнивание вправо / в центре:

 @media (min-width: 769px) { td { &.financial { padding-right: 5px; } } } @media (min-width: 1100px) { td { &.financial { padding-right: 20px; } } } @media (min-width: 1400px) { td { &.financial { padding-right: 30px; } } } 

Вы можете приблизиться к этому с помощью CSS. Создайте class:

 td.rt-ctr { text-align:right; padding-right:33%; } 

Затем вызовите class в диаграмме:

 
Item 1 100.25
Item 2 99.75

В зависимости от ширины столбца, диаграммы и самого длинного ввода данных вам может потребоваться настроить процент в CSS. Этот подход не идеален, но он отзывчивый и является чистым методом CSS.

Хорошо, что я столкнулся с этой проблемой вчера, прошел все решения и разработал собственное решение, которое не модифицирует DOM значительным образом, но использует JS, но я перечислю недостатки некоторых из вышеперечисленных решений

  1. Заполнение дополнительных символов выполняется, если ваш шрифт monoширинный
  2. Создание фиксированной прокладки или фиксированной ширины может повлиять на реагирующее поведение
  3. Добавление второй таблицы внутри столбца является серьезной манипуляцией с DOM, если у вас 1000 строк и 30 столбцов, вы начнете видеть эффекты производительности с таким тяжелым деревом

HTML (с использованием Bootstrap 4.1.1)

 
# Symbol Price Volume Market Cap Circulating Supply Total Supply

CSS

 .numeric{ text-align: right; } #datatable th, #datatable td{ text-align: center; } .centerspan{ display: inline-block; text-align: right; background: yellow; } .root-rank, .root-price, .root-market_cap, .root-max_supply{ background: #efefef; } 

JavaScript

 var overview_data = [ { "rank": 1, "symbol": "BTC", "price": 8004.8, "volume_24h": 5864600000000.0, "market_cap": 137422500058.0, "circulating_supply": 17167512.0, "max_supply": 21000000.0}, { "rank": 2, "symbol": "ETH", "price": 471.305, "volume_24h": 1930260000.0, "market_cap": 47547607782.0, "circulating_supply": 100885006.0, "max_supply": null}, { "rank": 3, "symbol": "XRP", "price": 0.454852, "volume_24h": 234947000.0, "market_cap": 17882817260.0, "circulating_supply": 39315683476.0, "max_supply": 100000000000.0}, { "rank": 4, "symbol": "Bitcoin Cash", "price": 845.04, "volume_24h": 730498000.0, "market_cap": 14580563109.0, "circulating_supply": 17254288.0, "max_supply": 21000000.0}, { "rank": 5, "symbol": "EOS", "price": 8.14097, "volume_24h": 691908000.0, "market_cap": 7295526131.0, "circulating_supply": 896149492.0, "max_supply": 1000000000.0} ] var table = document.getElementById("datatable") var thead = table.tHead var tbody = table.tBodies[0] var colClasses = [] for(var i = 0, len= overview_data.length; i < len; i++){ var tr = document.createElement("tr") for(var j in overview_data[i]){ var td = document.createElement("td") td.classList.add("root-" + j) var span = document.createElement("span") span.classList.add("centerspan") span.classList.add('col-' + j) //Add this column classes to keep track of one class per column if (!colClasses.includes("col-" + j)){ colClasses.push('col-' + j) } var text = document.createTextNode(overview_data[i][j] || -1) if(!isNaN(overview_data[i][j])){ td.classList.add("numeric") } span.appendChild(text) td.appendChild(span) tr.appendChild(td) } tbody.appendChild(tr) } //This is the main part for(var i = 0; i < colClasses.length; i++){ var items = document.querySelectorAll("." + colClasses[i]) var max = 0 //Loop through all the items in the col class for(var j = 0; j < items.length; j++){ //Calculate max width of span containing text inside column if(items[j].offsetWidth > max){ max = items[j].offsetWidth } } //Set width of each span to the max width for(var j = 0; j < items.length; j++){ console.log(max) items[j].style.width = max + "px" } } 

снимок введите описание изображения здесь

В CSS сделайте это для выравнивания по центру td

 td {text-align:center;}