Как создать внутренний скос таблицы в HTML / CSS?

Я разрабатываю этот макет форума, в котором я придумываю красивый дизайн для рисования таблиц форума, однако я не уверен, что это можно легко сделать в HTML / CSS.

Прежде чем я продолжу рисовать весь макет, мне нужно знать, достижимо ли это и как, иначе мне придется отказаться от этого эффекта и переосмыслить вещи ...

Например, у меня сейчас есть такой дизайн:

Как создать внутренний скос таблицы в HTML / CSS?

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

Как это может быть сделано?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
9 451
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Для макета стандартный HTML-тег table делает все это, и его также можно использовать.

Чтобы получить желаемый эффект границы, взгляните на различные параметры границы CSS здесь: http://www.w3schools.com/css/css_reference.asp#border

Ответ принят как подходящий

CSS может сделать что-то подобное очень легко, при условии, что вам не нужно масштабировать градиент по вертикали при увеличении размера таблицы. Ниже приведен пример, который вы можете использовать, чтобы получить эффект, изображенный выше.

Обновлено: Я почему-то не видел скосов (думаю, я виноват в том, что слишком поздно ночью и мое зрение было слишком размытым). Мне пришлось увеличить масштаб, чтобы действительно их увидеть, но я обновил свое решение, чтобы оно соответствовало. Вам нужно добавить дополнительный тег «div», чтобы это решение работало, но это возможно, хотя я не думаю, что это работает в той степени, в какой показывает ваше изображение. Впрочем, работать он будет довольно прилично. Ниже я включил некоторый сценарий jQuery, который устранит необходимость в дополнительном теге <div />.

Для разметки вы должны использовать что-то вроде этого:

<table cellspacing = "0">
    <tr><td class = "side"><div class = "bevel">lorem</div></td><td class = "side"><div class = "bevel">ipsum</div></td><td class = "main"><div class = "bevel">dolor sit amet, consectetur</div></td></tr>
    <tr><td class = "side"><div class = "bevel">lorem</div></td><td class = "side"><div class = "bevel">ipsum</div></td><td class = "main"><div class = "bevel">dolor sit amet, consectetur</div></td></tr>
    <tr><td class = "side"><div class = "bevel">lorem</div></td><td class = "side"><div class = "bevel">ipsum</div></td><td class = "main"><div class = "bevel">dolor sit amet, consectetur</div></td></tr>
</table>

И в своей таблице стилей вы должны использовать что-то вроде этого:

td {
    border: 1px solid #777;
}

.bevel {
    background: url('img.png') top left repeat-x;
    margin: -1px;
    border-top: 1px solid #fbfbfb;
    border-left: 1px solid #fbfbfb;
    border-right: 1px solid #bfbfbf;
    border-bottom: 1px solid #e8e8e8;
}

.side {
    width: 30px;
}

.main {
    width: 170px;
}

table {
    border-collapse: collapse;
    border-spacing: 0;
}

Для изображения сделайте его шириной 1 пиксель. Он будет повторяться, чтобы соответствовать ширине ячейки. Если вы хотите, чтобы градиент растягивался по вертикали, вам не повезло. CSS не может масштабировать изображения, а только повторять их. Чтобы сделать фоновое изображение с вертикальным масштабом, вам понадобится либо кошмарная разметка, либо какой-то JavaScript, чтобы заставить его работать.

Чтобы избавиться от супа тегов <div />, вы можете использовать jQuery для вставки тегов, чтобы не загромождать исходный текст. Все, что вам нужно сделать, это добавить вместо этого класс outerBevel в теги <td />, а затем вызвать этот скрипт jQuery (если вы используете jQuery. Я уверен, что другие API JavaScript могут делать аналогичные вещи):

$('.outerBevel').wrapInner('<div class = "bevel"></div>');

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

rfgamaral 11.01.2009 08:30

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

Dan Herbert 11.01.2009 08:59

Вероятно, вы захотите сделать что-то вроде этого:

table#mytable td {
  border-style: inset;
  border-width: 3px; /* or whatever width you want */
}

Это не позволяет мне указать оба внутренних цвета для вставки. Они рассчитываются по цвету границы, что у меня не работает :(

rfgamaral 11.01.2009 08:31

Другие вопросы по теме