Альтернативы незаконным или в пределах тегов на hover?

есть ли у кого-нибудь предложение по созданию линейных пространств типа абзаца в <li> тег, который включает зависший всплывающий псевдокласс?

у меня есть <span> это всплывает на a:hover и я хочу, чтобы текст, который всплывает, был разбит на 2 абзаца. Он работает с <br> в FF, но я хочу сделать правильную вещь (теперь, когда я обнаружил, что это неправильно!)...

HTML-код:

<div id="rightlist">
  <ul>
      <li><a href="">List item
          <span>
             words words words that are "paragraph" 1 of List item
             <br><br>
             different words that make up "paragraph" 2 of List item
          </span></a></li>

css:

#rightlist {
margin-top: 10px; margin-right: 5px; width: 387px ; height: 239px ;
background-color: #7EBB11 ;
display: table-cell; 
z-index: 100 ;
    float: right ;
}

#rightlist ul {
  text-align: left;
margin: 0;
   margin-top: 6px;
font-family: sans-serif;
font-size: 20px ;
color: black ;
}

#rightlist a 
{
    display: table-cell;
text-decoration: none; color: black; 
background: #7EBB11 ; 
}

/*appearance of the <a> item (but before the <span> tag) on hover*/
#rightlist a:hover {
color: white;
}

/*appearance of the spanned content within <a></a> tags when not hovered */
/* %%%%% important - keep position:absolute in this div %%%%% */
#rightlist a span {
display: none;
position: absolute ;
margin-left: -412px;
top: -10px; left: 10px; padding: 10px ;
z-index: 100;
width: 380px; height: 222px; 
color: white;  background-color: #7EBB11;
font: 0.75em Verdana, sans-serif; font-size: 13px ; color: black;
text-align: left;
}



/*appearance of spanned content within <a> tags when hovered*/
#rightlist a:hover span {
display: table-cell ;
}

5 ответов


ваша проблема может возникнуть из-за того, что вы неправильно используете тег .

промежутки должны быть встроенными элементами, и вы стилизуете его, как если бы это был элемент блока. По общему признанию, вы можете заставить span вести себя как элемент блока, добавив правильный стиль, но это не всегда может быть соблюдено различными браузерами.

в идеале, вы должны использовать тег div. Затем вы можете использовать теги p или дополнительные теги div для указания абзацы (в идеале p, поскольку семантически они фактически являются абзацами, а не несвязанными блоками текста).


Err нет ничего плохого в том, что <br> внутри <a> или <span>. Это вполне соответствует HTML 4.01 spec.

Edit:<li> может содержать <p>, <br>, и почти все остальное.

спецификация немного трудно читать, но в основном говорит:

  • LI может содержать block или inline
  • block состоит из P + некоторые другие вещи
  • inline состоит из special + некоторые другие вещи
  • special состоит из A + BR + некоторые другие вещи

о <a> Он говорит:

  • A может содержать inline за исключением A
  • inline... см. выше

вы можете вставить еще один промежуток там как "поддельный" тег p:

  <li><a href="">List item
      <span>
         <span>words words words that are "paragraph" 1 of List item</span>
         <span>different words that make up "paragraph" 2 of List item</span>
      </span></a></li>

и в вашем css:

#rightlist span span {display:block;margin:...}

Примечание все, что вы объявите для #rightlist span будут применены к #rightlist span span, поэтому вам может потребоваться переопределить некоторые правила в #rightlist span span.


почему это "неправильно"?

ваш тег br, возможно, должен быть закодирован как:

 <br />

почему ваш текущий путь неправильный ?

вы можете попробовать это

<span>
  <p>words words words that are "paragraph" 1 of List item</p>
  <p>different words that make up "paragraph" 2 of List item</p>
</span>