버튼을 링크처럼 보이게 만드는 방법은 무엇입니까?


287

CSS를 사용하여 버튼을 링크처럼 보이게 만들어야합니다. 변경이 완료되었지만 클릭하면 마치 버튼처럼 눌린 것처럼 표시됩니다. 버튼을 클릭해도 링크로 작동하도록 제거하는 방법에 대한 아이디어가 있습니까?


4
링크상의 onclick 이벤트는 버튼처럼 간단합니다
knittl

2
@knittl, @cletus 실제로 링크와 버튼은 HTML에서 매우 다른 의미를 갖습니다. whatwg.org/specs/web-apps/current-work/multipage/… 를 읽어야 합니다 . 링크처럼 보이도록 버튼의 스타일을 지정하는 것은 좋지 않지만 UI 디자인에 따라 다르지만 대신 링크를 사용하면 HTML 사양에 위배됩니다.
Anton Strogonoff

5
링크와 같은 버튼 스타일링이 필요한 몇 가지 이유가 있습니다. (1) 버튼에는 type = "submit"이 있습니다. (2) 버튼에는 멋진 스타일이 있습니다 (예 : 가변 길이
TJ의

95
또한 링크처럼 보이더라도 버튼이되는 것이 의미 적으로 더 정확할 수도 있습니다. 예를 들어 페이지에서 무언가를 변경하는 "모두 확장 | 모두 축소"링크 쌍을 상상해보십시오. 이것을 클릭하면 동작이 발생하지만 사용자를 어디로도 이동시키지 않습니다. 의미는 버튼의 의미입니다. 그러나 디자이너는 모양 이유로 지정된 링크를 가질 수 있습니다. 실제로 이것은 매우 좋은 질문입니다.
shacker

17
링크로 JS 메소드를 트리거하기 때문에 링크 대신 버튼 #을 사용하고 있습니다 event.preventDefault(). 에 연결되어 있으므로 불쾌합니다 javascript:void(0);.
Archonic

답변:


352

button {
  background: none!important;
  border: none;
  padding: 0!important;
  /*optional*/
  font-family: arial, sans-serif;
  /*input has OS specific font-family*/
  color: #069;
  text-decoration: underline;
  cursor: pointer;
}
<button> your button that looks like a link</button>


24
바이올린에 대한 나의 약간의 변형-버튼 : 호버에 텍스트 장식 : 밑줄 규칙이 움직였습니다. 내 갈래 바이올린을 참조하십시오 .
odedbd

10
모든 버튼의 스타일을 링크로 지정하지 않으려면 button.link {...styles...}다음 과 같이 스타일 범위를 지정하십시오 <button class="link">Your button</button>. 이것은 또한 !important항상 좋은 생각 인 사용 을 피 합니다.
Archonic

3
돌봐 outline주십시오. 일부 브라우저는 버튼을 추가합니다. 을 설정할 수 있습니다 outline-color: transparent.
SiliconMind

4
버튼을 액세스 할 수 없도록 윤곽을 제거하지 마십시오. outlinenone.com
Dominik

4
대신에 border-bottom사용 text-decoration:underline.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

86

허용되는 답변의 코드는 대부분의 경우 작동하지만 실제로 링크처럼 작동하는 버튼을 얻으려면 약간 더 많은 코드가 필요합니다. Firefox (Mozilla)에서 포커스가있는 버튼 스타일을 얻는 것이 특히 까다 롭습니다.

다음 CSS는 앵커와 버튼이 동일한 CSS 속성을 가지며 모든 일반 브라우저에서 동일하게 작동하도록합니다.

button {
  align-items: normal;
  background-color: rgba(0,0,0,0);
  border-color: rgb(0, 0, 238);
  border-style: none;
  box-sizing: content-box;
  color: rgb(0, 0, 238); 
  cursor: pointer;
  display: inline;
  font: inherit;
  height: auto;
  padding: 0;
  perspective-origin: 0 0;
  text-align: start;
  text-decoration: underline;
  transform-origin: 0 0;
  width: auto;
  -moz-appearance: none;
  -webkit-logical-height: 1em; /* Chrome ignores auto, so we have to use this hack to set the correct height  */
  -webkit-logical-width: auto; /* Chrome ignores auto, but here for completeness */
}

/* Mozilla uses a pseudo-element to show focus on buttons, */
/* but anchors are highlighted via the focus pseudo-class. */

@supports (-moz-appearance:none) { /* Mozilla-only */
  button::-moz-focus-inner { /* reset any predefined properties */ 
    border: none;
    padding: 0;
  }
  button:focus { /* add outline to focus pseudo-class */
    outline-style: dotted;
    outline-width: 1px;
  }
}

위의 예제는 button가독성을 높이기 위해 요소를 수정 하기 만하지만 수정 input[type="button"], input[type="submit"]input[type="reset"]요소 를 쉽게 확장 할 수 있습니다 . 특정 버튼 만 앵커처럼 보이게하려면 클래스를 사용할 수도 있습니다.

라이브 데모는 이 JSFiddle 을 참조하십시오 .

또한 기본 앵커 스타일이 버튼 (예 : 파란색 텍스트 색상)에 적용됩니다. 따라서 텍스트 색상이나 앵커 및 버튼의 다른 것을 변경하려면 위의 CSS 후에이 작업을 수행해야합니다 .


이 답변의 원래 코드 (스 니펫 참조)는 완전히 다르고 불완전했습니다.


outline-offset: 0;아웃 라인이 none으로 설정되어있는 이유는 무엇 입니까?
Mohamad

box-shadow: none버튼의 모든 스타일을 지우 려면 추가해야했습니다
Tobbe

또 다른 하나text-transform: none;
났는 견인

75

트위터 부트 스트랩을 사용하지 않는다면 링크 클래스 를 사용하는 것이 좋습니다 .

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<button type="button" class="btn btn-link">Link</button>

나는 이것이 누군가에게 도움이되기를 바랍니다 :) 좋은 하루 되세요!


