วิธีทำให้ปุ่มดูเหมือนลิงค์


287

ฉันต้องทำให้ปุ่มดูเหมือนลิงค์โดยใช้ CSS การเปลี่ยนแปลงจะเสร็จสิ้น แต่เมื่อฉันคลิกที่มันจะแสดงให้เห็นราวกับว่ามันผลักเหมือนปุ่ม แนวคิดใดที่จะลบออกเพื่อให้ปุ่มทำงานเป็นลิงก์แม้เมื่อคลิก


4
เหตุการณ์ onclick ในการเชื่อมโยงเป็นง่ายๆเป็นที่ปุ่ม
knittl

2
@knittl, @cletus จริงๆแล้วลิงค์และปุ่มต่างกันมากใน HTML คุณควรอ่านwhatwg.org/specs/web-apps/current-work/multipage/... อาจไม่ใช่ความคิดที่ดีที่ปุ่มสไตล์จะมีลักษณะเป็นลิงก์ แต่ขึ้นอยู่กับการออกแบบ UI ในขณะที่การใช้ลิงก์แทนที่จะขัดต่อข้อกำหนดของ HTML
Anton Strogonoff

5
มีเหตุผลบางประการที่ทำให้การออกแบบปุ่มเช่นลิงค์อาจจำเป็น (1) ปุ่มมีประเภท = "ส่ง" (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;ถ้าเค้าร่างถูกตั้งค่าเป็นไม่มี?
Mohamad

ฉันต้องเพิ่มbox-shadow: noneเพื่อล้างการจัดแต่งทรงผมทั้งหมดบนปุ่ม
Tobbe

อีกอันหนึ่ง:text-transform: none;
Shone Tow

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 pseudoclass :focus

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

แก้ไขเป็นลิงก์และกิจกรรม onclick ใช้ (คุณไม่ควรใช้ตัวจัดการเหตุการณ์ javascript แบบอินไลน์ แต่เพื่อความเรียบง่ายฉันจะใช้ที่นี่)

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

ด้วยวิธีนี้คุณสามารถเข้าถึงเป้าหมายของลิงก์ในฟังก์ชันของคุณได้ return falseจะป้องกันไม่ให้เบราว์เซอร์ติดตามลิงก์เมื่อคลิก

หากปิดการใช้งานจาวาสคริปต์ลิงก์จะทำงานเหมือนลิงค์ปกติและโหลดsome/page.phpถ้าคุณต้องการให้ลิงก์ของคุณเสียชีวิตเมื่อ js ถูกปิดการใช้งานhref="#"


ฉันจะใช้มัน แต่ฉันไม่แน่ใจว่าจะใช้การเปลี่ยนแปลงใดเพื่อให้ปุ่มไม่ได้รับการเยื้อง

ใช่. ยังไม่มีข้อความหลังจากให้ paddina เป็น 0 การเยื้องยังคงอยู่

4

คุณไม่สามารถจัดสไตล์ปุ่มเป็นลิงก์ที่เชื่อถือได้ในเบราว์เซอร์ ฉันได้ลองแล้ว แต่มีปัญหาการแพ็ดขอบหรือตัวอักษรแปลก ๆ เสมอในเบราว์เซอร์บางตัว ไม่ว่าจะอยู่กับการปล่อยให้ปุ่มมีลักษณะเหมือนปุ่มหรือใช้ onClick และป้องกันไม่ให้เริ่มต้นที่ลิงก์


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.