2015-08-28 102 views
1

看来,选择器之前和之后用于创建3个跨度元素。这个菜单图标是如何用CSS创建的?

令人困惑的部分是,html中只有一个实际的跨度。另外两个跨度是如何创建的。

这是HTML/CSS。

HTML

<a class='mobile_menu_icon'> 
    <span></span> 
</a> 

CSS

.mobile_menu_icon span { 
    position: absolute; 
    display: block; 
    width: 32px; 
    height: 4px; 
    background-color: #000000; 
} 
.mobile_menu_icon { 
    position: relative; 
    top: 10px; 
    display: block; 
    height: 32px; 
    width: 32px; 
} 

.mobile_menu_icon span:before { 
    -webkit-transform: translateY(-250%); 
    transform: translateY(-250%); 
} 
.mobile_menu_icon span:before { 
    position: absolute; 
    left: 0px; 
    width: 100%; 
    height: 100%; 
    background: #000000; 
    content: ''; 
    -webkit-transition: -webkit-transform 0.3s; 
    transition: transform 0.3s; 
    top: 0; 
} 
.mobile_menu_icon span:after { 
    -webkit-transform: translateY(250%); 
    transform: translateY(250%); 
} 
.mobile_menu_icon span:after { 
    position: absolute; 
    left: 0px; 
    width: 100%; 
    height: 100%; 
    background: #000000; 
    content: ''; 
    -webkit-transition: -webkit-transform 0.3s; 
    transition: transform 0.3s; 
    top: 0; 
} 
+0

它现在是用CSS呈现菜单图标的不错选择。使用图标代替:) –

+0

如果仔细观察,第一行是“:: before”,第二行是“”本身,最后一行是“:: after”。 – vivekkupadhyay

+1

它是用伪元素创建的https://css-tricks.com/almanac/selectors/a/after-and-before/ – GOB

回答

0

:after:before创建pseduo元素这是有针对性的孩子元件。

它们是由CSS创建的,并且以这种方式是唯一的。

您应该可以在其父元素下的DOM中看到它们,如:after:before

1

虽然你有一个在HTML中提到的,你已经添加:前:在你的CSS后。

所以,其他2行(之前和之后)通过CSS添加。用:前和:后

伪元素(:之前),它允许你插入内容到从CSS页面(无需重写是在HTML)

请参阅本作的详细信息:https://css-tricks.com/almanac/selectors/a/after-and-before/

--------------------------更多内容------------------- ------

插入的内容在页面的源代码中不可见。它仅在CSS中可见。 另外,插入的元素默认为内联元素(或者,在HTML5中,属于文本级语义类别)。因此,要给插入的元素一个高度,填充,边距等,通常必须将其明确定义为块级元素。

参见本:http://www.smashingmagazine.com/2011/07/learning-to-use-the-before-and-after-pseudo-elements-in-css/#characteristics-of-inserted-content

+0

编辑我的答案... –

+0

没有子元素。所有是伪元素。如果您从css中删除内容:“”,它们将不会出现。 –

+0

一般来说,如果你在他们之前或之后添加它,他们不能是这个的孩子......因为它是独立添加的,但是参考 ......也许伪元素更合适......但是这个是有争议的。 –

0

在firbug检查元素,你会看到伪类,它是:after :before这是负责创建其他两个lines.you可以在这里阅读pseudo classess 顶线由

创建
.mobile_menu_icon span:before { 
    position: absolute; 
    left: 0px; 
    width: 100%; 
    height: 100%; 
    background: #000000; 
    content: ''; 
    -webkit-transition: -webkit-transform 0.3s; 
    transition: transform 0.3s; 
    top: 0; 
} 

的bottome线由

.mobile_menu_icon span:after { 
    position: absolute; 
    left: 0px; 
    width: 100%; 
    height: 100%; 
    background: #000000; 
    content: ''; 
    -webkit-transition: -webkit-transform 0.3s; 
    transition: transform 0.3s; 
    top: 0; 
} 
1

在FAC创建t在HTML和DOM中只有一个范围。但是:在之后:在之前通过css创建伪元素。

但是你拨弄的CSS有一些事情,没有多大意义:

  • “.mobile_menu_icon跨度”“.mobile_menu_icon”得到相同的元素。
  • 和选择器“.mobile_menu_icon跨度:之前”“.mobile_menu_icon跨度:”“之后重复。

我已经创建了小提琴的叉子您的示例的简化: http://jsfiddle.net/rk52ke5q/2/

.mobile_menu_icon span { 
    display: block; 
    width: 32px; 
    height: 4px; 
    background-color: #000000; 
    position: relative; 
    top: 10px; 
} 

.mobile_menu_icon span:before { 
    transform: translateY(-250%); 
    position: absolute; 
    width: 100%; 
    height: 100%; 
    background: #000000; 
    content: ''; 
} 

.mobile_menu_icon span:after { 
    transform: translateY(250%); 
    position: absolute; 
    width: 100%; 
    height: 100%; 
    background: #000000; 
    content: ''; 
} 

注意,之后选择具有

width: 100%; 
height: 100%; 

之前这意味着他们将具有完全相同的“真实”元素(跨度)大小。最后一招是

transform: translateY(250%); 

这会将您的“伪跨度”向下移动。

如果添加了“悬停”在选择,你会看到当你通过鼠标魔术发生通过“真正的”跨度:http://jsfiddle.net/pnt7uez1/1/

+0

它们没有“类型”,因为它们只是由CSS添加的自定义内容,并不在DOM中真正存在。 – fabriciorissetto

+0

由于您可以在像content这样的内容中只添加“caracters”,您的文本在这里“;'也许它们只是DOM中的一个”普通字符串“。我不知道。如果你是一个勇敢的人,你可以进一步尝试调试[webkit](https://www.webkit.org/building/debug.html)并告诉我们它的行为如何:P – fabriciorissetto

+0

你也可以提供图像到伪元素的'content'属性:'content:url(path/to/img.png);'或者简单地为'content'使用一个空字符串并提供'background-image'。 –