使用CSS绘制文件夹图标

时间:2013-04-06 23:01:15

标签: css

我正在尝试用CSS绘制一个简单的文件夹图标,这就是我所在的位置:

/* CSS */
.container {
  border: solid 1px #000;
  width: 100px;
  height: 100px;
  padding: 5px;
  text-align: center;
}
.folder_tab, .folder {
  margin: 0 auto;
  background-color: #708090;
}
.folder_tab {
  width: 25px;
  height: 5px;
  margin-right: 50%;
  border-radius: 5px 15px 0 0;
}
.folder {
  width: 50px;
  height: 35px;
  border-radius: 0 5px 5px 5px;
  box-shadow: 1px 1px 0 1px #CCCCCC;
}

<!-- HTML -->
<div class="container">
  <div class="folder_tab"></div>
  <div class="folder"></div>
  text
</div>

结果:enter image description here

有更简单,更优雅的方法吗?

3 个答案:

答案 0 :(得分:7)

如果您想使用CSS3,这是我的解决方案。

<强> HTML

<div class="folder"></div>

<强> CSS

.folder {
    width: 150px;
    height: 105px;
    margin: 0 auto;
    margin-top: 50px;
    position: relative;
    background-color: #708090;
    border-radius: 0 6px 6px 6px;
    box-shadow: 4px 4px 7px rgba(0, 0, 0, 0.59);
}

.folder:before {
    content: '';
    width: 50%;
    height: 12px;
    border-radius: 0 20px 0 0;
    background-color: #708090;
    position: absolute;
    top: -12px;
    left: 0px;
}

DEMO (在Chrome中测试)

答案 1 :(得分:2)

这是我的解决方案:

http://jsfiddle.net/wQdgs/

HTML

<div>text</div>

CSS

div {
    width: 100px;
    height: 50px;
    padding-top: 50px;
    border: solid 1px #000;
    position: relative;
    text-align: center;
}

div:after {
    content: " ";
    width: 50px;
    height: 35px;
    border-radius: 0 5px 5px 5px;
    box-shadow: 1px 1px 0 1px #CCCCCC;
    display: block;
    background-color: #708090;
    position: absolute;
    top: 15px;
    left: 25px;    
}

div:before {
    content: " ";
    width: 25px;
    height: 5px;
    border-radius: 5px 15px 0 0;
    display: block;
    background-color: #708090;
    position: absolute;
    top: 10px;
    left: 25px;
}

答案 2 :(得分:1)

我知道这个帖子有点陈旧,但我通过问自己是否有一些简单的纯CSS和简约HTML来更新我使用背景图像作为图标的旧树库来反弹这个问题。

我自己尝试了,我想出了一些符合平面设计的东西,这些设计今天正在改变跨设备用户界面:

https://jsfiddle.net/landzup/Lzjadp5r/

这只是一个建议或起点,但通过尽可能放大来观看页面不会丢失单个像素的分辨率真是太棒了! (就像矢量图形一样)。

我使用了简短的HTML:

<div class="folder">
    <div class="icon"></div>
    Programming
</div>

这就是CSS:

<style type="text/css">
.folder {
    display: block;
    position: relative;
    top: 0;
    left: 0;
    margin: 18px 0;
    font: 18px helvetica, arial, sans-serif;
    text-indent: 27px;
    line-height: 34px;
}

.folder .icon {
    content: "";
    display: block;
    float: left;
    position: relative;
    top: 0;
    left: 0;
    width: 30px;
    height: 30px;
    border: 2px solid #999;
    background: #ddd;
    -moz-border-radius: 2px; -webkit-border-radius: 2px; -o-border-radius: 2px; border-radius: 2px;
    -moz-transform: scale(1) rotate(0deg) translateX(10px) skewX(10deg);
    -webkit-transform: scale(1) rotate(0deg) translateX(10px) skewX(10deg);
    -o-transform: scale(1) rotate(0deg) translateX(10px) skewX(10deg);
    -ms-transform: scale(1) rotate(0deg) translateX(10px) skewX(10deg);
    transform: scale(1) rotate(0deg) translateX(10px) skewX(10deg);
}

.folder .icon::after {
    content: "";
    display: block;
    position: relative;
    top: 7px;
    left: -6px;
    width: 30px; height: 21px;
    border: 2px solid #999;
    background: #ddd;
    -moz-border-radius: 2px; -webkit-border-radius: 2px; -o-border-radius: 2px; border-radius: 2px;
    -moz-transform: scale(1) rotate(0deg) translateX(10px) skewX(-20deg);
    -webkit-transform: scale(1) rotate(0deg) translateX(10px) skewX(-20deg);
    -o-transform: scale(1) rotate(0deg) translateX(10px) skewX(-20deg);
    -ms-transform: scale(1) rotate(0deg) translateX(10px) skewX(-20deg);
    transform: scale(1) rotate(0deg) translateX(10px) skewX(-20deg);
}
</style>

它使用CSS 3转换,因此您应该考虑目标受众以支持其浏览器。 这里有CSS转换的CSS兼容性表:

http://caniuse.com/#feat=transforms2d