2015-08-10 4 views
0

Я пытаюсь вертикально выровнять 2 divs. Один определенный размер с фоновым изображением, а другой - несколько строк текста (с: перед элементом над ним). У меня нет полного контроля над количеством, потому что это зависит от ширины экрана.вертикальные выравнивающие divs - неизвестная высота

HTML

<div class="brand-wrap"> 
    <a class="navbar-brand" href="<?php echo home_url(); ?>"></a> 

    <div class="brand-text"> 
     <p>test text text text text text text ...</p> 
    </div> 
</div> 

CSS

.navbar-brand { 
    display: inline-block; 
    margin-top: 10px; 
    padding: 0; 
    height: 60px; 
    width: 60px; 
    background: url('img/logo_orig.png') no-repeat center center; 
    background-size: auto 100%; 
} 

.brand-wrap { 
    display: inline-block; 
} 

.brand-text { 
    position: relative; 
    font-size: 12px; 
    display: inline-block; 
    color: #fff; 
} 

.brand-text:before { 
    content: ''; 
    display: block; 
    width: 50px; 
    height: 3px; 
    position: absolute; 
    left: 0; 
    top:-7px; 
    background-color: red; 
} 

То, что я делает его рядом друг с другом, но не в центре. Я хочу что-то без определенной высоты для div текста.

+0

вы можете сделать [jsfiddle] (http://jsfiddle.net/), демонстрирующее дело? – Jakemmarsh

+0

http://stackoverflow.com/questions/489340/vertically-align-text-next-to-an-image Я думает, что это должно помочь вам –

+0

примеры, используемые, все они имеют определенную высоту. Длина текста может быть только на одной строке, 2 или 3, в зависимости от того, насколько широкий пользователь делает экран. Я хочу, чтобы он оставался вертикально центрированным рядом с маркой nav-bar. – user3550879

ответ

0

Кажется мне все, что вы должны сделать, это добавить vertical-align:middle как к .navbar-brand и .brand-text (с оговоркой о переносе margin-top: 10px на .brand-wrap от .navbar-brand.

.navbar-brand { 
 
    display: inline-block; 
 
    padding: 0; 
 
    height: 60px; 
 
    vertical-align:middle; 
 
    width: 60px; 
 
    background: #000 url('img/logo_orig.png') no-repeat center center; 
 
    background-size: auto 100%; 
 
} 
 

 
.brand-wrap { 
 
    display: inline-block; 
 
    margin-top: 10px; 
 
} 
 

 
.brand-text { 
 
    position: relative; 
 
    border: 1px solid #000; 
 
    font-size: 12px; 
 
    display: inline-block; 
 
    color: #000; 
 
    vertical-align:middle; 
 
} 
 

 
.brand-text:before { 
 
    content: ''; 
 
    display: block; 
 
    width: 50px; 
 
    height: 3px; 
 
    position: absolute; 
 
    left: 0; 
 
    top:-7px; 
 
    background-color: red; 
 
}
<div class="brand-wrap"> 
 
    <a class="navbar-brand" href="<?php echo home_url(); ?>"></a> 
 

 
    <div class="brand-text"> 
 
     <p>test text text text text text text ...</p> 
 
    </div> 
 
</div>

+0

Это выглядит только по центру, потому что верхняя часть 10px сверху – user3550879

+0

Наверху нет надписи '10px' - есть' 10px', и я сохранил его там, потому что ваш код, казалось, захотел получить поле «10px» в верхней части '.brand-wrap'. Не стесняйтесь удалить его, и вы увидите, что независимо от поля «.brand-text» теперь вертикально центрируется на «.navbar-brand», и он останется таким, независимо от того, сколько контента вы разместили в '.brand- text' или '.navbar-brand'. Поскольку вы указали, что оба элемента являются 'inline-block', все, что вам нужно сделать, это добавить' vertical-align: middle' к обоим из них (и удалить все поля в '.navbar-brand' или' .brand-text') – Adam

+0

Я устал (вот почему я думал, что это маржа, я ошибочно сказал, что вы заполняете правильно), но вертикальная середина, похоже, не работает для меня в любом случае – user3550879

1

Вы можете использовать flexbox для решения этой проблемы. Вы не предоставили живой пример, но вот то, что я представлял себе:

*{ 
 
    box-sizing:border-box; 
 
} 
 
#wrapper{ 
 
    background-color: #333333; 
 
    padding: 5px; 
 
    display:flex; 
 
    display: -webkit-box;  /* OLD - iOS 6-, Safari 3.1-6 */ 
 
    display: -moz-box;   /* OLD - Firefox 19- (buggy but mostly works) */ 
 
    display: -ms-flexbox;  /* TWEENER - IE 10 */ 
 
    display: -webkit-flex;  /* NEW - Chrome */ 
 
    display: flex; 
 
    flex-direction: row; 
 
    align-items: center; 
 
} 
 
#navbar{ 
 
    width: 60px; 
 
    min-width: 60px; 
 
    height: 60px; 
 
    background-color: #EE4433; 
 
    border: 2px dashed white; 
 
} 
 
#other{ 
 
    color: white; 
 
    margin-left: 5px; 
 
    border: 2px dashed white; 
 
}
<div id="wrapper"> 
 
    <div id="navbar"></div> 
 
    <div id="other"> 
 
    <a class="navbar-brand" href="<?php echo home_url(); ?>"></a> 
 

 
    <div class="brand-text"> 
 
     <p>test text text text text text text ...test text text text text text text ...test text text text text texttest text text text text text text ...test text text text text text text ...test text text text text text</p> 
 
    </div> 
 
    </div> 
 
</div>

Просто используйте align-items: center;

+0

Я использую сафари прямо сейчас, и ваш код не работает, как вы описали – user3550879

+0

@ user3550879 Для более старых версий Safari попробуйте добавить 'display: -webkit-box; 'выше, где у вас есть display: flex;'. [Подробнее] (https://css-tricks.com/using-flexbox/). –

+0

@ user3550879 Добавлен Cross-Browser Solution. Протестировал его в Safari, и теперь он работает – lomas09