Ah Tan
Ah Tan

Reputation: 59

Narrow the size of border and average the others border size

My original design with 4 channels like this: enter image description here

There are 4 borders with equal size. The code is here:

.meter-block-container {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  align-content: stretch;
  justify-content: flex-start;
  height: 100%;
  width: 100%;
  background-color:lightblue;
}

.chBorder {
  height:100%;
  width:100%;
  margin: 0.5%;
  border-radius: 1%;
}
.ch1 {
  border: solid 2px rgb(240, 240, 1);
}
.ch2 {
  border: solid 2px green;
}
.ch3 {
  border: solid 2px blue;
}
.ch4 {
  border: solid 2px purple;
}

.chTopBar{
  margin: -0.1%;
  border-radius: 1%;
  display: flex;
  flex-direction: row;
  height: 40px;
}

.chHL1{
  background-color: rgb(240, 240, 1);
}
.chHL2{
  background-color: green;
}
.chHL3{
  background-color: blue;
}
.chHL4{
  background-color: purple;
}

.OnOff{
  float: right;
  margin-top: 0.1%;
  margin-right: 0.1%;
  size: 16px;;
}

label.ChNumber{
  color: white;
  border-radius: 2% 0% 0% 0%;
  margin-top:-0.1%;
  margin-left:-0.1%;
  padding: 0.5% 5% 2% 5%;
  font-size: 1.5vw;
}

.measurement{
  background-color: darkblue;
  color: white;
  display: grid;
  grid-template-columns: auto auto;
  margin-top: 2%;
  padding: 1% 0%;
  width: 100%;
}

.measurementValue{
  text-align: right;
  font-size: 50px;
}
.measurementUnit{
  font-size: 50px;
  text-align: left;
  padding-left: 2%;
}
<div class="meter-block-container">
 

  <div class="chBorder ch1">
    <div class="chTopBar chHL1">
      <div>
        <label class="ChNumber chHL1">1</label>
      </div>
    </div>
    
    
    <div class="measurement">
      <div class="measurementValue">
        6.000
      </div>
      <div class="measurementUnit">
        V
      </div>
      <div class="measurementValue">
        6.000
      </div>
      <div class="measurementUnit">
        A
      </div>
      <div class="measurementValue">
        6.000
      </div>
      <div class="measurementUnit">
        W
      </div>
    </div>
  
    <div class="vandcSettings">
      <div>
        <label>Voltage Setting</label><br>
        <input style="text-align:left;" size="8" value="50">
        <span >V</span>
      </div>
      <div>
        <label>Voltage Range</label><br>
        <select>
          <option value="0">5 V</option>
          <option value="1">10 V</option>
          <option value="2">15 V</option>
          </select>
      </div>
      <div>
        <label>Current Limit</label><br>
        <input style="text-align:left;" size="8" value="50">
        <span >A</span>
      </div>
      <div>
        <label>Current Range</label><br>
        <select>
          <option value="0">5 V</option>
          <option value="1">10 V</option>
          <option value="2">15 V</option>
        </select>
      </div>
    </div>
    <div class="ohterSettings">
      <div style="padding-bottom: 2%;">
        <input type="checkbox">
        <label>OVP Limit</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <input style="text-align:left;" size="8" value="50">
            <span >V</span>
          </div>
        </div>
      </div>
      <div>
        <input type="checkbox">
        <label>OCP</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <label>OVP Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
          <div>
            <label>OVP Delay Start</label><br>
            <select>
              <option value="0">CC Transition</option>
              <option value="1">Setting Change</option>
            </select>
          </div>
        </div>
      </div>
      <div style="background-color: grey;">
        <input type="checkbox">
        <label>Coupling</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <label>On Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
          <div>
            <label>Off Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
        </div>
      </div>
    </div>
  -->
    
  </div>
  <div class="chBorder ch2">
      <div class="chTopBar chHL2">
          <label class="ChNumber chHL2">2</label>
      </div>
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>   
  
  <div class="chBorder ch3">
      <div class="chTopBar chHL3">
        <label class="ChNumber chHL3">3</label>
      </div>
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>
  <div class="chBorder ch4">
      <div class="chTopBar chHL4">
          <label class="ChNumber chHL4">4</label>
      </div> 
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>
</div>

If one of the channels has no data, it will look like this (please ignore the background color): enter image description here

This can happen to any channel and up to a maximum of three channels in no module. But it needs to narrow the no module channel and enlarge other channels'size. I tried to change the content in channel 1 to no module, but the size still the same.

enter image description here

I used the display:flex method to arrange those channels. Any better idea?

