qcoder
qcoder

Reputation: 51

How to display text above arrows which are between div boxes

Question:

I have div boxes lined side by side with arrows pointing. I want to write content above the arrow using html css. How can I do that?

    #border {
      height: 80px;
      width: 10%;
      border: 1px black solid;
      display: inline-block;
    }
    
    #borders {
      height: 80px;
      width: 10%;
      border: 1px black solid;
      display: inline-block;
    }
    
    #borderss {
      height: 80px;
      width: 10%;
      border: 1px black solid;
      display: inline-block;
    }
    
    #bordersss {
      height: 80px;
      width: 10%;
      border: 1px black solid;
      display: inline-block;
    }
    .arrow {
    font-size: 105px;
    color: red;
    width:115%
    }
    <div id="border"></div><span class="arrow">&#8594;</span>
    <div id="borders"></div>
    <span class="arrow">&#8594;</span>
    <div id="borderss"></div>
    <span class="arrow">&#8594;</span>
    <div id="bordersss">
    </div>

Codepen link: https://codepen.io/acqafqe/pen/yLEJgVv

Upvotes: 0

Views: 419

Answers (4)

Jon P
Jon P

Reputation: 19797

You'd be better off moving the "Arrow" to CSS and just keeping your text in HTML.

#main-content {
  display: flex;
  flex-direction: row;
  align-items: center;
  padding-top: 50px;
}

.border {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

#borders {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

#borderss {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

.bordersss {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

.seperator {
  display: flex;
  flex-direction: column;
  align-items: center;
  height: 80px;
  padding-top: 20px;
}

.seperator::after {
  content: "\2192";
  display: inline-block;
  font-size: 105px;
  color: red;
  width: 100px;
  margin-top: -60px;
}
<div id="main-content">

  <div class="border"></div>
  <div class="seperator">
    <span>text</span>
  </div>

  <div class="border"></div>

  <div class="seperator">
    <span>text</span>
  </div>

  <div class="border"></div>

  <div class="seperator">
    <span>text</span>
  </div>

  <div class="border">
  </div>
</div>

Upvotes: 0

Bryan Carrera
Bryan Carrera

Reputation: 36

I did it adding flex-layout and some additional styles:

Presentation

View Preview

    #main-content {
      display: flex;
      flex-direction: row;
      align-items: center;
    }


    #border {
      height: 80px;
      width: 10%;
      border: 1px black solid;
      display: inline-block;
    }

    #borders {
      height: 80px;
      width: 10%;
      border: 1px black solid;
      display: inline-block;
    }

    #borderss {
      height: 80px;
      width: 10%;
      border: 1px black solid;
      display: inline-block;
    }

    #bordersss {
      height: 80px;
      width: 10%;
      border: 1px black solid;
      display: inline-block;
    }
    .arrow {
      font-size: 105px;
      color: red;
      width:100px;
      margin-top: -60px;
    }

    .arrow-flex {
      display: flex;
      flex-direction: column;
      align-items: center;
      padding-top: 50px;
    }
    <div id="main-content">

        <div id="border"></div>
        <div class="arrow-flex">
          <span>text</span>
          <span class="arrow">&#8594;</span>
        </div>
  
        <div id="borders"></div>
  
        <div class="arrow-flex">
          <span>text</span>
          <span class="arrow">&#8594;</span>
        </div>
  
        <div id="borderss"></div>
  
        <div class="arrow-flex">
          <span>text</span>
          <span class="arrow">&#8594;</span>
        </div>  
    
        <div id="bordersss">
        </div>
    </div>

Upvotes: 2

Kiandokht
Kiandokht

Reputation: 43

You can use flexbox and play with them:

#border {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

#borders {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

#borderss {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

#bordersss {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}
.arrow {
font-size: 105px;
color: red;
width:115%
}
.arrowTitle {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}
#wrapper{
  display: flex; 
  align-items: center;
}
<div id='wrapper'>
<div class="arrowTitle">
  <span>title1</span>
  <span class="arrow">&#8594;</span>
</div>
<div id="borders"></div>
<div class="arrowTitle">
  <span>title2</span>
  <span class="arrow">&#8594;</span>
</div>
<div id="borderss"></div>
<div class="arrowTitle">
    <span>title3</span>
  <span class="arrow">&#8594;</span>
</div>
<div id="bordersss">
</div>
</div>

If you're not familiar with flexbox you can check here.

Upvotes: 2

ChanHyeok-Im
ChanHyeok-Im

Reputation: 551

You can set a :before attribute to .arrow selector.

https://developer.mozilla.org/en-US/docs/Web/CSS/::before

#border {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

#borders {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

#borderss {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

#bordersss {
  height: 80px;
  width: 10%;
  border: 1px black solid;
  display: inline-block;
}

.arrow {
  font-size: 105px;
  color: red;
  width:115%;
  position: relative;
}

.arrow:before {
  content: 'test';
  font-size: 14px;
  position: absolute;
  top: 20%;
}
<div id="border"></div><span class="arrow">&#8594;</span>
<div id="borders"></div>
<span class="arrow">&#8594;</span>
<div id="borderss"></div>
<span class="arrow">&#8594;</span>
<div id="bordersss">
</div>

Upvotes: 1

Related Questions