7
이것은 훌륭하게 작동했지만 실제 <a> 링크와 반대로 패딩을 남겼습니다. 패딩 스타일을 추가하기 만하면됩니다 : 0! 중요하고 황금색입니다. 감사!
David

이것은 jquery validate로 폼 유효성 검사를 트리거하는 것 같습니다
Paul Becker

이것은 신뢰할 수있는 솔루션이 아닙니다. 그것은 수직 중심을 미묘하게 깨뜨릴뿐만 아니라 텍스트 스타일 및 글꼴 크기 변경을 암시 적으로 비활성화합니다.
Radon Rosborough

5

CSS 의사 클래스를 사용해보십시오 :focus

input[type="button"], input[type="button"]:focus {
  /* your style goes here */
}

링크 및 onclick 이벤트 사용에 대해 편집하십시오 (인라인 자바 스크립트 이벤트 핸들러를 사용해서는 안되지만 간단하게하기 위해 여기에서 사용합니다).

<a href="some/page.php" title="perform some js action" onclick="callFunction(this.href);return false;">watch and learn</a>

this.href를 사용하면 함수의 링크 대상에 액세스 할 수도 있습니다. return false클릭하면 브라우저가 링크를 따라 가지 못하게됩니다.

자바 스크립트가 비활성화 된 경우 링크가 일반 링크로 작동합니다 그냥로드 some/page.php당신이 당신의 연결이 원하는 - 경우 죽은 JS가 비활성화 사용 때href="#"


나는 그것을 사용하지만 버튼이 들여 쓰기되지 않도록 적용 할 변경 사항에 대해 잘 모르겠습니다.

네. N도 0으로 paddina을주고 나서 들여 쓰기는 여전히 남아있다

4

브라우저 전체에서 버튼을 링크로 안정적으로 스타일 지정할 수 없습니다. 나는 그것을 시도했지만 일부 브라우저에는 항상 이상한 패딩, 여백 또는 글꼴 문제가 있습니다. 버튼을 버튼처럼 보이게하거나 링크에서 onClick 및 preventDefault를 사용하십시오.


2
브라우저가 기본 위젯을 사용할 때도 마찬가지였습니다. 원격으로 최신 브라우저조차도 사실입니까?
aij

1
2017 년이며 FireFox는 여전히 기본 위젯을 사용합니다.
Michael Scheper

2

아래 예제와 같이 간단한 CSS를 사용 하여이 작업을 수행 할 수 있습니다

button {
    overflow: visible;
    width: auto;
}
button.link {
    font-family: "Verdana" sans-serif;
    font-size: 1em;
    text-align: left;
    color: blue;
    background: none;
    margin: 0;
    padding: 0;
    border: none;
    cursor: pointer;
   
    -moz-user-select: text;
 
    /* override all your button styles here if there are any others */
}
button.link span {
    text-decoration: underline;
}
button.link:hover span,
button.link:focus span {
    color: black;
}
<button type="submit" class="link"><span>Button as Link</span></button>

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.