Search code examples
htmlcsscss-shapesarrow-keys

Create Up and Down arrow icons or buttons using pure CSS


I am trying to create below shown "up and down" control buttons using pure CSS and no Background image.

enter image description here

But when I added the CSS for arrows in "li.className:after or li.className:before " the position of main boxes moved.

Here is the Fiddle for the issue I am getting > http://jsfiddle.net/8usFk/

Below is the Code for the same:

HTML

<div class="positionCameras">
    <ul>
        <li title="Move Up" class="cameraLeft" id="cameraUp"></li>
        <li title="Camera" class="cameraIcon"></li>
        <li title="Move Down" class="cameraRight" id="cameraDown"></li>
    </ul>
</div>

CSS

.positionCameras ul, .positionCameras li {
    margin: 0;
    padding: 0;
    list-style: none;
    display: inline-block;
}
.positionCameras li.cameraLeft, .positionCameras li.cameraIcon, .positionCameras li.cameraRight {
    width: 25px;
    height: 25px;
    cursor: pointer;
    background: #cccccc;
    margin: 5px;
    border-radius: 5px;
    border: 1px solid #aaaaaa;
    box-shadow: 1px 2px 15px #cccccc;
}
.positionCameras li.cameraLeft:before {
    content:" ";
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 0 5px 10px 5px;
    border-color: transparent transparent #007bff transparent;
}
.positionCameras li.cameraIcon {
    cursor: default;
}
.positionCameras li.cameraRight:before {
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 8.7px 5px 0 5px;
    border-color: #007bff transparent transparent transparent;
}

Let me know if you need any other information.

Please suggest.


Solution

  • If you set pseudo to display:inline-block (or any other values but inline.) you can size it.

    Then,

    1. to center it: text-align:center on parent.
    2. To vertical-align it : line-height:20px (25px -5px wich is half of the height of pseudo element) and set : vertical-align:middle to pseudo element:

    DEMO

    .positionCameras ul, .positionCameras li {
        margin: 0;
        padding: 0;
        list-style: none;
        display: inline-block;
        vertical-align:top;/* UPDATE*/
    }
    .positionCameras li.cameraLeft, .positionCameras li.cameraIcon, .positionCameras li.cameraRight {
        width: 25px;
        height: 25px;
        cursor: pointer;
        background: #cccccc;
        margin: 5px;
        border-radius: 5px;
        border: 1px solid #aaaaaa;
        box-shadow: 1px 2px 15px #cccccc;
        text-align:center;/* UPDATE*/
        line-height:20px;/* UPDATE*/
    }
    .positionCameras li.cameraLeft:before {
        content:"";
        display:inline-block;/* UPDATE*/
        width: 0;
        height: 0;
        vertical-align:middle;/* UPDATE*/
        border-style: solid;
        border-width: 0 5px 10px 5px;
        border-color: transparent transparent #007bff transparent;
    }
    .positionCameras li.cameraIcon {
        cursor: default;
    }
    .positionCameras li.cameraRight:before {
        width: 0;
        height: 0;
        border-style: solid;
        border-width: 8.7px 5px 0 5px;
        border-color: #007bff transparent transparent transparent;
    }