Выравнивание изображений с помощью vertical-align

17

Как вертикально выравнивать изображения в тексте? Давайте взглянем 6 основных линий относительно которых выполняется вертикальное выравнивание. На изображениях эти линии выделены красным цветом.

Линии текста

1. Top line — верхняя линия строки

Выравнивание изображение с помощью vertical-align

2. Text-top line — линия над текстом, включая все символы над ним (символ ударения и т.п.). Верхняя граница кегельной площадки шрифта.

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

Выравнивание изображение с помощью vertical-align

Top line и text-top line на первый взгляд выглядят одинаково. Однако бывают ситуации когда top line располагается выше чем text-top line. Например, когда в тексте есть изображение, по высоте превосходящее кегель шрифта.

Выравнивание изображение с помощью vertical-align

3. Middle line — средняя линия, проходящяя на уровне половины высоты буквы «x».

Выравнивание изображение с помощью vertical-align

4. Baseline — основная линия текста. Воображаемая линия на которой «сидят» все буквы.

Выравнивание изображение с помощью vertical-align

5. Text-bottom line — линия под текстом, включая нижние выносные элементы букв (например «j», «у», «ф»). Нижняя граница кегельной площадки шрифта.

Выравнивание изображение с помощью vertical-align

6. Bottom line — нижняя линия строки.

Выравнивание изображение с помощью vertical-align

Выравнивание изображений по умолчанию

По умолчанию, нижняя граница изображения совпадает с baseline, если к изображению не применяются внешние отступы. На примере ниже у изображения присутствует нижний внешний отступ, равный 5px.

Выравнивание изображение с помощью vertical-align

Использование CSS для вертикального выравнивания

Для вертикального выравнивания с помощью CSS используется свойство vertical-align. Давайте рассмотрим различные варианты применения этого свойства.

Top

Верхняя граница изображения совпадает с верхним краем строки.

1
img {vertical-align: top}

Выравнивание изображение с помощью vertical-align

Text-top

Верхняя граница изображения совпадает с верхней границей кегельной площадки шрифта.

1
img {vertical-align: text-top}

Выравнивание изображение с помощью vertical-align

Middle

Вертикальная середина изображения выравнивается относительно средней линии текста.

1
img {vertical-align: middle}

Выравнивание изображение с помощью vertical-align

Baseline

Несмотря на то, что изображения по умолчанию выравниваются относительно baseline, вы можете задать такое выравнивание вручную.

1
img {vertical-align: baseline}

Выравнивание изображение с помощью vertical-align

Text-bottom

Нижняя граница изображения совпадает с нижней границей кегельной площадки шрифта.

1
img {vertical-align: text-bottom}

Выравнивание изображение с помощью vertical-align

Bottom

Нижняя граница изображения совпадает с нижним краем строки.

1
img {vertical-align: bottom}

Выравнивание изображение с помощью vertical-align

Sub

Нижняя граница изображения совпадает с основной линией текста в нижнем регистре.

1
img {vertical-align: sub}

Выравнивание изображение с помощью vertical-align

Super

Нижняя граница изображения совпадает со основной линией (baseline) текста в верхнем регистре.

1
img {vertical-align: super}

Выравнивание изображение с помощью vertical-align

Значение в различных единицах

Значения свойства vertical-align также можно задавать в различных единицах, например в %. Положительные значения поднимают изображение относительно высоты строки (line-height), отрицательные — опускают.

1
img {vertical-align: 30%}

Выравнивание изображение с помощью vertical-align

1
img {vertical-align: -30%}

Выравнивание изображение с помощью vertical-align

Значения заданные например в px или em выравнивают изображение не относительно высоты строки, а относительно основной линии текста.

Оригинал: Aligning inline images with the vertical-align property

Выпадающее меню без Javascript

