2015-12-29 2 views
1

Кажется, я не могу это сделать правильно. Я создаю мобильное приложение (ionic/AngularJS), и я хочу нижнюю панель (нижний колонтитул), разделенную на две коробки с зазором посередине. У каждой стороны был бы текст, центрированный непосредственно посередине.Два столбца с центрированным контентом с разделителем

Это будет соответствовать полной ширине (100%).

What I'm trying to do enter image description here

Я создал его в скрипкой:

http://jsfiddle.net/MYwPt/112/

Мой HTML:

<div class="faketab"> 
    <table> 
     <tr> 
      <td>LEFT BOX</td> 
      <td class="centerpiece"></td> 
      <td>RIGHT BOX</td> 
     </tr> 
    </table> 
</div> 

CSS:

.faketab 
{ 
    display: -webkit-box; 
    -webkit-box-direction: normal; 
    -webkit-box-orient: horizontal; 
    -webkit-flex-direction: horizontal; 
    flex-direction: horizontal; 
    -webkit-box-pack: center; 
    justify-content: center; 
    -webkit-transform: translate3d(0, 0, 0); 
    transform: translate3d(0, 0, 0); 
    border-color: #b2b2b2; 
    background-color: #f8f8f8; 
    background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%); 
    color: #4d4d4d; 
    position: absolute; 
    bottom: 0; 
    z-index: 5; 
    width: 100%; 
    /* height: 49px; */ 
    border-style: solid; 
    border-top-width: 1px; 
    background-size: 0; 
} 
.faketab table tr td { 
    width: 2em; 
    padding-top: 10px; 
    padding-bottom: 10px; 
    text-align:center; 
    vertical-align: middle; 
    font-size:18px; 
} 
.centerpiece{ 
    border-left: 0.1em solid black; 
} 
+0

Я удалил часть кода из вашей скрипки. Вы хотите, как это? http://jsfiddle.net/MYwPt/114/ –

+0

Я бы посоветовал не использовать таблицы, если только не возникла определенная потребность. Что-то вроде этого было бы намного чище. https://jsfiddle.net/gbvcq7p7/ – redditor

+0

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

ответ

1

Вот уборка и простая структура, которая делает все, что вы просите.

Редактировать: This fiddle имеет префикс flex атрибуты.

Редактировать 2: This fiddle имеет display: table вместо flex и будет работать до IE8.

.faketab { 
 
    display: flex; 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 0; 
 
    right: 0; 
 
    padding: 0 2px 2px;   /* space around buttons */ 
 
} 
 
.faketab > div:first-child { 
 
    margin-right: 2em;   /* space between boxes */ 
 
} 
 
.faketab > div { 
 
    width: 50%; 
 
    height: 60px; 
 
    font-size:18px; 
 
    border: 2px solid #b2b2b2; 
 
    background-color: #f8f8f8; 
 
    color: #4d4d4d; 
 
    display: flex; 
 
    justify-content: center; 
 
    align-items: center; 
 
}
<div class="faketab"> 
 
    <div>BUTTON</div> 
 
    <div>BUTTON 2</div> 
 
</div>

+0

Спасибо, и подходит для мобильных/всех браузеров? – Yian

+0

@Yian Над образцом работает все новые браузеры (мобильные или настольные), которые поддерживают новейший flexbox. Обновленный образец ссылки на скрипт имеет префикс для поддержки IE10 и Safari 7/8, но если вы хотите поддерживать еще более старые версии, такие как IE8/9, flexbox нельзя использовать, поскольку он не работает на тех, кто старше. Итак, как далеко ты хочешь пойти? – LGSon

+0

@Yian Я добавил вторую ссылку на скрипку, если вы хотите поддерживать браузеры, которые не знают 'flex'. – LGSon

0

Что вам нужно сделать, это добавить display: table-cell для каждого td, а затем изменить код, подобный следующему:

HTML

<div class="faketab"> 
    <table> 
     <tr> 
      <td>LEFT BOX</td> 
      <td>RIGHT BOX</td> 
     </tr> 
    </table> 
</div> 

CSS

.faketab table tr td { 
    display: table-cell; 
    width: 1%; 
    padding-top: 10px; 
    padding-bottom: 10px; 
    text-align:center; 
    vertical-align: middle; 
    font-size:18px; 
} 

.faketab table tr td:last-child { 
    border-left: 1px solid black; 
} 

DEMO

Вы можете сделать тот же результат с меньшим кодом разметки и более чистого кода, который может работать на мобильных устройствах.

1. <a> ссылки

HTML

<div class="tabs tabs--block"> 
    <a href="#" class="tabs__item">Left tab title</a> 
    <a href="#" class="tabs__item">right tab title</a> 
</div> 

CSS

.tabs { 
    width: 320px; 
    margin: 100px auto; 
    border: 1px solid #000; 
} 

.tabs--block .tabs__item { 
    display: block; 
    width: 50%; 
    float: left; 
    padding: 1em; 
    text-align: center; 
    box-sizing: border-box; 
    text-decoration: none; 
} 

.tabs--block .tabs__item:last-child { 
    border-left: 1px solid #000; 
} 

.tabs--block:after { 
    content: ""; 
    clear: both; 
    display: table; 
} 

.tabs--block .tabs__item { 
    display: block; 
    width: 50%; 
    float: left; 
    padding: 1em; 
    text-align: center; 
    box-sizing: border-box; 
    text-decoration: none; 
} 

.tabs--block .tabs__item:last-child { 
    border-left: 1px solid #000; 
} 

2.Flexbox

HTML

<div class="tabs tabs--flex"> 
<a href="#" class="tabs__item">Left tab title</a> 
    <a href="#" class="tabs__item">right tab title</a> 
</div> 

