Как сделать так чтобы при уменьшении страницы элементы оставались на местах

Обновлено: 05.07.2024

Текст выходит за края блока - как сделать, чтобы текст на выходил за края блока, дива(div), нужно просто обрезать данный текст на ширину блока, как сделать, чтобы текст не вылазит за пределы блока.

Все способы обрезать или спрятать текст за пределами блока

Что делать если текст вылазит з пределы блока!?

Если ваш текст вылазит, выходит за пределы блока. то мы можем поступить несколькими способами!

1). Первый способа предотвратить вход текста за пределы блока - это сделать перенос текста
2). Второй способ запретить выход текста за пределы блока - обрезать текст по краю блока

Пример - как текст выходит/вылазит за края блока. white-space: nowrap; - чтобы строка не переносилась на новую строку при заполнении

Добавим max-width - чтобы div не растягивался.

+ нам нужно это все сделать - добавим бордюр() красного цвета -

border: 1px solid red ;

Теперь в этот div вставим этот класс и напишем текст, который заранее известно, что он будет выходить за края!

Как видим. наш текст прекрасно вылез за края того блока. в котором он написан! И мало того, он умудрился вылезти еще и за края основного текстового поля

Сделать чтобы текст не выходил за края блока -> перенос

Подробно о переносе строк мы говорили здесь
Опять для иллюстрации не выхода текста за края блока, нам потребуется новый(старый) блок -> div , который мы возьмем из выше идущего примера. Создадим новый класс и добавим в него свойство : white-space: normal;

Результат не выхода текста за края блока:

Как видим, мы побороли выше приведенный пример текста вылезшего за края блока!

Второй способ, чтобы текст не выходил за края блока -> обрезка

Но, что если нам требуется сохранять высоты блока, а как мы видели выше, перенос троки увеличивает высоту блока!

Поступаем аналогично , как и в предыдущем примере! Берем тот же див, и к нему добавим новый класс, со свойством -> overflow: hidden; ? которое нам поможет предотвратить вылезание текста за пределы блока.

Результат текст не выходит за края

Третий способ, чтобы текст не выходил за края блока -> шрифт

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

Как я могу остановить это от искажений?

Кроме того, я все еще довольно новичок в CSS, меня научили использовать% вместо px. Это правильно? Также что-нибудь еще, что вы должны указать, пожалуйста, дайте мне знать.

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

CSS Media Queries:

У меня была похожая проблема, которую я исправил, добавив дополнительный div в меню навигации. Затем я добавил следующее

Это предотвратило его упаковку. Надеюсь, что это работает.

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

Пример (в вашей таблице стилей):

Еще один хороший способ добиться этого - применить атрибут min-width к телу страницы.

Пример (в вашей таблице стилей):

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

Я бы просто установил абсолютную высоту и ширину для всех элементов /элементов на странице.

Или вы можете также использовать min /max-width /hight для настройки макета страницы на экранах разных размеров или при изменении размера окна браузера.

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

Итак, это очень похоже на приведенные выше предложения, но у него есть область содержимого фиксированной ширины, если вы искали полную ширину, извините (; _;)

Вы захотите использовать медиа-запрос CSS, чтобы установить точки останова для разных стилей в CSS. Который при правильном использовании исправит любые искажения.

Похожие вопросы

Популярные теги

Давайте я объясню прием на реальных примерах. В этой статье я покажу:

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

Погодите, о каких вообще сдвигах идет речь?

Сдвиг в верстке — то, что происходит, когда обновление на странице заставляет что-то существенно переместиться. Чаще всего сдвиги в верстке происходят во время загрузки страницы, пока контент отрисовывается постепенно. Например, когда в страницу вставляется картинка с неизвестной высотой, прямо перед абзацем, который вы читаете, текст куда-то убегает, и это порядком раздражает. Еще такое часто бывает, когда сторонние скрипты (рекламные или партнерские сервисы) добавляют на страницу новые неизвестные элементы.

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

Для начала — немного контекста

скриншот Clever Cloud

  • Диаграмма показывает только данные за последние 24 часа.
  • Каждый пункт в легенде можно кликнуть и показать/скрыть разные категории кодов статуса. Спасибо, Chart.js!

