使用纯CSS创建向上和向下箭头图标或按钮

时间:2014-06-10 15:44:52

标签: html css css3 css-shapes arrow-keys

我正在尝试使用纯CSS而不使用背景图像创建下面显示的“向上和向下”控制按钮。

enter image description here

但是当我在“li.className:afterli.className:before”中添加了箭头的CSS时,主框的位置就会移动。

以下是我得到的问题的小提琴> http://jsfiddle.net/8usFk/

以下是相同的代码:

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;
}

如果您需要任何其他信息,请与我们联系。

请建议。

6 个答案:

答案 0 :(得分:5)

如果您将伪设置为display:inline-block(或任何其他值,但内联。),您可以将其设置为大小。

然后,

  1. 将其居中:text-align:center放在父母身上。
  2. vertical-align它:line-height:20px(25px -5px,它是伪元素高度的一半)并将vertical-align:middle设置为伪元素:
  3. <强> 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;
    }
    

答案 1 :(得分:3)

此选项始终使箭头居中,与大小无关,并且不需要固定的值边距

JSfiddle Demo

<强> CSS

.positionCameras ul, .positionCameras li {
    margin: 0;
    padding: 0;
    list-style: none;
    display: inline-block;
    vertical-align: top; /* added */

}
.positionCameras li.cameraLeft, 
.positionCameras li.cameraIcon, 
.positionCameras li.cameraRight {
    position: relative; /* added */
    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.cameraIcon {
    cursor: default;
}
.positionCameras li.cameraLeft:before,
.positionCameras li.cameraRight:before{
    content:""; 

    /* added for positioning magic */
    position: absolute; 
    top:50%;
    left:50%;
    -webkit-transform: translate(-50%, -50%);    
    transform: translate(-50%, -50%);  
    /* end added */

    width: 0;
    height: 0;
    border-style: solid;
}

.positionCameras li.cameraLeft:before {
    border-width: 0 5px 10px 5px;
    border-color: transparent transparent #007bff transparent;
}

.positionCameras li.cameraRight:before {
    border-width: 10px 5px 0 5px;
    border-color: #007bff transparent transparent transparent;
}

答案 2 :(得分:0)

添加

vertical-align:top;

应用于div的CSS。

即。你的CSS类应该是这样的:

.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;
    vertical-align:top;
}

这样就可以了。

您可以在此处看到:http://jsfiddle.net/rhX87/

<强>更新

为图像添加以下CSS以使其正确居中:

position:relative;
bottom:11px;
left:7px;

.positionCameras li.cameraLeft:before班。

这应该使图像居中。

请在此处查看:http://jsfiddle.net/rhX87/1/

希望这有帮助!!!

答案 3 :(得分:0)

DEMO

<强> 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;
    vertical-align:top;
}
.positionCameras li.cameraLeft:before,
.positionCameras li.cameraRight:before{
    padding:5px;
    color:#007bff;
    font-size:16px;
    line-height:25px;
}
.positionCameras li.cameraLeft:before{
    content:"▼";
}
.positionCameras li.cameraRight:before{
    content:"▲";
}
.positionCameras li.cameraIcon:before{
    content:"•";
    padding:5px;
    color:#111;
    font-size:48px;
    line-height:25px;
}

答案 4 :(得分:0)

您也可以使用html character codes并按此Fiddle

执行此操作

答案 5 :(得分:0)

这是我严格的html版本。 您需要添加javascript函数&#34; incrementMyNumber()&#34;处理onclick事件。 关键是包含箭头的div的负边距。 您可能需要使用这些数字,但这在IE和Chrome中看起来很不错。

<table>
<td>
    <input type="text" id="myNumber" style="width:50px" value="5" />
</td>
<td>
    <table style="border-spacing:0px;margin-left:-2px;width:20px;">
        <tr>
            <td style="border:1px solid black;height:8px;background-color:#dcdcdc;cursor:pointer" onclick="incrementMyNumber(1)">
                <div style="margin:-5px;font-size:8px;">&#x25B2;</div>
            </td>
        </tr>
        <tr>
            <td style="border: 1px solid black; height: 8px; background-color: #dcdcdc;cursor:pointer" onclick="incrementMyNumber(-1)">
                <div style="margin:-5px;font-size:8px;">&#x25BC;</div>
            </td>
        </tr>
    </table>
</td>