Помогни ни да направим Uroci.net по - богат! Добави урок

Центриране на картинка по хоризонтала и вертикала

joneff   трудност:    видян: 16541

Вероятно всеки, който се е занимавал малко повече с CSS, се е сблъсквал с проблема за центриране на картинка по хоризонтала и вертикала.
Най-лесният вариант е да си направим една таблица с един ред и една клетка и да зададем центриране по хоризонтала и вертикала на клетката. Но цяла таблица за една клетка? Може би някой друг път.

Друг вариант е да си зададем картинката за фоново изображение и да я центрираме така, но и това не особено читаво.

Решението се оказа супер лесно -- само дето трябваше някой да ми го покаже първо. Видях го на CSSplay . В общи линии използваме стилове да укажем, че даден контейнер (div, p, или каквото друго искаме), е "клетка от таблица". Веднъж щом за браузъра контейнера е клетка от таблица, му задаваме вертикално подравняване и voila :)

<style type="text/css">
/* За браузъри различни от IE */

div.holder {
width:750px;
height:300px;
background:#f8f8f8;
border:1px solid #777;
text-align:center;
display:table-cell; /* тук задаваме поведение "клетка от таблица" */
vertical-align:middle; /* вертикално подравяване */
}
div.holder img {
margin:0 auto; /* централно подравняване */
border:1px solid #aaa;
}
</style>
<!--[if IE]>
&lt;style type="text/css">

/* Вертикално подравняване за IE */
#edge {
   width:0;
   height:100%;
   display:inline-block;
   vertical-align:middle;
}
#container {
   text-align:center;
   width:100%;
   display:inline-block;
   vertical-align:middle;
}
&lt;/style>
&lt;![endif]-->

Сега да сглобим HTML кода.

<div class="holder">

<span id="edge"></span>

<span id="container"><img src="адрес_до_картинка"/></span>

</div>



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

Източник: Centering an image using CSS , CSSplay .



Сподели урока:



Коментари (4)

momchil на 25.12 2006 в 13:30ч.
Нека цитирам някои от твоите думи: " Но цяла таблица за една клетка?. Може би някой друг път "
Хмммм интересно.... погледнал ли си колко код си написал за това CSS центриране :))))) Какъв е смисъла ? като с една обикновенна таблица с една клетка става точно на 3-4 реда и е оптимизирано за всички браузъри!
Това е някакво парадоксално вманиячаване да гледате всичко да се пише с CSS ! Нямам нищо против правилата на W3C, естествено един сайт като цяло 95% трябва да е CSS насочен, но има едни 5% при които е абсурдно да се използва CSS. Все едно да редиш таблични данни в дивове, ул-та и ли-та :)) или пък да използваш CSS за конструиране на форма за контакти:))
joneff на 31.01 2007 в 21:04ч.
Мисли глобално, малко по абстрактно и не толкова конкретно и ще видиш че има смисъл :))

Виж по втората точка.. Малко съм педантик на тема семантика.. Даже малко повече ако трябва да съм честен.. Таблицата за мен е за представяне на табуларни данни, в което число не влиза формата за контакти например..

Но разбира се това е моето мнение :)
sIME на 01.06 2008 в 00:05ч.
Аз дори и не мога да си представя защо трябва да използвам таблица за формата за контакти. И в интерес на истината това с центрирането хоризонтално и вертикално е много добро и не знаех че има display: table-cell;. И да кажа защо трябва да се ползва CSS вместо да си направим таблица: защото ако сайта ти е динамичен пък и статичен да е може да имаш много снимки който искаш да центрираш и с CSS ще напишеш този код точно веднъж, а иначе ще трябва да направиш за едни 100 снимки цели 100 таблици, което вече не е никак изгодно :)
crazybrat на 17.01 2010 в 19:43ч.
Страхотна статия, благодаря!

По въпроса на другия колега, защо е нужно.
Слагам си кода в stylesheet.css, задавам си го където ми е необходим и ми "Стилизира" всичко наведнъж. Статични, динамични... все тая. За единични случаи и с таблици съм го правила, но определено има нужда от този тип центриране.

Регистрирайте се, за да добавите коментар


Калдейта Ком ЕООД - © 2003-. Всички права запазени.
Препоръчваме: IT Новини