How to increase width of underline for the multiline text when on hover

Question

Fellow brothers in code,

I am trying to achieve custom text-decoration: underline; effect for the multiline text between <p> tags. Similar to one, showed in the picture below.

enter image description here

Would you mind to share some ideas or solutions for this problem. Do you think it is possible to achieve result with only CSS using :before :after or is it a case for JS to come in hand?

Many thanks for all possible help. Will be looking forward.


Show source
| javascript   | jquery   | html   | css   2017-08-08 21:08 6 Answers

Answers to How to increase width of underline for the multiline text when on hover ( 6 )

  1. 2017-08-08 21:08

    You can use box-shadow for your case like this:

    .custom-underline {
        font-size:200%;
        font-weight:bold;
        margin: 0;
        display: inline-block;
    }
    .custom-underline:hover {
        box-shadow: inset 0 -15px 0 violet, inset 0 -3px 0 black
    }
    <p class='custom-underline'>Let the paint work</p>
    <br>
    <p class='custom-underline'>Share it with a friend</p>
    <br>
    <p class='custom-underline'>Just float around and be there</p>

  2. 2017-08-08 21:08

    Not sure if you can inject a span into the paragraph. If you can, it is simple enough by setting the bottom border.

    p:hover > span {
      border-bottom: 5px solid black
    }
    <p><span>Bacon ipsum dolor amet sausage ribeye pastrami, chuck sirloin filet mignon pancetta tail boudin ground round flank pork t-bone turducken. Venison boudin cupim bresaola corned beef meatball pork loin pancetta doner drumstick. Bresaola pork loin fatback pig turkey. Biltong bresaola shoulder cow shankle pork belly brisket ham hock chuck. Meatball drumstick salami pork loin.</span></p>

  3. 2017-08-08 21:08

    After doing a bit of research it seems it can be done if you put a <span> inside the <p> and add a box-shadow to that. This works better than a border because the border has to be displayed below the text only. This allows the underline to intersect the text. This is an added element, but it doesn't require that you break up everything in it's own <p> element.

    .underline{
      max-width: 240px;
      font-family: sans-serif;
      font-size: 20px;
    }
    
    .underline:hover span{
      box-shadow: inset 0 -10px lightblue;
    }
      <p class="underline">
        <span>Pick some apples.<br>
        Make some juice. with more text so long that it wraps.<br>
        ????<br>
        Profit!
        </span>
      </p>

  4. 2017-08-08 21:08

    Is this what you're looking for?

    I used the :after pseudo-element and gave it absolute position

    Te render the effect I added a bottom-border to the pseudo-element and lift it up a little bit with a -.35em top which result in it always adjusting to the main element's font-size.

    Working example:

    p span {
      display:inline;
      position: relative;
      font-size: 30px;
      font-weight: 500;
      color: #27196e;
    }
    
    p:hover span:after {
      content: "";
      position: absolute;
      height:100%;
      width:100%;
      top: -.35em;
      left: 0;
      border-bottom: 8px solid rgba(111, 111, 255, .4)
    }
    <p>
    <span>Let the paint work</span>
    <br/>
    <span>Share it with a friend</span>
    <br/>
    <span>Just float around and be there</span>
    </p>

  5. 2017-08-08 21:08

    Wrap every phrase inside a p, like this:

    <p>
    let the paint work21321321213123321321321  213 
    </p>
    <p>
    let the paint work   
    </p>
    <p>
    let the paint work   
    </p>
    

    css

    p {
        height: auto;
        position: relative;
        width: 200px;
        }
    
     p::before {
            content: '';
            display: block;
            position: absolute;
            bottom: 0;
            width: 130%;
            left: 0%;
            border-bottom: 1px solid red;
        }
    
  6. 2017-08-08 21:08

    You can use a repeating linear gradient, and set display: inline on the paragraph to draw the lines only under the text:

    p {
      display: inline;
      font-size: 20px;
      line-height: 28px;
      background: repeating-linear-gradient(to bottom, transparent, transparent 14px, rgba(128, 0, 128, 0.5) 14px, rgba(128, 0, 128, 0.5) 22px);
    }
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc imperdiet elementum purus sed fermentum. Aliquam vehicula vel leo ut ullamcorper. <br /> Aenean condimentum justo massa, et eleifend quam elementum at. Mauris vulputate quam ut velit mattis, at pretium
      ex faucibus. Nulla facilisi. <br /> Quisque condimentum sapien ut diam lacinia, non commodo turpis faucibus. Ut in nisl nec magna lobortis tristique ac vitae ante. Cras egestas felis nec tortor varius rhoncus. Phasellus sagittis eget dolor ut condimentum.</p>

Leave a reply to - How to increase width of underline for the multiline text when on hover

◀ Go back