Upvotes: 1

Views: 71

Answers (2)

Louis Grasset
Louis Grasset

Reputation: 334

In order to fix your element spacing, use css-grid. Here's a fix for you code. I added css grid, column-gap and grid-column-gap (for support), removed a margin and replaced it by a padding on your main div.

Note for grid gaps :

CSS Grid Layout initially defined the grid-column-gap property. This prefixed property is being replaced by column-gap. However, in order to support browsers that implemented grid-column-gap and not column-gap for grid, you will need to use the prefixed property as in the second interactive example above. https://developer.mozilla.org/en-US/docs/Web/CSS/column-gap

Without data in first element

.meter-block-container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  padding: 4px;
  column-gap: 4px;
  grid-column-gap : 4px; /* See note */
  height: 100%;
  width: 100%;
  background-color:lightblue;
}

.chBorder {
  height:100%;
  border-radius: 1%;
  box-sizing: border-box; /* Make borders be taken in count in width calculation, to prevent width = 100% + borders */
}
.ch1 {
  border: solid 2px rgb(240, 240, 1);
}
.ch2 {
  border: solid 2px green;
}
.ch3 {
  border: solid 2px blue;
}
.ch4 {
  border: solid 2px purple;
}

.chTopBar{
  margin: -0.1%;
  border-radius: 1%;
  display: flex;
  flex-direction: row;
  height: 40px;
}

.chHL1{
  background-color: rgb(240, 240, 1);
}
.chHL2{
  background-color: green;
}
.chHL3{
  background-color: blue;
}
.chHL4{
  background-color: purple;
}

.OnOff{
  float: right;
  margin-top: 0.1%;
  margin-right: 0.1%;
  size: 16px;;
}

label.ChNumber{
  color: white;
  border-radius: 2% 0% 0% 0%;
  margin-top:-0.1%;
  margin-left:-0.1%;
  padding: 0.5% 5% 2% 5%;
  font-size: 1.5vw;
}

.measurement{
  background-color: darkblue;
  color: white;
  display: grid;
  grid-template-columns: auto auto;
  margin-top: 2%;
  padding: 1% 0%;
  width: 100%;
}
.empty.meter-block-container {
  grid-template-columns: 75px repeat(3, 1fr);
}
.empty .measurement{
  height: 153px;
}
.empty .measurement span {
  transform-origin: top center;
  transform: rotate(90deg) translateX(65px);
  width: 91px;
  height: 27px;
  line-height: 25px;
}
.measurementValue{
  text-align: right;
  font-size: 50px;
}
.measurementUnit{
  font-size: 50px;
  text-align: left;
  padding-left: 2%;
}
<div class="meter-block-container empty">
 

  <div class="chBorder ch1">
    <div class="chTopBar chHL1">
      <div>
        <label class="ChNumber chHL1">1</label>
      </div>
    </div>
    
    
    <div class="measurement empty">
      <span>No data</span>
    </div>
  
    <div class="vandcSettings">
      <div>
        <label>Voltage Setting</label><br>
        <input style="text-align:left;" size="8" value="50">
        <span >V</span>
      </div>
      <div>
        <label>Voltage Range</label><br>
        <select>
          <option value="0">5 V</option>
          <option value="1">10 V</option>
          <option value="2">15 V</option>
          </select>
      </div>
      <div>
        <label>Current Limit</label><br>
        <input style="text-align:left;" size="8" value="50">
        <span >A</span>
      </div>
      <div>
        <label>Current Range</label><br>
        <select>
          <option value="0">5 V</option>
          <option value="1">10 V</option>
          <option value="2">15 V</option>
        </select>
      </div>
    </div>
    <div class="ohterSettings">
      <div style="padding-bottom: 2%;">
        <input type="checkbox">
        <label>OVP Limit</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <input style="text-align:left;" size="8" value="50">
            <span >V</span>
          </div>
        </div>
      </div>
      <div>
        <input type="checkbox">
        <label>OCP</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <label>OVP Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
          <div>
            <label>OVP Delay Start</label><br>
            <select>
              <option value="0">CC Transition</option>
              <option value="1">Setting Change</option>
            </select>
          </div>
        </div>
      </div>
      <div style="background-color: grey;">
        <input type="checkbox">
        <label>Coupling</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <label>On Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
          <div>
            <label>Off Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
        </div>
      </div>
    </div>
  -->
    
  </div>
  <div class="chBorder ch2">
      <div class="chTopBar chHL2">
          <label class="ChNumber chHL2">2</label>
      </div>
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>   
  
  <div class="chBorder ch3">
      <div class="chTopBar chHL3">
        <label class="ChNumber chHL3">3</label>
      </div>
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>
  <div class="chBorder ch4">
      <div class="chTopBar chHL4">
          <label class="ChNumber chHL4">4</label>
      </div> 
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>
</div>

