Matt
Matt

Reputation: 8942

Flexbox inner border and negative margins

I want to create border only for inner flex items without outer border of flex container. I tried to use negative values for margin to hide outer border based on this codepen, but in my case outer border is not hidden.

.view {
  display: flex;
  flex-direction: column;
  border: none;
}

.container {
  display: flex;
  flex-wrap: wrap;
  margin: 0 -5px -5px 0;
}

.content {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex: 1;
  background: yellow;
  padding: 20px;
  border-right: 1px solid black;
  border-bottom: 1px solid black;
}

.head {
  text-align: center;
}
<div class="view">
<div class="container">
   <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Total balance</div>
   </div>
   <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Available balance</div>
   </div>
   <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Orders</div>
   </div>
   <div class="content">
      <div class="sc-eTyWNx dIQzIE">500</div>
      <div class="head">Wallet balance</div>
   </div>
   <div class="content">
      <button class="sc-gzVnrw cnAjsC" type="button">Send</button>
   </div>
</div>
</div>

Upvotes: 1

Views: 1006

Answers (2)

Temani Afif
Temani Afif

Reputation: 273530

You simply forget to add overflow:hidden so that you hide the border you made outside using negative margin:

.view {
  display: flex;
  flex-direction: column;
  border: none;
}

.container {
  display: flex;
  flex-wrap: wrap;
  margin: 0 -5px -5px 0;
}

.content {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex: 1;
  background: yellow;
  padding: 20px;
  border-right: 1px solid black;
  border-bottom: 1px solid black;
}

.head {
  text-align: center;
}
<div class="view">
  <div class="container">
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Total balance</div>
    </div>
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Available balance</div>
    </div>
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Orders</div>
    </div>
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">500</div>
      <div class="head">Wallet balance</div>
    </div>
    <div class="content">
      <button class="sc-gzVnrw cnAjsC" type="button">Send</button>
    </div>
  </div>
</div>

In case, you will keep the yellow color here is another idea where you can use pseudo element to cover the non needed margin:

.container {
  display: flex;
  flex-wrap: wrap;
  position:relative;
}
.container:before {
  content:"";
  position:absolute;
  top:0;
  left:0;
  right:0;
  bottom:0;
  border:1px solid yellow;
}

.content {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex: 1;
  background: yellow;
  padding: 20px;
  border-left: 1px solid black;
  border-bottom: 1px solid black;
}

.head {
  text-align: center;
}
<div class="container">
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Total balance</div>
    </div>
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Available balance</div>
    </div>
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Orders</div>
    </div>
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">500</div>
      <div class="head">Wallet balance</div>
    </div>
    <div class="content">
      <button class="sc-gzVnrw cnAjsC" type="button">Send</button>
    </div>
  </div>

Upvotes: 1

ksav
ksav

Reputation: 20830

Can you give a border-right to .content (all except for the last one)?

.view {
  display: flex;
  flex-direction: column;
  border: none;
}

.container {
  display: flex;
  flex-wrap: wrap;
}

.content {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex: 1;
  background: yellow;
  padding: 20px;
}

.content:not(:last-child) {
  border-right: 1px solid black;
}

.head {
  text-align: center;
}
<div class="view">
  <div class="container">
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Total balance</div>
    </div>
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Available balance</div>
    </div>
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">0</div>
      <div class="head">Orders</div>
    </div>
    <div class="content">
      <div class="sc-eTyWNx dIQzIE">500</div>
      <div class="head">Wallet balance</div>
    </div>
    <div class="content">
      <button class="sc-gzVnrw cnAjsC" type="button">Send</button>
    </div>
  </div>
</div>

Upvotes: 0

Related Questions