CSS

.tabs--flex { 
    display: flex; 
} 

.tabs--flex .tabs__item { 
    flex: 0 0 50%; 
    padding: 1em; 
    text-align: center; 
    box-sizing: border-box; 
    text-decoration: none; 
} 

.tabs--flex .tabs__item:last-child { 
    border-left: 1px solid #000; 
} 

DEMO

+0

Спасибо. Это работает на мобильном телефоне, но средняя/центральная часть перемещается относительно текста в поле (т. Е. Если у вас длинный текст, середина изменит его положение). Можете ли вы повторить эту проблему? – Yian

+0

Чтобы объяснить лучше, я нарисовал это. Http: //i.imgur.com/aiV3LcO.jpg – Yian

+0

@Yian Можете ли вы проверить это, пожалуйста? http://jsfiddle.net/MYwPt/120/ Если все в порядке, я обновлю свой ответ. – shadeed9

0

Используется для этого CSS border-spacing недвижимости

table{border-spacing: 0;} 

table{border-spacing: 0;} 
 

 
.faketab 
 
{ 
 
    display: -webkit-box; 
 
    -webkit-box-direction: normal; 
 
    -webkit-box-orient: horizontal; 
 
    -webkit-flex-direction: horizontal; 
 
    flex-direction: horizontal; 
 
    -webkit-box-pack: center; 
 
    justify-content: center; 
 
    -webkit-transform: translate3d(0, 0, 0); 
 
    transform: translate3d(0, 0, 0); 
 
    border-color: #b2b2b2; 
 
    background-color: #f8f8f8; 
 
    background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%); 
 
    color: #4d4d4d; 
 
    position: absolute; 
 
    bottom: 0; 
 
    z-index: 5; 
 
    width: 100%; 
 
    /* height: 49px; */ 
 
    border-style: solid; 
 
    border-top-width: 1px; 
 
    background-size: 0; 
 
} 
 
.faketab table tr td { 
 
    width: 2em; 
 
    padding-top: 10px; 
 
    padding-bottom: 10px; 
 
    text-align:center; 
 
    vertical-align: middle; 
 
    font-size:18px; 
 
} 
 
.centerpiece{ 
 
    border-left: 0.1em solid black; 
 
}
<div class="faketab"> 
 
    <table> 
 
     <tr> 
 
      <td>LEFT BOX</td> 
 
      <td class="centerpiece"></td> 
 
      <td>RIGHT BOX</td> 
 
     </tr> 
 
    </table> 
 
</div>

+0

Текст в поле не центрирован, а средний divder не находится в середине – Yian

0

Просто добавьте следующие свойства и может изменять ширину и высоту сНу в соответствии с дизайном вам необходимо:

.faketab td{ 
     float:left; 
     width:45%; 
     border:1px solid #000; 
     height:100px; 
    } 
    .centerpiece{ 
     width:3% !important; 
     float:left !important; 
    } 
0

Пожалуйста, используйте «flex- направление "и заполнение для класса под названием 'fake Вкладка таблицы тр тд»

HTML

<div class="faketab"> 
     <table> 
      <tr> 
       <td>LEFT BOX</td> 
       <td class="centerpiece"></td> 
       <td>RIGHT BOX</td> 
      </tr> 
     </table> 
    </div> 

CSS

.faketab 
{ 
    display: -webkit-box; 
    display: -webkit-flex; 
    display: -moz-box; 
    display: -moz-flex; 
    display: -ms-flexbox; 
    display: flex; 
    -webkit-box-direction: normal; 
    -webkit-box-orient: horizontal; 
    -webkit-flex-direction: horizontal; 
    -moz-flex-direction: horizontal; 
    -ms-flex-direction: horizontal; 
    flex-direction: horizontal; 
    -webkit-box-pack: center; 
    -ms-flex-pack: center; 
    -webkit-justify-content: center; 
    -moz-justify-content: center; 
    justify-content: center; 
    -webkit-transform: translate3d(0, 0, 0); 
    transform: translate3d(0, 0, 0); 
    border-color: #b2b2b2; 
    background-color: #f8f8f8; 
    background-image: linear-gradient(0deg, #b2b2b2, #b2b2b2 50%, transparent 50%); 
    color: #4d4d4d; 
    position: absolute; 
    bottom: 0; 
    z-index: 5; 
    width: 100%; 
    /* height: 49px; */ 
    border-style: solid; 
    border-top-width: 1px; 
    background-size: 0; 
} 
.faketab table tr td { 
    width: 1em; 
    padding-top: 10px; 
    padding-bottom: 10px; 
    text-align:center; 
    vertical-align: middle; 
    font-size:18px; 
    flex-direction:row; 
    padding:0 50px 0 10px; /* this */ 
} 
.centerpiece{ 
    border-left: 0.1em solid black; 
} 
1

Я предпочитаю использовать дивы. Вам нужно установить только свойство отображения в строку и поплавок влево. Для текста text-align: center.

body{ 
 
    margin:0; 
 
} 
 
.faketab{ 
 
    display:inline-block; 
 
    position: absolute; 
 
    bottom: 0; 
 
    width:100%; 
 
    border-top:1px solid; 
 
} 
 

 
.tabs{ 
 
    float:left; 
 
    width:49.5%; 
 
    text-align:center; 
 
} 
 

 
.tabs:hover{ 
 
    color: #B0B0B0; 
 
} 
 

 
.vertical{ 
 
    float:left; 
 
    border-left:1px solid; 
 
    height:15px; 
 
}
<div class="faketab"> 
 
    <div class="tabs">LEFT BOX</div> 
 
    <span class="vertical"></span> 
 
    <div class="tabs">RIGHT BOX</div> 
 
</div>

Успехов!

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