Исправлены масштабы таблицы правого столбца для адаптивного дизайна.

У меня есть таблица с правым фиксированным столбцом, а слева есть 8 столбцов с x-прокруткой. Я использовал код, подобный этому

как Я создаю таблицу HTML с фиксированным/закрепленным левым столбцом и прокручиваемым телом?

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

https://jsfiddle.net/TBankston/5L7jkbfq/

CSS

.page-header {
  padding-bottom: 9px;
  margin: 40px 0 20px;
  border-bottom: 1px solid #eeeeee;
}

  .table-responsive {
    width: inherit;
    margin-bottom: 15px;
    overflow-x:  scroll;
    overflow-y: hidden;
    border: 0px solid #dddddd;
    margin-right: 8%;
    max-width: 85%;
  }

.crud-links{
    position: absolute;
    width: 10em;
    right: 40px;
    background-color: #ffffff;
    }

HTML

<div class="page-header">
    <h3>Charity</h3>
</div>
<div class="table-responsive">
    <table cellpadding="9">
        <thead>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.ID)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.EventName)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Organization)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.District)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Hours)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Donation)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.TotalValue)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.ModifiedDate)
                </th>
                <th class="crud-links"> Options</th>
            </tr>
        </thead>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.ID)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.EventName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Organization)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.District)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Hours)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Donation)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.TotalValue)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ModifiedDate)
                </td>
                <td class="crud-links">
                    @Html.ActionLink("Details", "Details", new { id = item.ID })
                    @if (ViewBag.current_User.CanEdit())
                    {
                        <span>|</span>
                        @Html.ActionLink("Edit", "Edit", new { id = item.ID })
                        <span>|</span>
                        @Html.ActionLink("Delete", "Delete", new { id = item.ID })
                    }
                </td>
            </tr>
        }
    </table>
    <table>
        <tr>

        </tr>
    </table>
</div>

person TBankston    schedule 15.09.2015    source источник


Ответы (2)


Я обновил вашу скрипку возможным ответом:

.page-header {
  padding-bottom: 9px;
  margin: 40px 0 20px;
  border-bottom: 1px solid #eeeeee;
}

@media (max-width: 1300px) {
    .table-hover th, .table-hover td {
        padding: 9px;
    }
    .table-responsive {
        width: inherit;
        max-width: 80%;
        margin-bottom: 15px;
        overflow-x:  scroll;
        overflow-y: hidden;
        border: 0;
        border-right:200px solid transparent;
    }

    .crud-links{
        position: absolute;
        overflow:hidden;
        width: 191px;
        right: 0;
        background-color: #ffffff;
    }
}

https://jsfiddle.net/5L7jkbfq/12/

Основная проблема заключается в том, что вы смешивали фиксированные размеры в пикселях с относительными размерами в процентах в самой таблице.

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

person saeraphin    schedule 15.09.2015

Ваша таблица не наследует максимальную ширину.

.table-responsive table {
    table-layout:fixed;
}

Я попытался установить исправленную раскладку таблицы из этого ответа: width">Почему моя таблица HTML не учитывает ширину моего столбца CSS?

Это не сработало, поэтому я изменил максимальную ширину с помощью JQuery при изменении размера окна из этого ответа:

JQuery для установки динамической максимальной ширины

https://jsfiddle.net/wqfhuknu/

Однако мне пришлось изменить ширину до 80%, чтобы вообще не было перекрытий.

person forgetso    schedule 15.09.2015