Search code examples
htmlcsscss-shapes

Make plus symbol in CSS


I have the below CSS code which gives the + symbol but not matches the design basically it needs to be thin. See snippet and codpen

.plus {
  position:relative;
  border: 1px dotted white;
  width: 3px;
  height: 3px;
  background-color: black;
  box-sizing: border-box;
  transform: scale(11);
}
<div class="plus"></div>

Should Look like the below symbol: Plus symbol in CSS

Any other styling is also fine for me but should look like the snapshot.


Solution

  • Here is a new and better solution with less of code based on my article: https://css-tip.com/css-plus-symbol/. It requires only one gradient to draw the shape.

    .plus {
      --b: 4px; /* the thickness */
      width: 40px; /* the size */
      aspect-ratio: 1;
      border: 10px solid #000; /* the outer space */
      background:
        conic-gradient(from 90deg at var(--b) var(--b),#000 90deg,#fff 0) 
        calc(100% + var(--b)/2) calc(100% + var(--b)/2)/
        calc(50%  + var(--b))   calc(50%  + var(--b));
      display: inline-block;
    }
    
    .alt {
      border: none;
      margin: 10px;
      background:
        conic-gradient(from 90deg at var(--b) var(--b),#fff 90deg,#000 0) 
        calc(100% + var(--b)/2) calc(100% + var(--b)/2)/
        calc(50%  + var(--b))   calc(50%  + var(--b));
    }
    .radius {
      border-radius: 50%;
    }
    <div class="plus">
    </div>
    
    <div class="plus alt">
    </div>
    
    <div class="plus radius">
    </div>


    Old answer

    Use multiple background like below:

    .plus {
      display:inline-block;
      width:50px;
      height:50px;
      
      background:
        linear-gradient(#fff 0 0),
        linear-gradient(#fff 0 0),
        #000;
      background-position:center;
      background-size: 50% 2px,2px 50%; /*thickness = 2px, length = 50% (25px)*/
      background-repeat:no-repeat;
    }
    
    .alt {
      background:
        linear-gradient(#000 0 0),
        linear-gradient(#000 0 0);
      background-position:center;
      background-size: 50% 2px,2px 50%; /*thickness = 2px, length = 50% (25px)*/
      background-repeat:no-repeat;
    }
    .radius {
      border-radius:50%;
    }
    <div class="plus">
    </div>
    
    <div class="plus alt">
    </div>
    
    <div class="plus radius">
    </div>

    plus sign CSS

    And here is with transparency:

    .plus {
      width:50px;
      height:50px;
      display:inline-block;
      
      background:
        linear-gradient(#000 0 0) top left,
        linear-gradient(#000 0 0) top right,
        linear-gradient(#000 0 0) bottom left,
        linear-gradient(#000 0 0) bottom right;
      background-size: calc(50% - 1px) calc(50% - 1px); /*thickness = 2px (2*1px) */
      background-repeat:no-repeat;
      border:10px solid #000; /*length = 30px (50px - 2x10px) */
      box-sizing:border-box;
    }
    
    .radius {
      border-radius:50%;
    }
    
    body {
     background:pink;
    }
    <div class="plus">
    </div>
    
    <div class="plus radius">
    </div>

    plus symbol with CSS

    We can add CSS variable to easily control the overal shape:

    .plus {
      --t:2px;   /* Thickness */
      --l:40px;  /* size of the symbol */
      --s:10px;  /* space around the symbol */
      --c1:#fff; /* Plus color*/
      --c2:#000; /* background color*/
    
      display:inline-block;
      width:var(--l);
      height:var(--l);
      padding:var(--s);
      box-sizing:border-box; /*Remove this if you don't want space to be included in the size*/
      
      background:
        linear-gradient(var(--c1) 0 0) content-box,
        linear-gradient(var(--c1) 0 0) content-box,
        var(--c2);
      background-position:center;
      background-size: 100% var(--t),var(--t) 100%;
      background-repeat:no-repeat;
    }
    
    .radius {
      border-radius:50%;
    }
    <div class="plus"></div>
    <div class="plus" style="--l:35px;--t:3px;--c2:green"></div>
    <div class="plus" style="--l:50px;--t:1px;--s:5px;--c1:red;"></div>
    <div class="plus" style="--l:35px;--t:5px;--s:0px;--c1:blue;--c2:orange;"></div>
    
    <br>
    <div class="plus radius"></div>
    <div class="plus radius" style="--l:35px;--t:3px;--c2:green"></div>
    <div class="plus radius" style="--l:50px;--t:1px;--s:5px;--c1:red;"></div>
    <div class="plus radius" style="--l:35px;--t:5px;--s:0px;--c1:blue;--c2:orange;"></div>

    plus sign with CSS