With data

.meter-block-container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  padding: 4px;
  column-gap: 4px;
  grid-column-gap : 4px; /* See note */
  height: 100%;
  width: 100%;
  background-color:lightblue;
}

.chBorder {
  height:100%;
  border-radius: 1%;
  box-sizing: border-box; /* Make borders be taken in count in width calculation, to prevent width = 100% + borders */
}
.ch1 {
  border: solid 2px rgb(240, 240, 1);
}
.ch2 {
  border: solid 2px green;
}
.ch3 {
  border: solid 2px blue;
}
.ch4 {
  border: solid 2px purple;
}

.chTopBar{
  margin: -0.1%;
  border-radius: 1%;
  display: flex;
  flex-direction: row;
  height: 40px;
}

.chHL1{
  background-color: rgb(240, 240, 1);
}
.chHL2{
  background-color: green;
}
.chHL3{
  background-color: blue;
}
.chHL4{
  background-color: purple;
}

.OnOff{
  float: right;
  margin-top: 0.1%;
  margin-right: 0.1%;
  size: 16px;;
}

label.ChNumber{
  color: white;
  border-radius: 2% 0% 0% 0%;
  margin-top:-0.1%;
  margin-left:-0.1%;
  padding: 0.5% 5% 2% 5%;
  font-size: 1.5vw;
}

.measurement{
  background-color: darkblue;
  color: white;
  display: grid;
  grid-template-columns: auto auto;
  margin-top: 2%;
  padding: 1% 0%;
  width: 100%;
}

.measurementValue{
  text-align: right;
  font-size: 50px;
}
.measurementUnit{
  font-size: 50px;
  text-align: left;
  padding-left: 2%;
}
<div class="meter-block-container">
 

  <div class="chBorder ch1">
    <div class="chTopBar chHL1">
      <div>
        <label class="ChNumber chHL1">1</label>
      </div>
    </div>
    
    
    <div class="measurement">
      <div class="measurementValue">
        6.000
      </div>
      <div class="measurementUnit">
        V
      </div>
      <div class="measurementValue">
        6.000
      </div>
      <div class="measurementUnit">
        A
      </div>
      <div class="measurementValue">
        6.000
      </div>
      <div class="measurementUnit">
        W
      </div>
    </div>
  
    <div class="vandcSettings">
      <div>
        <label>Voltage Setting</label><br>
        <input style="text-align:left;" size="8" value="50">
        <span >V</span>
      </div>
      <div>
        <label>Voltage Range</label><br>
        <select>
          <option value="0">5 V</option>
          <option value="1">10 V</option>
          <option value="2">15 V</option>
          </select>
      </div>
      <div>
        <label>Current Limit</label><br>
        <input style="text-align:left;" size="8" value="50">
        <span >A</span>
      </div>
      <div>
        <label>Current Range</label><br>
        <select>
          <option value="0">5 V</option>
          <option value="1">10 V</option>
          <option value="2">15 V</option>
        </select>
      </div>
    </div>
    <div class="ohterSettings">
      <div style="padding-bottom: 2%;">
        <input type="checkbox">
        <label>OVP Limit</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <input style="text-align:left;" size="8" value="50">
            <span >V</span>
          </div>
        </div>
      </div>
      <div>
        <input type="checkbox">
        <label>OCP</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <label>OVP Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
          <div>
            <label>OVP Delay Start</label><br>
            <select>
              <option value="0">CC Transition</option>
              <option value="1">Setting Change</option>
            </select>
          </div>
        </div>
      </div>
      <div style="background-color: grey;">
        <input type="checkbox">
        <label>Coupling</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <label>On Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
          <div>
            <label>Off Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
        </div>
      </div>
    </div>
  -->
    
  </div>
  <div class="chBorder ch2">
      <div class="chTopBar chHL2">
          <label class="ChNumber chHL2">2</label>
      </div>
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>   
  
  <div class="chBorder ch3">
      <div class="chTopBar chHL3">
        <label class="ChNumber chHL3">3</label>
      </div>
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>
  <div class="chBorder ch4">
      <div class="chTopBar chHL4">
          <label class="ChNumber chHL4">4</label>
      </div> 
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>
</div>

Upvotes: 1

Dawid .T
Dawid .T

Reputation: 104

I think that I've achieved what you want by changing the width of .chBorder to auto and adding to it flex-grow: 1.

