I'm using ASP.NET, some of my buttons just do redirects. I'd rather they were ordinary links, but I don't want my users to notice much difference in the appearance. I considered images wrapped by anchors, i.e. tags, but I don't want to have to fire up an image editor every time I change the text on a button.
- 2See the response I accepted for this question: stackoverflow.com/questions/547222/…tvanfosson– tvanfosson2009-04-02 15:15:54 +00:00Commented Apr 2, 2009 at 15:15
- You can use a service such as this one to generate the CSS for you after you configure a few aspects (color, size, font).Basil Bourque– Basil Bourque2014-12-29 22:04:26 +00:00Commented Dec 29, 2014 at 22:04
- 1I would answer how to do it with javascript but question has no "javascript" tagilyaigpetrov– ilyaigpetrov2016-12-04 12:30:26 +00:00Commented Dec 4, 2016 at 12:30
- 2@ilyaigpetrov go ahead and post an answer. I asked this Q 7 years ago and it looks like it is a common problem and people have been needing a variety of solutions.MatthewMartin– MatthewMartin2016-12-06 00:03:11 +00:00Commented Dec 6, 2016 at 0:03
23 Answers
Apply this class to it
.button { font: bold 11px Arial; text-decoration: none; background-color: #EEEEEE; color: #333333; padding: 2px 6px 2px 6px; border-top: 1px solid #CCCCCC; border-right: 1px solid #333333; border-bottom: 1px solid #333333; border-left: 1px solid #CCCCCC; } <a href="#" class="button">Example</a> 8 Comments
a tag directly (a {display: block ...}), which is not acceptable. Do you have any idea why class attribute inside a tag won't work? :( I'm using Firefox 27. I also tried a.button {...} and it doesn't work either.<input type="submit"> and/or <button> elements so that they did not use the browser defaults (where possible), and then match these with the styling for .button as above. This should help reduce the differences, if not remove them completely, and is better than your (unreliable - as you rightly say) method of sniffing the browser type and version.<input type="submit">Why not just wrap an anchor tag around a button element.
<a href="somepage.html"><button type="button">Text of Some Page</button></a> This will work for IE9+, Chrome, Safari, Firefox, and probably Opera.
7 Comments
<button type="button">. Without the type attribute it would always do a postback and ignore the link.IMHO, there is a better and more elegant solution. If your link is this:
<a href="http://www.example.com">Click me!!!</a> The corresponding button should be this:
<form method="GET" action="http://www.example.com"> <input type="submit" value="Click me!!!"> </form> This approach is simpler because it uses simple html elements, so it will work in all the browsers without changing anything. Moreover, if you have styles for your buttons, this solution will apply the same styles to your new button for free.
5 Comments
The CSS3 appearance property provides a simple way to style any element (including an anchor) with a browser's built-in <button> styles:
a.btn { -webkit-appearance: button; -moz-appearance: button; appearance: button; } <body> <a class="btn">CSS Button</a> </body> CSS Tricks has a nice outline with more details on this. Keep in mind that no version of Internet Explorer currently supports this according to caniuse.com.
1 Comment
If you want nice button with rounded corners, then use this class:
.link_button { -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; border: solid 1px #20538D; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), 0 1px 1px rgba(0, 0, 0, 0.2); background: #4479BA; color: #FFF; padding: 8px 12px; text-decoration: none; } <a href="#" class="link_button">Example</a> 2 Comments
margin to it too. Otherwise, good job styling it.As TStamper said, you can just apply the CSS class to it and design it that way. As CSS improves the number of things that you can do with links has become extraordinary, and there are design groups now that just focus on creating amazing-looking CSS buttons for themes, and so forth.
For example, you can transitions with background-color using the -webkit-transition property and pseduo-classes. Some of these designs can get quite nutty, but it's providing a fantastic alternative to what might in the past have had to have been done with, say, flash.
For example (these are mind-blowing in my opinion), http://tympanus.net/Development/CreativeButtons/ (this is a series of totally out-of-the-box animations for buttons, with source code on the originating page). http://www.commentredirect.com/make-awesome-flat-buttons-css/ (along the same lines, these buttons have nice but minimalistic transition effects, and they make use of the new "flat" design style.)
Comments
You may do it with JavaScript:
- Get CSS styles of real button with
getComputedStyle(realButton). - Apply the styles to all your links.
/* javascript, after body is loaded */ 'use strict'; { // Namespace starts (to avoid polluting root namespace). const btnCssText = window.getComputedStyle( document.querySelector('.used-for-btn-css-class') ).cssText; document.querySelectorAll('.btn').forEach( (btn) => { const _d = btn.style.display; // Hidden buttons should stay hidden. btn.style.cssText = btnCssText; btn.style.display = _d; } ); } // Namespace ends. <body> <h3>Button Styled Links</h3> <button class="used-for-btn-css-class" style="display: none"></button> <a href="//github.io" class="btn">first</a> <a href="//github.io" class="btn">second</a> <button>real button</button> <script>/* You may put JS here. */</script> </body> Comments
Use this class. It will make your link look the same as a button when applied using the button class on an a tag.
or
.button { display: inline-block; outline: none; cursor: pointer; border: solid 1px #da7c0c; background: #478dad; text-align: center; text-decoration: none; font: 14px/100% Arial, Helvetica, sans-serif; padding: .5em 2em .55em; text-shadow: 0 1px 1px rgba(0,0,0,.3); -webkit-border-radius: .5em; -moz-border-radius: .5em; border-radius: .3em; -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.2); -moz-box-shadow: 0 1px 2px rgba(0,0,0,.2); box-shadow: 0 1px 2px rgba(0,0,0,.2); } .button:hover { background: #f47c20; background: -webkit-gradient(linear, left top, left bottom, from(#f88e11), to(#f06015)); background: -moz-linear-gradient(top, #f88e11, #f06015); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f88e11', endColorstr='#f06015'); } .button:active { position: relative; top: 1px; } Comments
This gets into the details of the css a bit more too, and gives you some images:
http://www.dynamicdrive.com/style/csslibrary/item/css_square_buttons/
Comments
Much belated answer:
I've been wrestling with this on and off since I first started working in ASP. Here's the best I've come up with:
Concept: I create a custom control that has a tag. Then in the button I put an onclick event that sets document.location to the desired value with JavaScript.
I called the control ButtonLink, so that I could easily get if confused with LinkButton.
aspx:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ButtonLink.ascx.vb" Inherits="controls_ButtonLink" %> <asp:Button runat="server" ID="button"/> code behind:
Partial Class controls_ButtonLink Inherits System.Web.UI.UserControl Dim _url As String Dim _confirm As String Public Property NavigateUrl As String Get Return _url End Get Set(value As String) _url = value BuildJs() End Set End Property Public Property confirm As String Get Return _confirm End Get Set(value As String) _confirm = value BuildJs() End Set End Property Public Property Text As String Get Return button.Text End Get Set(value As String) button.Text = value End Set End Property Public Property enabled As Boolean Get Return button.Enabled End Get Set(value As Boolean) button.Enabled = value End Set End Property Public Property CssClass As String Get Return button.CssClass End Get Set(value As String) button.CssClass = value End Set End Property Sub BuildJs() ' This is a little kludgey in that if the user gives a url and a confirm message, we'll build the onclick string twice. ' But it's not that big a deal. If String.IsNullOrEmpty(_url) Then button.OnClientClick = Nothing ElseIf String.IsNullOrEmpty(_confirm) Then button.OnClientClick = String.Format("document.location='{0}';return false;", ResolveClientUrl(_url)) Else button.OnClientClick = String.Format("if (confirm('{0}')) {{document.location='{1}';}} return false;", _confirm, ResolveClientUrl(_url)) End If End Sub End Class Advantages of this scheme: It looks like a control. You write a single tag for it, <ButtonLink id="mybutton" navigateurl="blahblah"/>
The resulting button is a "real" HTML button and so looks just like a real button. You don't have to try to simulate the look of a button with CSS and then struggle with different looks on different browsers.
While the abilities are limited, you can easily extend it by adding more properties. It's likely that most properties would just have to "pass thru" to the underlying button, like I did for text, enabled and cssclass.
If anybody's got a simpler, cleaner or otherwise better solution, I'd be happy to hear it. This is a pain, but it works.
Comments
This is what I used. Link button is
<div class="link-button"><a href="/">Example</a></div> CSS
/* body is sans-serif */ .link-button { margin-top:15px; max-width:90px; background-color:#eee; border-color:#888888; color:#333; display:inline-block; vertical-align:middle; text-align:center; text-decoration:none; align-items:flex-start; cursor:default; -webkit-appearence: push-button; border-style: solid; border-width: 1px; border-radius: 5px; font-size: 1em; font-family: inherit; border-color: #000; padding-left: 5px; padding-right: 5px; width: 100%; min-height: 30px; } .link-button a { margin-top:4px; display:inline-block; text-decoration:none; color:#333; } .link-button:hover { background-color:#888; } .link-button:active { background-color:#333; } .link-button:hover a, .link-button:active a { color:#fff; } 1 Comment
How about using asp:LinkButton?
You can do that - I made a linkbutton look like a standard button, using TStamper's entry. Underlining showed under the text when I hovered, though, in spite of the text-decoration: none setting.
I was able to stop the hover-underlining by adding style="text-decoration: none" within the linkbutton:
<asp:LinkButton id="btnUpdate" CssClass="btnStyleTStamper" style="text-decoration: none" Text="Update Items" Onclick="UpdateGrid" runat="server" /> 1 Comment
By using border, color and background color properties you can create a button lookalike html link!
a { background-color: white; color: black; padding: 5px; text-decoration: none; border: 1px solid black; } a:hover { background-color: black; color: white; } <a href="https://stackoverflow.com/ ">Open StackOverflow</a> Hope this helps :]
Comments
.button { font: bold 11px Arial; text-decoration: none; background-color: #EEEEEE; color: #333333; padding: 2px 6px 2px 6px; border-top: 1px solid #CCCCCC; border-right: 1px solid #333333; border-bottom: 1px solid #333333; border-left: 1px solid #CCCCCC; } <a href="#" class="button">Example</a> Comments
I use an asp:Button:
<asp:Button runat="server" OnClientClick="return location='targetPage', true;" UseSubmitBehavior="False" Text="Button Text Here" /> This way, the operation of the button is completely client-side and the button acts just like a link to the targetPage.
1 Comment
asp:Button looks like in practice, so it can help other users!Use below snippet.
.a{ color: $brn-acc-clr; background-color: transparent; border-color: #888888; &:hover:active{ outline: none; color: #888888; border-color: #888888; } &:fill{ background-color: #888888; color: #fff; box-shadow: 0 3px 10px rgba(#888888, 0.5); &:hover:active{ color: #fff; } &:hover:not(:disabled){ transform: translateY(-2px); background-color: darken(#888888, 4); } } } Comments
Simple button css now you can play around with your editor
a { display: inline-block; background: #000000c9; color: #000; padding: 12px 24px; text-align: center; text-decoration: none; font-size: 16px; cursor: pointer; } a:hover { background:#000 cursor: pointer; transition: 0.3s ease-in; } Link tag
<a href="#">Hover me<a> Comments
If you need some cool effect, hover and shadow; you can use this:
.button { text-decoration: none; padding: 15px 25px; font-size: 24px; cursor: pointer; text-align: center; text-decoration: none; outline: none; color: #fff; background-color: #450775; border: none; border-radius: 15px; box-shadow: 0 9px #e1d5ed; } .button:hover {background-color: #220440} .button:active { background-color: #230545; box-shadow: 0 5px #e1d5ed; transform: translateY(4px); } 1 Comment
How about using asp:LinkButton?