2013-10-14 2 views
1

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

http://jsfiddle.net/st9AM/1/

.circle{ 

float: left; 
position: relative; 
width: 120px; 
height: 120px; 
border-radius: 50%; 
border: 2px solid #DDD; 
} 

.inner{ 
float: left; 
position: relative; 
width: 60px; 
height: 60px; 
border-radius: 50%; 
border: 2px solid #DDD; 
} 
+2

почему без 'маржинальной auto'? – Praveen

+0

- элементы, имеющие фиксированный размер? всегда 120px и 60px? –

+1

какой части вы хотите в центре? знак «+» или внутренний круг или оба? – Hiral

ответ

7

Прежде всего, с помощью margin: auto; является не хак

И центрирования круг внутри круга, вы можете использовать методы позиционирования, как position: absolute;. Здесь я использую position: absolute; на внутренней окружности, чем задает top и left свойства со значением 50% и чем я использую margin-top и margin-left и вычитать 1/2 от height и width.

Почему вычитается 32px? Как я уже сказал, вычитают ровно половину от width и , так что это также включает border вашего элемента, который установлен в 2px, что делает ваш элемент 64px в height и width соответственно.

Для vertical-align+ символ, я использую line-height свойство, как я могу видеть только один символ, чтобы быть выровнены по вертикали (вы не сказали, но технически я могу предположить, что форма, которую вы ищете), в качестве альтернативы вы можете также использовать vertical-align: middle; но вам необходимо установить элемент контейнера для display: table-cell;

Demo


Последнее, но не менее, вы должны гнездо span тег внутри внутреннего круга div.

.circle{ 
    float: left; 
    position: relative; 
    width: 120px; 
    height: 120px; 
    border-radius: 50%; 
    border: 2px solid #DDD; 
} 

.inner{ 
    text-align: center; 
    line-height: 60px; 
    position: absolute; 
    top: 50%; 
    margin-top: -31px; 
    left: 50%; 
    margin-left: -31px; 
    width: 60px; 
    height: 60px; 
    border-radius: 50%; 
    border: 2px solid #DDD; 
} 
+0

Если вы не можете изменить свой DOM, чем можете пинговать мне за помощью –

+1

+1 Просто вещь, граница на самом деле 2px, поэтому общая ширина будет 64px, а margin -32px –

+0

@koala_dev ohhh the math :(спасибо, что указали это я думал, что это было 1 :) просто отредактирует мой ответ ... –

1

Вы были "Поплавок: левый" во внутреннем круге, который вам не нужно

//float: left; 

Working fiddle

1

удалить поплавка влево и использовать запас: 0 авто;

.circle{ 

     position: relative; 
     width: 120px; 
     height: 120px; 
     border-radius: 50%; 
     border: 2px solid #DDD; 
     margin:0 auto; 
     } 
0

Посмотрите на это fiddle. Вы написали float:left; и хотели центрировать изображение. Удалите float:left;, и он отлично работает.

3

Here's более чистый раствор.

только с одним HTML-элементом.

HTML:

<div class='circle'></div> 

CSS:

* 
{ 
    margin: 0; 
    padding: 0; 
} 
.circle, .circle:after 
{ 
    border-radius: 50%; 
    border: 2px solid #DDD; 
    text-align: center; 
} 
.circle 
{ 
    width: 120px; 
    height: 120px; 
    font-size: 0; 
} 
.circle:before { 
    content:''; 
    display: inline-block; 
    height: 100%; 
    vertical-align: middle; 
} 
.circle:after 
{  
    content:'+'; 
    font-size: 20px; 
    padding: 20px 0; /* 2*padding + font size = innerCircle height*/ 
    display: inline-block; 
    vertical-align: middle; 
    width: 50%; 
} 
+0

Решение Nyc, вы получите мой голос, но я не избегаю использования псевдо, если это необходимо, пользователи не понимают, что :-D –

Смежные вопросы