Доступного пространства слишком мало, чтобы добавить подробный заголовок вверху или внизу диаграммы. Так что, чтобы помочь пользователям узнать это, я добавил кнопку дополнительной информации (ℹ️) в правый верхний угол. При клике по этой кнопке диаграмма прячется, и вместо нее показывается краткий текст. Выглядит это примерно так:

краткий текст, поясняющий диаграмму

Проблемы сдвига в верстке

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

При работе над такими компонентами я стараюсь делать так, как считаю правильным: не задавать компоненту фиксированной высоты, чтобы он мог подстраиваться под свой контент. В данной ситуации это еще важнее, потому что я не могу знать заранее, сколько места понадобится для краткого текста (без скроллинга). Требуемый минимум высоты зависит от:

  • Неизвестной ширины компонента, зависящей от контекста, в котором он используется
  • Длины краткого текста, которая зависит от языка (английский либо французский)

В итоге, когда компонент содержит диаграмму, он оказывается чуть меньше по высоте, чем когда содержит краткий текст.

Два состояния одного UI-компонента рядом: слева круговая диаграмма, справа краткий текст. Английская версия.

С французским текстом проблема еще острее, потому что он чуть длинее:

Два состояния одного UI-компонента рядом: слева круговая диаграмма, справа краткий текст. Французская версия.

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

  • В лучшем случае другие части верстки слегка сместятся.
  • В худшем случае кнопка под курсором мышки сдвинется и под ним окажется что-то другое (привет, кнопка поиска в Твиттере).

Видео внизу показывает, что происходит при переключении между состояниями.

Извините, ваш браузер не показывает видео прямо на странице.

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

Как нам теперь этот сдвиг предотвратить?

Решение с абсолютным позиционированием

До появления CSS Grid я бы решил эту проблему с помощью CSS-свойства position.

Два состояния одного UI-компонента представлены рядом. Слева диаграмма, справа краткий текст.

Для такого HTML решение в CSS будет выглядеть примерно так:

Больше нет никаких сдвигов при переключении состояний, но остались ограничения:

  • Это нормально. Вы не в этом не одиноки!
  • Со временем и практикой станет полегче…

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

Теперь посмотрим, как гриды справятся с этим лучше.

Решение на гридах

Что вы имеете в виду под грид-областью?

Если вы не очень знакомы с CSS Grid, то, прежде чем читать статью дальше, я бы посоветовал:

то наш компонент будет выглядеть вот так:

UI-компонент показывает диаграмму и краткий текст в виде одноколоночного грида в инспекторе CSS-гридов Firefox

Благодаря чудесному инспектору CSS-гридов из отладчиика Firefox у нас есть подписи для рядов и колонок. Мы видим, что:

Это потому, что поведение по умолчанию — простая одноколоночная сетка: дочерние элементы размещаются по порядку. С помощью grid-column и grid-row можно заставить элементы разместиться в определенной области грида.

Например, если мы вот так разместим наши два элемента в одной и той же области:

то результат будет выглядеть так:

UI-компонент показывает диаграмму и краткий текст наложенными поверх друг друга в инспекторе CSS-гридов Firefox

Если вас что-то смущает, не забывайте, что нужная панель будет скрыта с помощью visibility: hidden .

Извините, ваш браузер не показывает видео прямо на странице.

Больше никаких сдвигов!

В сравнении с решением на абсолютном позиционировании, мы улучшили ситуацию:

  • Не нужна добавочная обертка .wrapper
  • Будет прекрасно работать и более чем с двумя панелями
  • Незачем гадать, какая панель будет управлять размером всего компонента

А теперь, бонусом, позвольте показать вам еще один реальный пример, где я использовал этот прием.

Предотвращение горизонтальных сдвигов

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

Скриншот веб-консоли Clever Cloud, показывающей обзор приложения Node.js

На узких экранах перенос кнопок на новую строку мог бы вызвать еще больший сдвиг вёрстки, типа такого:

Извините, ваш браузер не показывает видео прямо на странице.

Извините, ваш браузер не показывает видео прямо на странице.

Больше никаких сдвигов!

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

Полезные ссылки

