总结/概括

是否可以在一个HTML <a>元素中包含一个全宽(显示:块)可单击的超链接HTML元素,该元素具有唯一的定位sprite背景图像类?

enter image description here




Background

目前,我有一个精心制作的HTML菜单,每个超链接都有自己独特的图标精灵背景位置.

精灵图标每个都有自己独特的类,该类添加在默认的menu类之上,该类包含背景url和总体布局.所有图标大小完全相同,13 x 13像素.每个超链接都有一个完整的with using display:block.鼠标悬停必须在块宽度悬停后立即激活,以便短文本或长文本超链接获得相等的全宽悬停 colored颜色 .

精灵CSS

.home  {background-position:0 -13px}
.about {background-position:0 -1638px}
.ethos {background-position:0 -2944px}
.etcet {background-position:0 -5611px}

通用CSS

li a{
    display: block;
    line-height: 2em;
    color: black;
    padding: 10px 1em 10px 2em;
    }

.menu{
    display: inline-block;
    background: url(icons.png) no-repeat;
    width: 13px; height: 13px;
    vertical-align: middle;
    margin: -2px 15px 0px -29px;
}

目前,以下不希望出现的臃肿HTML标记可以正常工作...

Undesired: Bloated HTML

<li>
   <a href="/home">
      <p class="menu home"></p> Home
   </a>
</li>

... 但我想知道是否有可能将其(在不损失任何基本功能的情况下)减少到绝对最小的HTML:

Desired: Minimal HTML

<a href="/home" class="home">Home</a>

新CSS

a{
    position: relative;
    padding: 0 0 0 1em;
}

a:before{
    content:'';
    position: absolute;
    background-image: url(icons.png);
    background-repeat: no-repeat;   
    top: .75em;
    left: 2px;
    height: 13px;
    width: 13px;
}

Stuck setting the unique background-position

我try 了a:before{}种解决方法,虽然背景图标框相对于超链接的位置很好,并且全宽鼠标悬停也很有效,但精灵本身都是从背景图像的x=0 y=0的初始起始轴开始的!

enter image description here

换句话说,所有精灵图标都取自精灵背景png文件的第一块.当使用a:before{}时,background-position似乎没有使用唯一的单独类名.

如果我将背景图像从a:before{}移到a{},则布局完全无法修复.

总之,有没有一种方法可以让一个元素的HTML与超链接上的精灵一起工作,只使用a:before{}个元素,而不需要任何额外的无意义的HTML元素,如<spans><p>,并实现精灵定位的所有基本要素和完全的块悬停性?

非常感谢您的帮助!

推荐答案

You need to add pseudo-class to your customization classes. I've added an image how it works. It's explains more better, than hundreds of words. sprite image

.home::before {
  background-position: 0 0px;
}
.about::before {
  background-position: 0 -13px;
}
.ethos::before {
  background-position: 0 -26px;
}

此外,如果你有一个简单的菜单,删除ulli个标签,并将所有链接包装在nav个标签中.

<nav role="menu" aria-labelledby="navigation menu">
  <a href="/home" class="home">Home</a>
  <a href="/about" class="about">About</a>
  <a href="/ethos" class="ethos">Ethos</a>
</nav>

nav {
  display: inline-flex;
  flex-flow: column;
}

a {
  position: relative;
  padding: 0 1.3rem;
  text-decoration: none;
  transition: all 0.3s ease-in-out;
}

a:before {
  content: '';
  position: absolute;
  background-image: url('https://i.ibb.co/M7008LV/sprite.png');
  background-repeat: no-repeat;
  top: 50%;
  left: 2px;
  height: 13px;
  width: 15px;
  transform: translateY(-50%);
}

.home::before {
  background-position: 0 0px;
}

.about::before {
  background-position: 0 -13px;
}

.ethos::before {
  background-position: 0 -26px;
}

a:hover {
  background-color: #ffd73d;
}
<nav role="menu" aria-labelledby="navigation menu">
  <a href="/home" class="home">Home</a>
  <a href="/about" class="about">About</a>
  <a href="/ethos" class="ethos">Ethos</a>
</nav>

Html相关问答推荐

Rmarkdown上的垂直标签集

你能让Cypress测试为p—fileUpload做文件上传吗?

连续的相同 colored颜色 单元格应位于同一列、网格框中

正文不能填满浏览器100%的高度

创建带有弯曲边框的水平时间线

按钮之间的HTML文本居中不正确

一切停止工作后,添加不透明度(在tailwind )

默认情况下使用Disbale Scroll,但在单击图标后将其激活

如何使链接组件内的内容不重新路由Next.js13

为什么字体大小而不是 colored颜色 属性适用于元素?

根据Tailwind CSS中的子计数而非子宽度进行对齐,并水平对齐

HTML,CSS-阻止按钮在单击时向上移动

如何使用 Tailwind CSS 分隔导航栏中的元素?

理解图像与其内容框之间的关系

在 CSS 中的 div 中获取文本以环绕其他文本?

a with