Кажется, я не могу понять, как остановить мою html-форму от разделения и смещения вниз при изменении размера страницы

Я работаю над приложением rails, и у меня по-прежнему возникает эта проблема, когда моя html-форма продолжает разделяться и двигаться вниз каждый раз, когда я изменяю размер страницы. Я пробовал обернуть его в теги, пробовал разные позиции, плавающие элементы и дисплеи, и ничего не работает. В настоящее время это мой код для него. Кроме того, у меня есть несколько фотографий результата.

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

HTML:

<div id = "containerc">
  <div id = "contcontent">
    <div id = "formwrapper">
      <form action = "/contacts" method = "POST">
        <label for = "fullname" class = "label" id = "fullname">Full Name*</label>
        <input type = "text" name = "fullname" class = "input" id = "ifullname" style = "width: 48.5vw; height: 2.5vw; font-size: 1.5vw;" />
        <label class = "label" id = "email" for = "email">Email*</label>
        <input id = "iemail" type = "text" name = "email" class = "input" style = "font-size: 
                              1.5vw; width: 48.5vw; height: 2.5vw;" />
        <label for = "company" class = "label" id = "company">Company</label>
        <input type = "text" name = "company" class = "input" id = "icompany" style = "width: 
                              48.5vw; height: 2.5vw; font-size: 1.5vw;" />
        <label for = "message" class = "label" id = "message">Message</label>
        <textarea id = "imessage" name = "message" class = "input" style = "width: 48.5vw; 
                              height: 8vw; font-size: 1.2vw;"></textarea>
        <input type = "submit" id = "submit" value = "Submit" style = "width: 10vw; height: 
                              2vw;" />
      </form>
    </div>
  </div>
</div>

CSS:

h1#cont {
  text-align: center;
  bottom: 31vw;
  position: absolute;
  font-size: 7vw;
  left: 32.3vw;
  font-family: albaregular;
}

form {
  position: absolute;
  bottom: 55vw;
  white-space: nowrap;
}

label#fullname.label {
  font-family: eb_garamond_sc08_regular;
  font-size: 2vw;
  position: absolute;
  left: 25.4vw;
  bottom: -20vw;
  z-index: 1;
}

label#email.label {
  font-family: eb_garamond_sc08_regular;
  font-size: 2vw;
  position: absolute;
  left: 25.4vw;
  bottom: -26vw;
  z-index: 7;
}

label#company.label {
  font-family: eb_garamond_sc08_regular;
  font-size: 2vw;
  position: absolute;
  left: 25.4vw;
  bottom: -32vw;
  z-index: 3;
}

label#message.label {
  font-family: eb_garamond_sc08_regular;
  font-size: 2vw;
  position: absolute;
  left: 25.4vw;
  bottom: -38vw;
  z-index: 4;
}

input#ifullname.input {
  left: 25.3vw;
  bottom: -23vw;
  position: absolute;
  z-index: 0;
}

input#iemail.input {
  left: 25.3vw;
  bottom: -29vw;
  position: absolute;
  z-index: 0;
}

input#icompany.input {
  left: 25.3vw;
  bottom: -35vw;
  position: absolute;
  z-index: 0;
}

textarea.input {
  left: 25.3vw;
  bottom: -46.5vw;
  position: absolute;
  z-index: 0;
}

input#submit {
  left: 43vw;
  font-size: 1vw;
  position: absolute;
  bottom: -52vw;
  font-family: eb_garamond_sc08_regular;
}

Изображений:

Полноэкранный режим

Мобильный

Не уверен, что это вызывает проблему (хотя вполне вероятно), но в любом случае вам, вероятно, не следует использовать position: absolute для каждого отдельного элемента. Во-первых, очень утомительно вручную размещать каждый элемент и учитывать, насколько сложно было бы добавить поле посередине. Во-вторых, он подвержен ошибкам и, вероятно, будет давать разные результаты на разных размерах экрана. Вместо этого, возможно, рассмотрите возможность использования некоторых отображений макета CSS, таких как flex.

Henry Woody 11.12.2020 21:26

Ваша проблема не воспроизводится только с предоставленным кодом (скопируйте только html и css в какой-либо файл или используйте, например, codepen.io). Как правило, поскольку структура вашей страницы очень проста, я бы рекомендовал удалить любую форму position и вместо этого использовать только divs или display: block для архивирования макета столбца. Также сохраняйте все свои стили в css, а не в style-атрибутах.

Reizo 11.12.2020 21:28

Это мед может. Я очень новичок в html/css, поэтому я не совсем знаю, какой из них использовать и когда. Проблема в том, что когда я использую относительный, все портится еще больше. Также я бы просто полностью удалил позицию и заменил ее на flex? Разве это не помешает мне перемещать его по экрану? Теперь я вижу, что могу просто переместить форму, не перемещая все в ней, но все же независимо от того, какую позицию я использую, она всегда кажется беспорядочной.

zichyboy 11.12.2020 21:31

@Reizo, черт возьми, не так ли? Это отстой. При этом, как бы я разместил форму там, где я хочу, чтобы она была на странице, не используя position: ...;? Например, если я хочу, чтобы он был там, где он находится на полноэкранном изображении.

zichyboy 11.12.2020 21:34
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
0
4
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я взял ваш HTML и удалил все позиционирование и использовал только оболочку div, центрирующую всю форму с помощью

display: grid;
place-items: center;

и выровнял элементы формы в столбце, используя

display: flex;
flex-direction: column;

на form.

:root {
  font-size: 1vw; /* questionable from a design perspective */
}

input,
textarea {
  font-size: inherit;
}

.wrapper {
  display: grid;
  place-items: center;
}

.form {
  display: flex;
  flex-direction: column;
}

.button {
  align-self: center;
}
<div class = "wrapper">
  <form class = "form" action = "/contacts" method = "POST">
    <label for = "ifullname" class = "label" id = "fullname">Full Name*</label>
    <input type = "text" name = "fullname" class = "input" id = "ifullname"/>
    <label class = "label" id = "email" for = "iemail">Email*</label>
    <input id = "iemail" type = "text" name = "email" class = "input"/>
    <label for = "icompany" class = "label" id = "company">Company</label>
    <input type = "text" name = "company" class = "input" id = "icompany"/>
    <label class = "label" for = "imessage" class = "label" id = "message">Message</label>
    <textarea id = "imessage" name = "message" class = "input"></textarea>
    <input class = "button" type = "submit" id = "submit" value = "Submit"/>
  </form>
</div>

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

Также обратите внимание, что в labelfor вам нужно указать упомянутые inputid вместо name для правильной работы.

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

zichyboy 14.12.2020 22:40

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