If you want the "cards" with no data to shrink completely you should add to their border: flex-grow: 0 flex-shrink: 1

.meter-block-container {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  align-content: stretch;
  justify-content: flex-start;
  height: 100%;
  width: 100%;
  background-color:lightblue;
}

.chBorder {
  height:100%;
  width:auto;
  margin: 0.5%;
  border-radius: 1%;
  flex-grow: 1;
}
.ch1 {
  border: solid 2px rgb(240, 240, 1);
  flex-grow: 0;
  flex-shrink:1;
}
.ch2 {
  border: solid 2px green;
}
.ch3 {
  border: solid 2px blue;
}
.ch4 {
  border: solid 2px purple;
}

.chTopBar{
  margin: -0.1%;
  border-radius: 1%;
  display: flex;
  flex-direction: row;
  height: 40px;
}

.chHL1{
  background-color: rgb(240, 240, 1);
}
.chHL2{
  background-color: green;
}
.chHL3{
  background-color: blue;
}
.chHL4{
  background-color: purple;
}

.OnOff{
  float: right;
  margin-top: 0.1%;
  margin-right: 0.1%;
  size: 16px;;
}

label.ChNumber{
  color: white;
  border-radius: 2% 0% 0% 0%;
  margin-top:-0.1%;
  margin-left:-0.1%;
  padding: 0.5% 5% 2% 5%;
  font-size: 1.5vw;
}

.measurement{
  background-color: darkblue;
  color: white;
  display: grid;
  grid-template-columns: auto auto;
  margin-top: 2%;
  padding: 1% 0%;
  width: 100%;
}

.measurementValue{
  text-align: right;
  font-size: 50px;
}
.mea
<div class="meter-block-container">
 

  <div class="chBorder ch1">
    <div class="chTopBar chHL1">
      <div>
        <label class="ChNumber chHL1">1</label>
      </div>
    </div>
    
    
    <div class="measurement">
<!--       <div class="measurementValue">
        6.000
      </div>
      <div class="measurementUnit">
        V
      </div>
      <div class="measurementValue">
        6.000
      </div>
      <div class="measurementUnit">
        A
      </div>
      <div class="measurementValue">
        6.000
      </div>
      <div class="measurementUnit">
        W
      </div> -->
    </div>
  
<!--     <div class="vandcSettings">
      <div>
        <label>Voltage Setting</label><br>
        <input style="text-align:left;" size="8" value="50">
        <span >V</span>
      </div>
      <div>
        <label>Voltage Range</label><br>
        <select>
          <option value="0">5 V</option>
          <option value="1">10 V</option>
          <option value="2">15 V</option>
          </select>
      </div>
      <div>
        <label>Current Limit</label><br>
        <input style="text-align:left;" size="8" value="50">
        <span >A</span>
      </div>
      <div>
        <label>Current Range</label><br>
        <select>
          <option value="0">5 V</option>
          <option value="1">10 V</option>
          <option value="2">15 V</option>
        </select>
      </div>
    </div>
    <div class="ohterSettings">
      <div style="padding-bottom: 2%;">
        <input type="checkbox">
        <label>OVP Limit</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <input style="text-align:left;" size="8" value="50">
            <span >V</span>
          </div>
        </div>
      </div>
      <div>
        <input type="checkbox">
        <label>OCP</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <label>OVP Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
          <div>
            <label>OVP Delay Start</label><br>
            <select>
              <option value="0">CC Transition</option>
              <option value="1">Setting Change</option>
            </select>
          </div>
        </div>
      </div>
      <div style="background-color: grey;">
        <input type="checkbox">
        <label>Coupling</label><br>
        <div class="twoColumnSetting">
          <div class="column1Setting">
            <label>On Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
          <div>
            <label>Off Delay</label><br>
            <input style="text-align:left;" size="8" value="50">
            <span >S</span>
          </div>
        </div>
      </div>
    </div> -->
No Data
  </div>
  <div class="chBorder ch2">
      <div class="chTopBar chHL2">
          <label class="ChNumber chHL2">2</label>
      </div>
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>   
  
  <div class="chBorder ch3">
      <div class="chTopBar chHL3">
        <label class="ChNumber chHL3">3</label>
      </div>
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>
  <div class="chBorder ch4">
      <div class="chTopBar chHL4">
          <label class="ChNumber chHL4">4</label>
      </div> 
      <div class="measurement">
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            V
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            A
          </div>
          <div class="measurementValue">
            6.000
          </div>
          <div class="measurementUnit">
            W
          </div>
        </div>
  </div>
</div>

Upvotes: 1

Related Questions