175

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<div class="menu">
    <ul> 
        <li><a class="hide" href="">Раздел 1</a>
 
        <!--[if lte IE 6]>
        <a href="">Раздел 1
        <table><tr><td>
        <![endif]-->
 
            <ul>
                <li><a href="" title="">Страница 1</a></li>
                <li><a href="" title="">Страница 1.1</a></li>
                <li><a href="" title="">Страница 1.2</a></li>
            </ul>
 
        <!--[if lte IE 6]>
        </td></tr></table>
        </a>
        <![endif]-->
 
        </li>
 
        <li><a class="hide" href="">Раздел 2</a>
 
        <!--[if lte IE 6]>
        <a href="">Раздел 2
        <table><tr><td>
        <![endif]-->
 
            <ul>
                <li><a href="" title="">Страница 2</a></li>
                <li><a href="" title="">Страница 2.1</a></li>
                <li><a href="" title="">Страница 2.2</a></li>
                <li><a href="" title="">Страница 2.3</a></li>
                <li><a href="" title="">Страница 2.4</a></li>
                <li><a href="" title="">Страница 2.5</a></li>
            </ul>
 
        <!--[if lte IE 6]>
        </td></tr></table>
        </a>
        <![endif]-->
 
        </li>
    </ul> 
</div>

Для всех браузеров кроме IE6 используется :hover у элемента li. Тут думаю все понятно. Для IE6, как видите, используются условные комментарии и дополнительная разметка. Вы можете добавить дополнительные разделы, при этом необходимо будет изменить в CSS ширину меню.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
.menu{
    font-family:arial, sans-serif;
    width:212px;
    height:100px;
    position:relative;
    font-size:11px;
    z-index:100
}
.menu ul li a, .menu ul li a:visited{
    display:block;
    text-decoration:none;
    color:#000;
    width:104px;
    height:20px;
    text-align:center;
    color:#fff;
    border:1px solid #fff;
    background:#710069;
    line-height:20px;
    font-size:11px;
    overflow:hidden
}
.menu ul{
    padding:0;
    margin:0;
    list-style:none
}
.menu ul li{
    float:left;
    position:relative}
.menu ul li ul{
    display:none
}
.menu ul li:hover a{
    color:#fff;
    background:#36f
}
.menu ul li:hover ul{
    display:block;
    position:absolute;
    top:21px;
    left:0;
    width:105px
}
.menu ul li:hover ul li a{
    display:block;
    background:#ddd;
    color:#000
}
.menu ul li:hover ul li a:hover{
    background:#6fc;
    color:#000
}

Оформление пунктов меню можно менять по своему вкусу. Для IE6 используются дополнительные стили, которые также нужно подключить с помощью условных комментариев.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
.menu ul li a.hide, .menu ul li a:visited.hide{
    display:none
}
.menu ul li a:hover{
    color:#fff;
    background:#36f
}
.menu ul li a:hover ul{
    display:block;
    position:absolute;
    top:21px;
    left:0;
    width:105px
}
.menu ul li a:hover ul li a{
    display:block;
    background:#ddd;
    color:#000
}
.menu ul li a:hover ul li a:hover{
    background:#6fc;
    color:#000
}

Увеличение изображения с помощью overflow

25

Превьюшки на CSS Этот пример покажет вам как можно реализовать простое увеличение изображений с помощью свойства overflow. Иногда на странице не хватает места для размещения полноразмерных изображений, но в тоже время не хочется ограничиваться маленькими превью. Данный способ позволяет ограничить размер изображений, а при наведении указателя мыши показывать их в полном размере.

В основе этого способа лежит не фактическое изменение размера изображения, а изменение его видимой области, с помощью свойства overflow. Это свойство влияет на отображение содержимого, в случае если это содержимое превышает размеры родительского контейнера. Свойство overflow может принимать следующие значения: visible, hidden, scroll и auto. В этом примере мы будем использовать значение hidden, чтобы скрыть часть изображения, и visible чтобы сделать эту часть видимой при наведении указателя мыши.

Идея заключается в том, чтобы разместить изображение в определенном контейнере. Поскольку мы говорим об изображениях, то в роли такого контейнера будет выступать ссылка. Делаем контейнер блочным, указываем необходимые размеры и устанавливаем относительное позиционирование. Изображение внутри контейнера имеет абсолютное позиционирование и отрицательные левый и верхний отступы.

Превьюшки на CSS

Этот способ можно применять как для одного, так и для нескольких изображений.

<a href="#"><img src="image.jpg"  alt="Мое изображение" /></a>
a{
   display:block;
   float:left;
   width:100px;
   height:100px;
   overflow:hidden;
   position:relative;
   z-index:1;		
}
a img{
   position:absolute;
   top:-20px;
   left:-50px;	
}

