Стилизация input'ов

Пытаюсь реализовать данные поля

Da

И возникает ряд вопросов:

  1. Как в placeholder'е звёздочку сделать красной
  2. Почему при добавлении паддингов появляется какие-то "тени" или что-то вроде этого, если я отключал их через *?
  3. Как сделать поле расширяемым подобно 3-ему инпуту(правый нижний угол)?
  4. Как разместить инпуты как скрине? Пытался через display: flex, но пока что безуспешно

Ответы (2 шт):

Автор решения: soledar10

Пример 1

* {
  box-sizing: border-box;
}

body {
  background-color: #3C5499;
  margin: 0;
}

.form {
  display: grid;
  gap: 1.25rem;
  padding: 1.25rem;
}

.form__item {
  position: relative;
}

.form__item:nth-of-type(1) {
  grid-column: 1 / 2;
  grid-row: 1 / 2;
}

.form__item:nth-of-type(2) {
  grid-column: 2 / 3;
  grid-row: 1 / 2;
}

.form__item:nth-of-type(3) {
  grid-column: 1 / 3;
  grid-row: 2 / 3;
}

.form__control {
  color: #fff;
  height: 50px;
  width: 100%;
  padding: 0.5rem 1rem;
  background-color: #273A71;
  border: none;
  outline: none;
}

.form__label {
  color: #fff;
  position: absolute;
  top: 50%;
  left: 1rem;
  transform: translateY(-50%);
  pointer-events: none;
  transition: opacity .3s ease;
}

.form__required {
  color: #f00;
}

.form__control:valid+.form__label {
  opacity: 0;
}

textarea.form__control {
  min-height: 100px;
  padding-top: 1rem;
}

textarea.form__control+.form__label {
  top: 1rem;
  transform: translateY(0%);
}
<form action="#" class="form">
  <div class="form__item">
    <input type="text" class="form__control" id="name" name="name" required>
    <label for="name" class="form__label">
      Name<span class="form__required">*</span>
    </label>
  </div>
  <div class="form__item">
    <input type="email" class="form__control" id="email" name="email" required>
    <label for="email" class="form__label">
      Email<span class="form__required">*</span>
    </label>
  </div>
  <div class="form__item">
    <textarea class="form__control" id="msg" name="msg" required></textarea>
    <label for="msg" class="form__label">
      Message<span class="form__required">*</span>
    </label>
  </div>
</form>

Пример 2

* {
  box-sizing: border-box;
}

body {
  background-color: #3C5499;
  margin: 0;
}

.form {
  display: flex;
  flex-wrap: wrap;
  gap: 1.25rem;
  padding: 1.25rem;
}

.form__item {
  position: relative;
  width: calc(50% - 1.25rem / 2);
}

.form__item:nth-of-type(3) {
  width: 100%;
}

.form__control {
  color: #fff;
  height: 50px;
  width: 100%;
  padding: 0.5rem 1rem;
  background-color: #273A71;
  border: none;
  outline: none;
}

.form__label {
  color: #fff;
  position: absolute;
  top: 50%;
  left: 1rem;
  transform: translateY(-50%);
  pointer-events: none;
  transition: opacity .3s ease;
}

.form__required {
  color: #f00;
}

.form__control:focus~.form__label,
.form__control:not(:placeholder-shown)~.form__label {
  opacity: 0;
}

textarea.form__control {
  min-height: 100px;
  padding-top: 1rem;
}

textarea.form__control+.form__label {
  top: 1rem;
  transform: translateY(0%);
}
<form action="#" class="form">
  <div class="form__item">
    <input type="text" class="form__control" id="name" name="name" placeholder=" ">
    <label for="name" class="form__label">
      Name<span class="form__required">*</span>
    </label>
  </div>
  <div class="form__item">
    <input type="email" class="form__control" id="email" name="email" placeholder=" ">
    <label for="email" class="form__label">
      Email<span class="form__required">*</span>
    </label>
  </div>
  <div class="form__item">
    <textarea class="form__control" id="msg" name="msg" placeholder=" "></textarea>
    <label for="msg" class="form__label">
      Message<span class="form__required">*</span>
    </label>
  </div>
</form>

→ Ссылка
Автор решения: De.Minov

Как в placeholder'е звёздочку сделать красной

