Выравнивание текста и иконки

310
26 ноября 2016, 18:47

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

Answer 1

Вариант 1:

/* Врап для иконки и текста */ 
.item  { 
  position: relative; 
  padding-left: 1.5rem; 
} 
 
/* Иконка */ 
i { 
  position: absolute; 
  left: 0; 
  top: 50%; 
  margin-top: -.5rem; 
} 
 
 
/* Доп. стилизация для наглядности примера */ 
 
/* Врап для иконки и текста */ 
.item { 
  max-width: 150px; 
  width: 100%; 
   
  margin-bottom: 1rem; 
} 
/* Иконка */ 
i { 
  display: block; 
  width: 1rem; 
  height: 1rem; 
  background: #ccc; 
} 
/* Текст */ 
span { 
  display: inline-block; 
  vertical-align: middle; 
}
  <div class="item"> 
    <i></i> 
    <span>Lorem ipsum dolor.</span> 
  </div> 
   
  <div class="item"> 
    <i></i> 
    <span>Lorem ipsum dolor sit amet.</span> 
  </div>

Вариант 2 flex:

.item  { 
    display: flex; 
    flex-flow: row nowrap; 
    align-items: center; 
} 
 
 
/* Доп. стилизация для наглядности примера */ 
.item { 
  max-width: 150px; 
  width: 100%; 
   
  margin-bottom: 1rem; 
} 
 
i { 
  display: block; 
  width: 1rem; 
  height: 1rem; 
  background: #ccc; 
  margin-right: .5rem; 
} 
 
span { 
  width: 90%; 
}
<div class="item"> 
    <i></i> 
    <span>Lorem ipsum dolor.</span> 
  </div> 
   
  <div class="item"> 
    <i></i> 
    <span>Lorem ipsum dolor sit amet.</span> 
  </div>

Вариант 3 table:

.item  { 
    display: table; 
} 
 
.icon { 
  display: table-cell; 
  vertical-align: middle; 
} 
 
/* Доп. стилизация для наглядности примера */ 
.item { 
  max-width: 150px; 
  width: 100%; 
   
  margin-bottom: 1rem; 
} 
 
.icon { 
  width: 1rem; 
   
  padding-right: .5rem; 
} 
 
.icon i { 
  display: block; 
  width: 1rem; 
  height: 1rem; 
  background: #ccc; 
}
<div class="item"> 
    <span class="icon"><i></i></span> 
    <span>Lorem ipsum dolor.</span> 
  </div> 
   
  <div class="item"> 
    <span class="icon"><i></i></span> 
    <span>Lorem ipsum dolor sit amet.</span> 
  </div>

Answer 2

Надеюсь это то, что вы искали. Вот рабочий пример:

.parent { 
  width: 130px; 
} 
 
button { 
  width: 100%; 
  position: relative; 
  padding-left: 25px; 
  box-sizing: border-box; 
  word-wrap: break-word; 
} 
 
.icon { 
  width: 20px; 
  height: 20px; 
  position: absolute; 
  left: 0; 
  top: 50%; 
  transform: translate(0, -50%); 
}
<div class="parent"> 
  <button> 
    <span class="icon">&#x2709;</span> 
    Send e-mail to Mr.Smith 
  </button> 
</div>

READ ALSO
Ссылки меняют цвет после размещения на хостинге

Ссылки меняют цвет после размещения на хостинге

Помогите понять причину сего поведения ссылок: При верстке на локальной машине, ссылки были белыми, как и прописано в CSSПосле размещения на хостинге...

277
Как переопределить бутерброд-меню в bootstrap под другое разрешение?

Как переопределить бутерброд-меню в bootstrap под другое разрешение?

В меню сделанном на bootstrap и меня много пунктов меню и при определенном разрешении экрана, они сползают на 2оу строчку - фидлКак сделать так,...

553
Подгрузка изображений на сайте

Подгрузка изображений на сайте

Всем привет! Столкнулся с проблемой и решил отписать сюда, так как гугл мне не помогСоздал сайт на локалке всё работает как надо загрузил...

270
Как добавить цвет заливки по SVG из url(&ldquo;.svg&rdquo;) в CSS [дубликат]

Как добавить цвет заливки по SVG из url(“.svg”) в CSS [дубликат]

Данный вопрос уже был задан и имеет решение:

339