Если вы хотите использовать изображения разных размеров, вы можете указать отступы непосредственно для каждого изображения:

a img{
   position:absolute;
   top:-20px;
   left:-50px;	
}
a#image1 img{
   top:-28px;
   left:-55px;	
}	
a#image2 img{
   top:-18px;
   left:-48px;	
}	
a#image3 img{
   top:-21px;
   left:-30px;	
}	
.
.
.

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

a:hover{
   overflow:visible;
   z-index:1000;
   border:none;		
}

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

  • Мое изображение
  • Мое изображение
  • Мое изображение
  • Мое изображение

Оригинал: Create Resizing Thumbnails Using Overflow Property

Индикатор загрузки на CSS

2

В этой статье создадим анимированный индикатор загрузки на «чистом» CSS. Для создания нам потребуется 3 элемента: внешний контейнер и 2 вложенных.

Укажем фоновое изображение для контейнера и установим фиксированную ширину и высоту. Первый дочерний элемент span будет выступать в качестве индикатора. Второй дочерний элемент em будет абсолютно спозиционирован над индикаторо. Элемент em имеет тот же фон, что и контейнер, поэтому он создает эффект остановки индикатора на определенном значении.

Индикатор загрузки на CSS

Чтобы сохранить семантику насколько это возможно был использован список dl для нескольких значений. Если вам нужен всего один индикатор вы можете использовать другой элемент.

<dd>
	<span><em style="left:100px">50%</em></span>
</dd>

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

Анимация реализована с помощью анимированного GIF. Элемент span имеет фоновое изображение шириной 200px, который показывает загрузку с 0 до 200px. Независимо от того, какой процент мы указываем индикатор проходит весь путь и останавливается. Эффект остановки осуществляется с помощью em, как уже было сказано ранее.

Т.к. индикатор имеет ширину равную 200px и элемент em также шириной в 200px, то каждый процент равен 2px. Поэтому для значения 50% необходимо указывать смещение равное 100px, для 24% — 48px, 75% — 150px и т.д.

Оригинал: Pure CSS Animated Progress Bar

Делаем кнопки методом «Sliding Doors»

27

Рассмотрим пример создания резиновых кнопок используя известный метод «Sliding Doors».

Резиновые закладки с помощью одного изображения и CSS

Как видно на рисунке кнопки в меню имеют три состояния:

  • Обычное
  • Активное
  • При наведении мыши

Ширина кнопок зависит от содержимого. Внутри ссылок находится span.

Резиновые закладки с помощью одного изображения и CSS

Для создания эффекта при наведении и выделения активной ссылки используется одно фоновое изображение:

Фоновое изображение для резиновой закладки

<ul class="tab">
    <li class="active"><a href="home.html"><span>Главная</span></a></li>
    <li><a href="community.html"><span>Сообщество</span></a></li>
    <li><a href="blog.html"><span>Блог</span></a></li>
    <li><a href="messages.html"><span>Сообщения</span></a></li>
    <li><a href="contact.html"><span>Контакты</span></a></li>
</ul>
ul, li{
    border:0;
    margin:0;
    padding:0;
    list-style:none
}
ul{
    border-bottom:solid 1px #DEDEDE;
    height:29px;
    padding-left:20px;
}
li{
    float:left;
    margin-right:2px;
}
.tab a:link, .tab a:visited{
    float:left;
    height:30px;
    background:url(tab-round.png) no-repeat right -30px;
    color:#666;
    font-weight:bold;
    text-decoration:none;
    padding:0 14px 0 0;
}
.tab a span{
    float:left;
    height:30px;
    background:url(tab-round.png) no-repeat left -30px;
    padding:0 0 0 14px;
    line-height:30px;
    cursor:pointer
}
.tab a:hover{
    background-position:right -60px;
}
.tab a:hover span{
    background-position:left -60px;
}
.active a:link, .active a:visited, .active a:visited, .active a:hover{
    background-position:right 0;
}
.active a span, .active a:hover span{
    background-postition:left 0;
}

Оригинал: Clean Tab Bar Digg-like using CSS