Такой возможности нет, но как вариант вы можете использовать другой блок и там уже кастомизировать его как угодно (см. пример)

Как сделать поле расширяемым подобно 3-ему инпуту(правый нижний угол)?

Данный блок не совсем инпут, это <textarea>, у неё по умолчанию стоит свойство resize: both.
Так же это свойство можно применить и для других блоков, но увы не для всех:

* {padding: 0; margin: 0; box-sizing: border-box; vertical-align: top;}

.resize {
  display: inline-block;
  width: 200px;
  height: 30px;
  overflow: hidden;
  resize: both;
}
<input class="resize" value="INPUT RESIZE" readonly>

<div class="resize" style="background: #ccc;">DIV RESIZE</div>

<button class="resize">BUTTON RESIZE</button>

Так же нельзя сменить иконку, но её можно воссоздать не хитрым способом (см. пример)

Как разместить инпуты как скрине? Пытался через display: flex, но пока что безуспешно

При должных навыках можно сделать любой технологией, я использовал Grid Layout (см. пример)


Пример

@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap');

body {
  background: linear-gradient(to right, #3c5499, #3c5499);
  font-family: 'Roboto', sans-serif;
  font-weight: 300;
  margin: 20px;
}

.form-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-gap: 20px;
}

.form-grid__fill {
  grid-column: 1 / 3;
}

.input-lvl {
  display: flex;
  justify-content: flex-start;
  align-items: center;
  width: 100%;
  position: relative;
  font-size: 85%;
}

.input-lvl__input,
.input-lvl__label {
  padding: 1em 1.5em;
  box-sizing: border-box;
  color: #fff;
}

.input-lvl__input {
  display: block;
  width: 100%;
  border-radius: 4px;
  border: 0;
  background-color: #273a71;
  font: inherit;
  margin: 0;
  outline: none;
}

textarea.input-lvl__input {
  min-height: 12em;
  height: 12em;
  max-height: 100%;
  overflow: hidden;
  resize: vertical;
  position: relative;
}

.input-lvl--resize {
  position: relative;
}

.input-lvl--resize::after {
  content: '';
  display: block;
  width: 20px;
  height: 20px;
  border-radius: 4px;
  background-color: #273a71;
  background-image: 
    linear-gradient(0, #5568a1, #5568a1), linear-gradient(0, #5568a1, #5568a1),
    linear-gradient(0, #5568a1, #5568a1), linear-gradient(0, #5568a1, #5568a1),
    linear-gradient(0, #5568a1, #5568a1), linear-gradient(0, #5568a1, #5568a1);
  background-repeat: no-repeat;
  background-position:
    calc(100% - 5px) calc(100% - 5px), calc(100% - 10px) calc(100% - 5px),
    calc(100% - 15px) calc(100% - 5px), calc(100% - 10px) calc(100% - 10px),
    calc(100% - 5px) calc(100% - 10px), calc(100% - 5px) calc(100% - 15px);
  background-size: 3px 3px;
  position: absolute;
  right: 0;
  bottom: 0;
  z-index: 1;
  pointer-events: none;
}

.input-lvl__label {
  display: block;
  width: 100%;
  line-height: 1;
  position: absolute;
  left: 0;
  top: 0;
  z-index: 1;
  opacity: 0;
  transition: opacity .1s ease;
  pointer-events: none;
}

.input-lvl__input[required] + .input-lvl__label::after {
  content: '*';
  display: inline-block;
  color: red;
  vertical-align: super;
  margin-top: -.2em;
}

.input-lvl__input:placeholder-shown + .input-lvl__label {
  opacity: 1;
}
<div class="form-grid">
  <div class="input-lvl">
    <input class="input-lvl__input" id="form-name" type="text" placeholder=" " required>
    <label class="input-lvl__label" for="form-name">Your Name</label>
  </div>
  
  <div class="input-lvl">
    <input class="input-lvl__input" id="form-email" type="email" placeholder=" " required>
    <label class="input-lvl__label" for="form-email">Your Email</label>
  </div>
  
  <div class="input-lvl input-lvl--resize form-grid__fill">
    <textarea class="input-lvl__input" id="form-textarea" placeholder=" " required></textarea>
    <label class="input-lvl__label" for="form-textarea">Your Message</label>
  </div>
</div>

→ Ссылка