CSS: автоматическое изменение размера элемента сетки

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

<!DOCTYPE html>
<html>
    <head>
        <style>
            .grid-container {
                display: grid;
                grid-template-columns: auto; /* auto auto; */
                background-color: #2196f3;
                padding: 10px;
            }
            .grid-item {
                background-color: rgba(255, 255, 255, 0.8);
                border: 1px solid rgba(0, 0, 0, 0.8);
                padding: 20px;
                font-size: 30px;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <h1>Grid Elements</h1>

        <p>
            A Grid Layout must have a parent element with the
            <em>display</em> property set to <em>grid</em> or
            <em>inline-grid</em>.
        </p>

        <p>
            Direct child element(s) of the grid container automatically becomes
            grid items.
        </p>

        <div class = "grid-container">
            <div class = "grid-item">
                <img
                    src = "https://evotec.xyz/wp-content/uploads/2015/05/Evotec-Logo-190x41.png"
                    alt = "DefaultAlternativeText"
                    width = "DefaultWidth"
                    height = "DefaultHeight"
                />
            </div>

            <div class = "grid-item">
                <img
                    src = "https://evotec.xyz/wp-content/uploads/2015/05/Evotec-Logo-600x190.png"
                    alt = "DefaultAlternativeText"
                    width = "DefaultWidth"
                    height = "DefaultHeight"
                />
            </div>
            <div class = "grid-item">3</div>
            <div class = "grid-item">4</div>
            <div class = "grid-item">5</div>
            <div class = "grid-item">6</div>
            <div class = "grid-item">7</div>
            <div class = "grid-item">8</div>
            <div class = "grid-item">9</div>
        </div>
    </body>
</html>

Использование трех новых настроек в некоторой степени исправило это для меня:

<!DOCTYPE html>
<html>
    <head>
        <style>
            .grid-container {
                display: grid;
                grid-template-columns: auto; /* auto auto; */
                background-color: #2196f3;
                padding: 10px;
            }
            .grid-item {
                background-color: rgba(255, 255, 255, 0.8);
                border: 1px solid rgba(0, 0, 0, 0.8);
                padding: 20px;
                font-size: 30px;
                text-align: center;

                /* Addeed */
                overflow: hidden; /* NEW */
                min-height: 0; /* NEW */
                min-width: 0; /* NEW; needed for Firefox */
            }
        </style>
    </head>
    <body>
        <h1>Grid Elements</h1>

        <p>
            A Grid Layout must have a parent element with the
            <em>display</em> property set to <em>grid</em> or
            <em>inline-grid</em>.
        </p>

        <p>
            Direct child element(s) of the grid container automatically becomes
            grid items.
        </p>

        <div class = "grid-container">
            <div class = "grid-item">
                <img
                    src = "https://evotec.xyz/wp-content/uploads/2015/05/Evotec-Logo-190x41.png"
                    alt = "DefaultAlternativeText"
                    width = "DefaultWidth"
                    height = "DefaultHeight"
                />
            </div>

            <div class = "grid-item">
                <img
                    src = "https://evotec.xyz/wp-content/uploads/2015/05/Evotec-Logo-600x190.png"
                    alt = "DefaultAlternativeText"
                    width = "DefaultWidth"
                    height = "DefaultHeight"
                />
            </div>
            <div class = "grid-item">3</div>
            <div class = "grid-item">4</div>
            <div class = "grid-item">5</div>
            <div class = "grid-item">6</div>
            <div class = "grid-item">7</div>
            <div class = "grid-item">8</div>
            <div class = "grid-item">9</div>
        </div>
    </body>
</html>

Теперь нет переполнения, первое изображение выравнивается по центру, второе изображение обрезается. Что отчасти нормально.

Мои вопросы:

  1. Как можно было бы изменить размер изображения по размеру?
  2. Будет ли это решение работать с другими типами данных в этой сетке? Я планирую использовать http://datatables.net и помещать таблицы в эту сетку. Я хочу убедиться, что таблица читабельна и не переполняется.
  3. Есть ли способ предотвратить изменение размера элемента сетки за пределы определенного? Например, если datatable должен иметь определенный размер, и пользователь открывает его на меньшем размере, я бы предпочел, чтобы скроллер был внизу / вверху, а затем сломал его.

  4. Есть grid-template-columns: auto; Добавляю еще авто авто авто чтоб получилось больше столбцов. Каким будет способ, чтобы при определенном размере это 3 столбца, но когда он уменьшается, он становится 2 столбца, а затем 1 столбец, когда он минимален. Как я могу добиться этого таким образом, чтобы это работало наиболее эффективно и не требовало от меня постоянно что-то менять.

  5. Есть ли способ остановить дальнейшее изменение размера браузера (уменьшение его размера)? Я хотел бы, чтобы пользователь не изменял размер браузера, чтобы все было удобно для чтения.

ты должен задать один вопрос, а не 5 ...

Temani Afif 09.01.2019 21:36

@TemaniAf, если это 5 вопросов, связанных друг с другом. Я добавил все 5, потому что решение для первого может не работать для второго и не будет работать с 4-м или 5-м. Тогда я бы получил 5 решений, которые нельзя использовать вместе. Следовательно, почему я спросил все 5.

MadBoy 09.01.2019 21:49
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
2
2
1 998
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Вы можете изменить размер изображений, добавив <meta name = "viewport" content = "width = divice-width, initial-scale = 1.0"> в <head></head>section вместе с img { max-width: 100%; height: auto; } в вашем разделе CSS.
  2. Будьте осторожны при создании таблиц, чтобы они работали с наименьшим форматом в вашем целевом представлении. Использование ширины таблицы «1000 пикселей» не сработает, но «100%» может решить эти проблемы.
  3. да, так же, как у вас есть настройка min-width, вы также можете указать настройку max-width.
  4. Прямо сейчас все ваши <div> складываются друг над другом. Если у вас есть 2 или 3 рядом, вы должны заключить их в «контейнер» или «строку» и добавить float: left; в CSS для каждого из столбцов. Они должен сворачиваются друг под другом в зависимости от размера экрана зрителя.
  5. Измените настройки min-height и min-width с «0» на желаемый размер.

фу! Это все?

Спасибо. Еще один вопрос - есть class = grid-container, и я предполагаю, что это то, что вы имеете в виду под контейнером? Как будет выглядеть строка, потому что сейчас строки, кажется, создаются самим контейнером в зависимости от количества "авто", которое я помещаю в столбцы-шаблон-сетки

MadBoy 10.01.2019 09:11

Итак, у вас есть <div class = "grid-container">. Если вы хотите, чтобы все ваши <div> были рядом, добавьте: float: left; в CSS для .grid-item. Если вам нужны только два или три столбца, вы можете создать класс CSS (например, .grid-column) и добавить туда стиль float: left;. Если вы хотите иметь столбцы разной ширины, установите его с помощью атрибута grid-template-columns, для одинаковой ширины вы можете оставить его на auto, или использовать 30%, или 200px и т. д.

elbrant 11.01.2019 02:04

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