내 탐색 모음에서 목록 항목의 전체 영역을 링크로 클릭 할 수 있도록하려면 어떻게합니까?


95

정렬되지 않은 목록으로 만든 가로 탐색 모음이 있고 각 목록 항목에는보기 좋게 보이도록 많은 패딩이 있지만 링크로 작동하는 유일한 영역은 텍스트 자체입니다. 사용자가 목록 항목의 아무 곳이나 클릭하여 링크를 활성화하도록하려면 어떻게해야합니까?

#nav {
  background-color: #181818;
  margin: 0px;
  overflow: hidden;
}

#nav img {
  float: left;
  padding: 5px 10px;
  margin-top: auto;
  margin-bottom: auto;
  vertical-align: bottom;
}

#nav ul {
  list-style-type: none;
  margin: 0px;
  background-color: #181818;
  float: left;
}

#nav li {
  display: block;
  float: left;
  padding: 25px 10px;
}

#nav li:hover {
  background-color: #785442;
}

#nav a {
  color: white;
  font-family: Helvetica, Arial, sans-serif;
  text-decoration: none;
}
<div id="nav">
  <img src="/images/renderedicon.png" alt="Icon" height="57" width="57" />
  <ul>
    <li><a href="#">One1</a></li>
    <li><a href="#">Two</a></li>
    <li><a href="#">Three</a></li>
    <li><a href="#">Four</a></li>
  </ul>
</div>
<div>
  <h2>Heading</h2>
</div>

답변:


109

'li'항목에 패딩을 넣지 마십시오. 대신 앵커 태그를 설정하고 display:inline-block;패딩을 적용하십시오.


display: inline; zoom: 1;IE6와 IE7을위한 조건부 주석으로 대체 할 display: inline-block;예 불구하고, 목록 항목이 이미 떠 경우, display: block;도 확인을 할 것이다
FelipeAls

그것은 단 하나의 불만으로 잘 작동했지만 : after 선택자와 함께 작동하지 않는 것 같습니다. >링크 텍스트 뒤에 기호를 표시 하고 싶었지만 내용에 넣지 않았습니다. 결국 내용에 넣었습니다. 그것을 달성하는 더 좋은 방법이 있는지 궁금 할 것입니다.
counterbeing

46

앵커 태그 css 속성을 다음과 같이 정의합니다.

{display:block}

그러면 앵커가 전체 목록 영역을 차지하므로 목록 옆의 빈 공간에서 클릭이 작동합니다.


1
이 답변을 답변 목록 상단으로 드래그 할 수 있기를 바랍니다.이 문제에 대한 최상의 솔루션입니다 !!!!
Rishabh

1
li아이콘과 같이 에 다른 것이 있으면 줄을 끊습니다 .
Gringo Suave

13

앵커 태그에 li. 이렇게하면 모든 영역을 차지합니다.


3
또한 더 나은 브라우저 지원을 위해 hover 상태를 li에서 앵커로 이동하는 것이 좋습니다.
NinjaBomb

10

이 파티에 매우 늦었지만 어쨌든 앵커를 플렉스 아이템으로 스타일링 할 수도 있습니다. 이는 동적으로 크기가 조정되거나 정렬 된 목록 항목에 특히 유용합니다.

a {
  /* This flexbox code stretches the link's clickable 
   * area to fit its parent block. */
  display:        flex;
  flex-grow:      1;
  flex-shrink:    1;
  justify-content: center;
}

(주의 : 플렉스 박스는 여전히 잘 지원되지 않는 obv입니다. 자동 접두사를 구출하세요!)


하지만 지금 (몇 년 후), flex는 잘 작동하기 때문에 ul및 flexbox로 메뉴를 만들 때 가장 좋은 답이라고 생각합니다 .
Ludovic Kuty

10

다음을 사용하십시오.

a {
  display: list-item;
  list-style-type: none;
}

6

또는 jQuery를 사용할 수 있습니다.

$("li").click(function(){
   window.location=$(this).find("a").attr("href"); 
   return false;
});

3
이 솔루션은 'css로 쉽게 할 수 있기 때문에 필요하지 않은 더러운 jquery 솔루션'이라고 말할 수 있습니다. 그러나 솔직히 말해서-때때로 당신은 자신이 아닌 코드로 작업하는 상황에 처해 있으며 모든 DOM 구조와 CSS 스타일 시트를 알 수있는 시간이 없습니다 (그리고 '코더가 생각하는 것'를 이해하려고 노력할 시간이 없습니다). 그래서 +1.
lemoid

@lemoid에 동의합니다. "예쁜"솔루션이 실제 생활에서 항상 실용적인 것은 아니라는 점을 기억해야합니다.
UncaAlby

당신을 정말 사랑합니다!!
Castiblanco

1

이 CSS 속성과 값을 다음에서 사용해야합니다 li.

pointer-events:all;

따라서 jQuery 또는 JavaScript로 링크를 처리하거나 a태그를 사용할 수 있지만 내부의 다른 모든 태그 요소 li에는 CSS 속성이 있어야합니다.

pointer-events:none;

0

아래 CSS를 적용하기 만하면됩니다.

<style>
  #nav ul li {
    display: inline;
  }

  #nav ul li a {
    background: #fff;// custom background
    padding: 5px 10px;
  }
</style>

0

여기 내가 한 방법입니다

만들기 <a> 인라인 블록과에서 패딩을 제거하여<li>

그런 다음의 width와 함께 재생할 수 있습니다 height.<a> 에서<li>

를 붙이 width100% 시작으로 어떻게 작동하는지 볼

추신 :- height및 변경시 Chrome 개발자 도구의 도움을 받으십시오.width


-1

항상 hiperlink 태그로 전체 태그 li을 래핑 할 수 있습니다. 여기 내 솔루션이 있습니다.

#nav {
  background-color: #181818;
  margin: 0px;
  overflow: hidden;
}

#nav img {
  float: left;
  padding: 5px 10px;
  margin-top: auto;
  margin-bottom: auto;
  vertical-align: bottom;
}

#nav ul {
  list-style-type: none;
  margin: 0px;
  background-color: #181818;
  float: left;
}

#nav li {
  display: block;
  text-align: center;
  float: left;
  width: 40px;
  padding: 25px 10px;
}

#nav li:hover {
  background-color: #785442;
}

#nav a {
  color: white;
  font-family: Helvetica, Arial, sans-serif;
  text-decoration: none;
}
<div id="nav">
  <img src="/images/renderedicon.png" alt="Icon" height="57" width="57" />
  <ul>
    <a href="#"><li>One1</li></a>
    <a href="#"><li>Two</li></a>
    <a href="#"><li>Three</li></a>
    <a href="#"><li>Four</li></a>
  </ul>
</div>
<div>
  <h2>Heading</h2>
</div>


다른을 downvoted 대답에서 댓글을 훔치는 : ".이 작동하지만 구문 적으로 무효"
topskip

-2

반대로 목록 항목을 하이퍼 링크 안에 넣습니다.

예를 들어 코드를 사용하면 다음과 같습니다.

<a href="#"><li>One</li></a>

@DannyBeckett HTML5에서 유효합니다.
Tek


맞아요, 앵커 안에 허용되는 블록 요소를 생각하고 있었지만 ul 자식이 규칙의 예외 중 하나라는 것을 몰랐습니다. w3.org/html/wg/drafts/html/master/… 신속한 수정에 감사드립니다.
Tek

오 안돼 안돼 ... 구문과 의미 마크 업이 방금 창 밖으로 나갔다. 다시는 이런 일을하지 마십시오. 웹을 끔찍한 곳으로 만듭니다.
Teodor Sandu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.