Про CSS и гриды:

    на MDN на Can I use на YouTube-канале Джейсона Ленгсторфа на CSS-Tricks (а также большую статью про гриды на этом сайте и другие материалы по соотв. тегу — прим. перев.)
  • Присмотритесь к Firefox и его великолепному инспектору CSS-гридов

Компонент круговой диаграммы и компонент кнопки — части библиотеки компонентов Clever Cloud. Код открыт на Гитхабе и документация (с наглядным предпросмотром) опубликована с помощью Storybook.

Перед началом статьи хочу сказать, что еще больше полезной и нужной информации вы найдете в нашем Telegram-канале. Подпишитесь, мне будет очень приятно.

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

Прежде всего, я хотел бы отдать должное Майку Ритмюллеру за то, что он изначально придумал эту функцию, и Джеффу Грэму из CSS-Tricks за расширение её функциональности. Я ни в коем случае не ставлю себе в заслугу создание этой функции. Я только хочу пропеть ей хвалу.

Итак, давайте приступим к применению стилей.

В CSS по умолчанию присутствует возможность применять базовые математические операции с помощью функции calc(). Благодаря ей мы можем решить любое простое математическое уравнение и установить полученный результат в качестве свойства CSS, которому требуется численное значение. calc() может применяться везде: от font-size до width и box-shadow… .

В CSS также есть средство измерения, которое вычисляет viewport height и viewport width окна браузера:vh и vw соответственно. 100vh обозначает всю высоту окна браузера, а 100vw — всю ширину. Разница между 100% и 100vh/100vw в том, что 100% устанавливается относительно селектора, внутри которого происходит определение, в то время как значение 100vh/100vw — абсолютное для окна браузера. Это различие важно.

Объяснив этот момент с calc() и 100vh/100vw, пропущу несколько шагов и перейду прямо к формуле.

Она позволяет динамически масштабировать любое свойство с числовым значением, основанным на ширине или высоте браузера:

calc([min size]px + ([max size] — [min size]) * ((100vw — [min vw width]px) / ([max vw width] — [min vw width])))

Хорошо… Давайте разбираться.

Во-первых, взглянем на правую часть уравнения:

Нам нужно установить минимальный размер для элемента element, так, чтобы любой element, который мы хотим масштабировать, не был равен 0px. Если мы хотим, чтобы элемент был размером не менее 25px, то можем подставить это значение в первую часть calc():

[min size]px = 25px

Нам важна левая часть:

([max size] — [min size]) * ((100vw — [min vw width]px) / ([max vw width] — [min vw width])))

Разберёмся с ней:

([max size] — [min size])

Здесь мы устанавливаем диапазон через минимальный и максимальный размер, который хочется видеть у элемента, и эта разность будет действовать как множитель. Если нужно, чтобы размер элемента находился в пределах между 25px и 50px, мы можем подставить сюда такие значения:

([max size] — [min size]) = (50 - 25)

Третья часть сложнее всего:

((100vw — [min vw width]px) / ([max vw width] — [min vw width]))

Здесь мы можем задать диапазон через минимальное и максимальное ожидаемое разрешение браузера. На десктопе я всегда, исходя из опыта, беру 1920px (горизонтальное разрешение для 1080p) и 500px (самое маленькое разрешение, до которого возможно масштабировать в Chrome без инструментов разработчика).

Подставим эти значения, и крайняя слева часть уравнения примет следующий вид:

((100vw — [min vw width]px) / ([max vw width] — [min vw width])) = ((100vw — 500px) / (1920–500)))

Это создаёт соотношение, основанное на величине значения свойства viewport (окна просмотра) браузера. Всё, что выходит за пределы диапазона между 500px и 1920px, будет масштабироваться вверх или вниз, но с линейной скоростью. Мы также можем написать медиа-запрос для мобильных устройств или сверхшироких мониторов или записать эти исключения в саму функцию calc().

Давайте начнём упрощать: подставим в функцию некоторые числа и посмотрим на неё в действии. Мы можем заменить 100vw любым разрешением, чтобы увидеть соотношение, которое устанавливаем для размера нашего element:

