Расставьте приоритеты коробки внутри flexbox - PullRequest
0 голосов
/ 06 января 2019

У меня есть три div с внутри флексбокса. Я хочу, чтобы они появились в строке. Но если в первом div есть много текста, я хочу обрезать этот текст, чтобы всегда видеть текст второго и третьего div.

HTML:

<div class="flex">
  <div class="flex-1 item">
   !!!Scale me down If I am too big for the screen!!! Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
  </div>
  <div class="flex-2 item">Always show me. Dont let flex-1 push me outside</div>
  <div class="flex-3 item">Always show me. Dont let flex-1 push me outside</div>
</div>

CSS:

.flex {
  display: flex;
}

.item {
  margin: 2px;
  border: 1px solid black;
  height: 2em;
  white-space: nowrap;
}

.flex-1 {
  flex: 1 1 5em;
}

.flex-2 {
  flex: 1 1 5em;
}

.flex-3 {
  flex: 1 1 5em;
}

https://codepen.io/anon/pen/LMmGGz

1 Ответ

0 голосов
/ 06 января 2019

Я рекомендую использовать Sass / Scss для использования принципа СУХОЙ. Используйте mixin

SCSS

@mixin trunc-text {
   white-space: nowrap;
   overflow: hidden;
   text-overflow: ellipsis;
}

и в ваших классах

 @for $i from 1 through 3 {
  .flex-#{$i} { 
    @include trunc-text;
      @if $i == 1 {
        flex: 5 1 5rem
      } @else {
        flex: 1 1 5rem;
      }
  }
}

Это в начале может вас напугать, но оно довольно мощное.

Выход в Css

.flex-1 {
  flex: 1 1 5em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.flex-2 {
  flex: 1 1 5em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.flex-3 {
  flex: 1 1 5em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
...