((1920px — 500px) / (1920–500)) = 1 ((1565px — 500px) / (1920–500)) = 0.75 ((1210px — 500px) / (1920–500)) = 0.5 ((855px — 500px) / (1920–500)) = 0.25 ((500px — 500px) / (1920–500)) = 0

Если затем взять множитель размера элемента, заданный ранее, и умножить на это соотношение, то в итоге получится динамическое значение размера нашего элемента, основанное на размере viewport:

(50–25) * ((1920px — 500px) / (1920–500)) = 25px (50–25) * ((1565px — 500px) / (1920–500)) = 18.75px (50–25) * ((1210px — 500px) / (1920–500)) = 12.5px (50–25) * ((855px — 500px) / (1920–500)) = 6.25px (50–25) * ((500px — 500px) / (1920–500)) = 0px

Наконец, если мы затем добавим минимальный размер элемента к этому множителю, то получим окончательный размер элемента:

25 + (50–25) * ((1920px — 500px) / (1920–500)) = 50px 25 + (50–25) * ((1565px — 500px) / (1920–500)) = 43.75px 25 + (50–25) * ((1210px — 500px) / (1920–500)) = 37.5px 25 + (50–25) * ((855px — 500px) / (1920–500)) = 31.25px 25 + (50–25) * ((500px — 500px) / (1920–500)) = 25px

Итак, если мы хотим, чтобы элемент был равен 25px, когда ширина браузера равна 500px, и 50px, когда ширина браузера равна 1920px, вся функция будет выглядеть следующим образом:

calc(25px + (50–25) * ((100vw — 500px) / (1920–500)))

Запутанно? Ещё как.

calc([min size]px + ([max size] — [min size]) * ((100vw — [min vw width]px) / ([max vw width] — [min vw width])))

Теперь перейдём к примерам.

У меня есть очень простая настройка “скелета” HTML с импортом CSS-файла:

Here Be Subheader

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Here Be Subsubheader

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, eaque ipsa quae ab illo inventore veritatis. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.

Использование свойства float

Чтобы расположить два слоя рядом друг с другом по горизонтали, воспользуемся стилевым свойством float со значением left . Эта конструкция говорит, что слой необходимо выровнять по левому краю и обтекать его по правой стороне. Таким образом, рядом лежащий второй слой будет пристыкован к первому справа.

Теоретически, свойство float достаточно задавать лишь для одного слоя из двух. Однако браузер Internet Explorer в этом случае между слоями добавляет небольшой промежуток, что не всегда желательно, а Firefox накладывает слои друг на друга. Чтобы все смотрелось именно так, как хочется, float следует указывать для всех слоев (пример 1).

Пример 1. Добавление свойства float

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

Вид макета при уменьшении размера окна браузера

Рис. 1. Вид макета при уменьшении размера окна браузера

Чтобы подобная ситуация не происходила, следует воспользоваться свойством margin .

Добавление margin для создания двухколонного макета

Пример 2. Двухколонный макет

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

Если внизу после колонок предполагается разместить еще один слой, то для него следует использовать стилевое свойство clear . Дело в том, что браузеры по-разному располагают этот нижележащий слой, поэтому следует отменить действие обтекания, что clear как раз и делает (пример 3).

Пример 3. Применение свойства clear

Стиль для данного примера останется неизменным и только добавляется тег

Резюме

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

Масштабирование сайта под окно браузера

Масштабирование сайта под окно браузера
Доброго времени суток. Подскажите, пожалуйста, способы масштабирования сайта под браузер, из.

Как подогнать картинку под окно браузера?
Подскажите пожалуйста можно ли подогнать картинку под размер окна браузера??тоесть при увеличении.


Синхронное изменение размера фона под окно браузера
Всем привет. Ребята, я не совсем силён в программировании и создании сайта. Но однако при его.

Уменьшение окна браузера — а контент?

Хэлло, вопросик возник. Видел сайты с резиновой версткой. Т.е. сжимаешь окно — естественно контент сжимается. Но до определенных размеров. Дальше контент не сужается, а кагбэ фиксированная ширина получается. Я этого достигал с помощью body , но на сайтах контент во всю ширину экрана. Как они ЭТО делают?

Используй " % " вместо " px "

Читайте также: