リンクのように機能するHTMLボタンを作成したいです。そのため、ボタンをクリックすると、ページにリダイレクトされます。できるだけアクセスしやすいようにしたいと思います。
URLに余分な文字やパラメータが含まれないようにします。
どうすればこれを達成できますか?
これまでに投稿された回答に基づいて、私は現在これをやっています:
<form method="get" action="/page2">
<button type="submit">Continue</button>
</form>
しかし、これに関する問題は Safari と Internet Explorer では、URLの最後に疑問符を追加することです。 URLの最後に文字を追加しない解決策を見つける必要があります。
これを行うには、他に2つの解決策があります。JavaScriptを使用するか、リンクをスタイルしてボタンのように見せる。
JavaScriptを使う:
<button onclick="window.location.href='/page2'">Continue</button>
しかしこれには明らかにJavaScriptが必要です。そのためスクリーンリーダーにはアクセスしにくいです。リンクのポイントは別のページに行くことです。そのため、ボタンをリンクのように機能させようとするのは間違った解決策です。私の提案は、リンクと ボタンのように見えるようにそれをスタイルする を使うべきです。
<a href="/link/to/page2">Continue</a>
プレーンなHTMLの方法は、それを<form>
に入れることです。ここで、action
属性に目的のターゲットURLを指定します。
<form action="http://google.com">
<input type="submit" value="Go to Google" />
</form>
必要に応じて、フォームのCSS display: inline;
を設定して、周囲のテキストと一緒にフローに入れます。上記の例の<input type="submit">
の代わりに、<button type="submit">
を使用することもできます。唯一の違いは、<button>
要素が子を許可することです。
直感的に<button href="http://google.com">
を<a>
要素と同様に使用できると期待していましたが、残念ながらいいえ、この属性は HTML specification に従って存在しません。
CSSが許可されている場合は、単に appearance
プロパティを使用するボタンのようなスタイルの<a>
を使用します( 現在のところ(2015年7月)はまだ不十分 )。
<a href="http://google.com" class="button">Go to Google</a>
a.button {
-webkit-appearance: button;
-moz-appearance: button;
appearance: button;
text-decoration: none;
color: initial;
}
あるいは、 Bootstrap のようなCSSライブラリの中から一つを選んでください。
<a href="http://google.com" class="btn btn-default">Go to Google</a>
JavaScriptが許可されている場合は、window.location.href
を設定します。
<input type="button" onclick="location.href='http://google.com';" value="Go to Google" />
<button onclick="location.href='http://www.example.com'" type="button">
www.example.com</button>
基本的なHTMLアンカータグ内で探しているボタンが視覚的に見える場合は、 Twitter Bootstrap フレームワークを使用して、次の一般的なHTMLタイプのリンク/ボタンをボタンとして表示するようにフォーマットできます。フレームワークのバージョン2、3、または4の視覚的な違いに注意してください。
<a class="btn" href="">Link</a>
<button class="btn" type="submit">Button</button>
<input class="btn" type="button" value="Input">
<input class="btn" type="submit" value="Submit">
ブートストラップ(v4) サンプルの外観:
ブートストラップ(v3) サンプルの外観:
ブートストラップ(v2) サンプルの外観:
つかいます:
<a href="http://www.stackoverflow.com/">
<button>Click me</button>
</a>
残念ながら、このマークアップはHTML 5では有効ではなくなったため、有効性が検証されることも、期待されるとおりに機能することもありません。別の方法を使用してください。
HTML 5以降、ボタンはformaction
属性をサポートします。何よりも、Javascriptやトリックは必要ありません。
<form>
<button formaction="http://stackoverflow.com">Go to Stack Overflow!</button>
</form>
警告
<form>
タグで囲む必要があります。<button>
タイプは「送信」(または未指定)にする必要があります。「button」タイプでは動作させることができませんでした。これにより、以下の点が明らかになります。参照: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-formaction ブラウザのサポート: https://developer.mozilla .org/ja-jp/docs/Web/HTML/Element/button#ブラウザの互換性
それは実際には非常に単純で、フォーム要素を使用しません。 <a>タグの内側にボタンを付けて使用することができます。
このような:
<a href="http://www.google.com" target="_parent"><button>Click me !</button></a>
そしてそれはhrefを同じページにロードします。新しいページが欲しいですか? target="_blank"
を使うだけです。
内側のフォームを使用している場合は、button要素と共に type = "reset" 属性を追加します。フォームアクションを防ぎます。
<button type="reset" onclick="location.href='http://www.example.com'">
www.example.com
</button>
<form>
<input TYPE="button" VALUE="Home Page"
onclick="window.location.href='http://www.wherever.com'">
</form>
単純に要素の周りにタグをつけることができます:
<a href="http://google.com" target="_blank">
<button>My Button</button>
</a>
この問題には3つの解決策があるようです(すべて長所と短所があります)。
<form method="get" action="/page2">
<button type="submit">Continue</button>
</form>
しかし、これに関する問題は、Chrome、Safari、Internet Explorerなどの一般的なブラウザの一部のバージョンでは、URLの末尾に疑問符が追加されていることです。つまり、上記のコードのURLは、次のようになります。
http://someserver/pages2?
これを修正する方法は1つありますが、サーバーサイドの設定が必要になります。 Apache Mod_rewrite を使用する1つの例は、末尾に?
を持つすべてのリクエストを、?
を付けずに対応するURLにリダイレクトすることです。これは.htaccessを使った例ですが、完全なスレッドがあります ここ :
RewriteCond %{THE_REQUEST} \?\ HTTP [NC]
RewriteRule ^/?(index\.cfm)? /? [R=301,L]
同様の設定は、使用するWebサーバーとスタックによって異なります。だからこのアプローチの要約:
長所:
短所:
?
は、ブラウザによっては見にくいようです。これは(場合によっては)GETの代わりにPOSTを使ってハックすることで解決できますが、きれいな方法はサーバーサイドのリダイレクトを使うことです。サーバー側リダイレクトのマイナス面は、304リダイレクトのためにこれらのリンクに対して余分なHTTP呼び出しが発生することです。<form>
要素を追加しますJavaScriptを使用して、ボタンを使用してリンクの動作を模倣するためのonclickイベントやその他のイベントをトリガーできます。以下の例はHTMLから改善され削除されるかもしれませんが、それは単にアイデアを説明するためにあります:
<button onclick="window.location.href='/page2'">Continue</button>
長所:
短所:
ボタンのようにリンクをスタイリングする は比較的簡単で、さまざまなブラウザで同様のエクスペリエンスを提供できます。 Bootstrap これを行いますが、単純なスタイルを使用して自分で簡単に達成することもできます。
長所:
<form>
を必要としません。短所:
keypress
イベントをどのようにサポートしているかについてブラウザが一貫していないので、それは非常に複雑になります。解決策#1( フォーム内のボタン )は、最小限の作業でユーザーにとって最も透過的に見えるようです。レイアウトがこの選択に影響されず、サーバーサイドのTweakが実行可能な場合は、アクセシビリティが最優先事項である場合(エラーページ上のリンクやエラーメッセージなど)にはこれは良い選択肢です。
JavaScriptがあなたのアクセシビリティの要件を妨げないのであれば、解決策#2( JavaScript )が#1と#3よりも好まれるでしょう。
何らかの理由でアクセシビリティが重要です(JavaScriptはオプションではありません)が、デザインやサーバー構成によってオプション#1の使用が妨げられている状況では、ソリューション#3( アンカースタイル)ボタン )は、ユーザビリティへの影響を最小限に抑えてこの問題を解決するための優れた選択肢です。
次のようなことをすることの欠点はありますか?
<a class='nostyle' href='http://www.google.com/'>
<span class='button'>Schedule</span>
</a>
ここでa.nostyle
はあなたのリンクスタイルを持つクラス(標準のリンクスタイルを取り除くことができる)で、span.button
はあなたの "ボタン"(背景、境界線、グラデーションなど)のスタイルを持つクラスです。
これを行う唯一の方法は(BalusCの独創的なフォームのアイデアを除いて)、JavaScriptのonclick
イベントをボタンに追加することですが、これはアクセシビリティには良くありません。
ボタンのように通常のリンクをスタイルすることを検討しましたか。あなたはそのようなやり方でOS特有のボタンを達成することはできませんが、それでもIMOの最善の方法です。
他の少数の人が追加したものと一緒に進むと、PHP、 jQuery コード、単純なHTMLおよびCSSを含まない単純なCSSクラスを使用するだけで、ワイルドになります。
CSSクラスを作成してアンカーに追加します。コードは以下の通りです。
.button-link {
height:60px;
padding: 10px 15px;
background: #4479BA;
color: #FFF;
-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);
}
.button-link:hover {
background: #356094;
border: solid 1px #2A4E77;
text-decoration: none;
}
<HTML>
<a class="button-link" href="http://www.go-some-where.com"
target="_blank">Press Here to Go</a>
それだ。それはとても簡単で、あなたが望むのと同じくらい創造的になれるようにします。あなたは色、大きさ、形(半径)などを制御します。詳しくは 私がこれを見つけた場所 をご覧ください。
ボタンを参照タグの内側に配置しないでください。
<a href="https://www.google.com/"><button>Next</button></a>
これは私には完璧に機能しているようで、リンクに%20タグを追加していません。説明するために、Googleへのリンクを使用しました。
もちろんこれをフォームタグでラップすることもできますが、必須ではありません。
別のローカルファイルをリンクするときは、それを同じフォルダに入れて、参照としてファイル名を追加するだけです。またはが同じフォルダにない場合は、ファイルの場所を指定します。
<a href="myOtherFile"><button>Next</button></a>
これはURLの末尾にも文字を追加しませんが、ファイルの名前で終わる前にファイルのプロジェクトパスをURLとして使用します。例えば
私のプロジェクト構成が.
..はフォルダを表し、ファイルを表します。親フォルダ内のサブディレクトリまたはファイルを示す
..パブリック
|||| ..html
|||| |||| -main.html
|||| |||| -secondary.html
Main.htmlを開くと、URLは次のようになります。
http://localhost:0000/public/html/main.html?_ijt=i7ms4v9oa7blahblahblah
ただし、main.html内のボタンをクリックしてsecondary.htmlに変更すると、URLは次のようになります。
http://localhost:0000/public/html/secondary.html
URLの末尾に特殊文字は含まれていません。これが役立つことを願っています。
注意:localhost:0000は明らかに0000ではありません。あなた自身のポート番号があるでしょう。
さらにmain.html URLの最後の?_ijt = xxxxxxxxxxxxxxはあなた自身の接続によって決定されるので明らかに私のものと等しくないでしょう。
本当に基本的なことをいくつか述べているように思われるかもしれませんが、できる限り説明したいと思います。読んでくれてありがとう、そしてこれが少なくとも誰かに役立つことを願っています。ハッピープログラミング.
@ Nicolas、あなたのものはtype="button"
を持っていなかったので私のために働きました。必要なレイアウトを取得するためのボタンまたは<a>
へのクラス:
<a href="http://www.google.com/">
<button type="button">Click here</button>
</a>
フォームや入力を使わずにボタンに見えるリンクを探しているのであれば、divラッパー、アンカー、h1
タグを使って見栄えの良いボタンリンクを作成できます。あなたが自由にあなたのページの周りにリンクボタンを置くことができるようにあなたは潜在的にこれが欲しいです。これは、ボタンを水平方向に中央揃えし、その内部に垂直方向に中央揃えのテキストを配置する場合に特に便利です。方法は次のとおりです。
ボタンは、divラッパー、アンカー、h1の3つのネストされたピースで構成されます。
<div class="link-button-wrapper">
<a href="your/link/here">
<h1>Button!</h1>
</a>
</div>
CSSでは、スタイルは次のようになります。
.link-button-wrapper {
width: 200px;
height: 40px;
box-shadow: inset 0px 1px 0px 0px #ffffff;
border-radius: 4px;
background-color: #097BC0;
box-shadow: 0px 2px 4px gray;
display: block;
border:1px solid #094BC0;
}
.link-button-wrapper > a {
display: inline-table;
cursor: pointer;
text-decoration: none;
height: 100%;
width:100%;
}
.link-button-wrapper > a > h1 {
margin: 0 auto;
display: table-cell;
vertical-align: middle;
color: #f7f8f8;
font-size: 18px;
font-family: cabinregular;
text-align: center;
}
ここに a jsFiddle を付けて、試してみてください。
この設定の利点: 1。 divラッパーを表示:ブロックにすると、中央揃え(マージン:0 autoを使用)と位置設定(<a>がインラインで位置合わせが困難で中央揃えが不可能)が簡単になります。
<a> display:ブロックを作成し、移動してボタンのようにスタイルを設定するだけで、その中のテキストを垂直方向に揃えるのが難しくなります。
これにより、<a> display:inline-tableと<h1> display:table-cellを作成することができます。これにより、<h1>上でvertical-align:middleを使用し、垂直方向に中央揃えできます(常にNice onです)。ボタン)。はい、パディングを使用できますが、ボタンのサイズを動的に変更したい場合は、それほどきれいにはなりません。
Divに<a>を埋め込むと、テキストだけがクリック可能になり、この設定によってボタン全体がクリック可能になることがあります。
別のページに移動しようとしているだけであれば、フォームを扱う必要はありません。フォームは情報を入力するためのものであり、そのために予約されている必要があります。
ボタンのスタイルとテキストのスタイルを明確に区別することができます(長所はありますか?もちろん、CSSは見栄えが悪くなるため、分解するのがいいでしょう)。
それは間違いなく私の人生を可変サイズの画面用の携帯サイトのスタイリングをより簡単にしました。
もう1つの選択肢は、ボタンにリンクを作成することです。
<button type="button"><a href="yourlink.com">Link link</a></button>
それからCSSを使ってリンクとボタンのスタイルを設定してください。そうすればリンクはボタンの中のスペース全体を占めるようになります。
button, button a{position:relative;}
button a{top:0;left:0;bottom:0;right:0;}
ここで デモを作成しました 。
URLに使用するボタンをどこにでも作成する場合は、アンカーのボタンクラスを作成します。
a.button {
background-color: #999999;
color: #FFFFFF !important;
cursor: pointer;
display: inline-block;
font-weight: bold;
padding: 5px 8px;
text-align: center;
-webkit-border-radius: 5px;
border-radius: 5px;
}
.button:hover {
text-decoration: none;
}
たくさんの回答が寄せられていることを私は知っていますが、それらのどれも本当に問題を解決するようには見えませんでした。これが私の解決策です。
<form method="get">
メソッドを使用してください。これは本当にうまくいきますが、時々URLに?
を追加します。 ?
が主な問題です。?
がURLに追加されないように、jQuery/JavaScriptを使用してJavaScriptが有効になっているときにリンクをたどるようにします。 JavaScriptが有効になっていないごく一部のユーザーには、<form>
メソッドにシームレスにフォールバックします。<form>
または<button>
が存在する前にイベントリスナーを添付することができます。この例ではjQueryを使用しています。これは、迅速で簡単なためですが、 'Vanilla' JavaScriptでも実行できます。<form>
action
属性で指定されたリンクをたどります。// Listen for any clicks on an element in the document with the `link` class
$(document).on('click', '.link', function(e) {
// Prevent the default action (e.g. submit the form)
e.preventDefault();
// Get the URL specified in the form
var url = e.target.parentElement.action;
window.location = url;
});
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<meta charset="utf-8">
<title>Form buttons as links</title>
</head>
<body>
<!-- Set `action` to the URL you want the button to go to -->
<form method="get" action="http://stackoverflow.com/questions/2906582/how-to-create-an-html-button-that-acts-like-a-link">
<!-- Add the class `link` to the button for the event listener -->
<button type="submit" class="link">Link</button>
</form>
</body>
</html>
HTML 5およびスタイル付きボタンと画像の背景
<a id="Navigate" href="http://www.google.com">
<input
type="button"
id="NavigateButton"
style="
background-image: url(http://cdn3.blogsdna.com/wp-content/uploads/2010/03/Windows-Phone-7-Series-Icons-Pack.png);
background-repeat: no-repeat;
background-position: -272px -112px;
cursor:pointer;
height: 40px;
width: 40px;
border-radius: 26px;
border-style: solid;
border-color:#000;
border-width: 3px;" title="Navigate"
/>
</a>
それをする7つの方法:
window.location.href = 'URL'
を使うwindow.location.replace('URL')
を使うwindow.location = 'URL'
を使うwindow.open('URL')
を使うwindow.location.assign('URL')
を使う<!-- Using window.location.href = 'URL' -->
<button onclick='window.location.href = "https://stackoverflow.com"'>
Click Me
</button>
<!-- Using window.location.replace('URL') -->
<button onclick='window.location.replace("https://stackoverflow.com")'>
Click Me
</button>
<!-- Using window.location = 'URL' -->
<button onclick='window.location = "https://stackoverflow.com"'>
Click Me
</button>
<!-- Using window.open('URL') -->
<button onclick='window.open("https://stackoverflow.com","_self","","")'>
Click Me
</button>
<!-- Using window.location.assign('URL') -->
<button onclick='window.location.assign("http://www.stackoverflow.com")'>
Click Me
</button>
<!-- Using HTML form -->
<form action='https://stackoverflow.com' method='get'>
<input type='submit' value='Click Me'/>
</form>
<!-- Using HTML anchor tag -->
<a href='https://stackoverflow.com'>
<button>Click Me</button>
</a>
ボタンも使えます。
たとえば、 ASP.NET Core構文 :の場合
// Some other tags
<form method="post">
<input asp-for="YourModelPropertyOrYourMethodInputName"
value="@TheValue" type="hidden" />
<button type="submit" class="link-button" formaction="/TheDestinationController/TheDestinationActionMethod">
@(TextValue)
</button>
</form>
// Other tags...
<style>
.link-button {
background: none !important;
border: none;
padding: 0 !important;
color: #20a8d8;
cursor: pointer;
}
</style>
sSL証明書を使用している場合
<a href="https://www.google.com" target="_blank"><button>Click me !</button></a>
私が現在取り組んでいるウェブサイトのためにこれを使いました、そして、それは素晴らしい働きをします!あなたもクールなスタイリングをしたいなら、私はここにCSSを置きます。
input[type="submit"] {
background-color: white;
width: 200px;
border: 3px solid #c9c9c9;
font-size: 24pt;
margin: 5px;
color: #969696;
}
input[type="submit"]:hover {
color: white;
background-color: #969696;
transition: color 0.2s 0.05s ease;
transition: background-color 0.2s 0.05s ease;
cursor: pointer;
}
<input type="submit" name="submit" onClick="window.location= 'http://example.com'">
Working JSFiddle ここ .
あなたはjavascriptを使用することができます:
<html>
<button onclick='window.location = "http://www.google.com"'>
Google
</button>
</html>
http://www.google.com
をあなたのウェブサイトに置き換えます。URLの前に必ずhttp://
を含めてください。
また、ボタンtype-property
を "button"に設定し(フォームを送信しないようにし)、それをリンク内にネストする(ユーザーにリダイレクトさせる)こともできます。
これにより、必要に応じて、フォームを送信するのと同じフォームに別のボタンを配置できます。また、ほとんどの場合、フォームのメソッドとアクションをリンクに設定するよりも、これが望ましいと思います(ただし、検索フォームではない限り)。
例:
<form method="POST" action="/SomePath">
<input type="text" name="somefield" />
<a href="www.target.com"><button type="button">Go to Target!</button></a>
<button type="submit">submit form</button>
</form>
このように、最初のボタンはユーザーをリダイレクトし、2番目のボタンはフォームを送信します。
ボタンがアクションを起こさないように気を付けてください。衝突が発生する可能性があります。また、Ariusが指摘したように、上記の理由から、これは厳密には有効なHTMLとは見なされていません。ただし、FirefoxとChromeでは期待どおりに機能しますが、Internet Explorer用にはまだテストされていません。
<a></a>
の<button></button>
属性を使って答えた人は役に立ちました。
_しかし_ それから最近、私は<form></form>
の中でリンクを使ったときに問題に遭遇しました。
ボタンは現在、送信ボタン(HTML5)のようであると見なされています。私は回避策を試してみましたが、この方法を見つけました。
以下のようなCSSスタイルのボタンを作成します。
.btn-style{
border : solid 1px #0088cc;
border-radius : 6px;
moz-border-radius : 6px;
-webkit-box-shadow : 0px 0px 2px rgba(0,0,0,1.0);
-moz-box-shadow : 0px 0px 2px rgba(0,0,0,1.0);
box-shadow : 0px 0px 2px rgba(0,0,0,1.0);
font-size : 18px;
color : #696869;
padding : 1px 17px;
background : #eeeeee;
background : -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(49%,#eeeeee), color-stop(72%,#cccccc), color-stop(100%,#eeeeee));
background : -moz-linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
background : -webkit-linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
background : -o-linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
background : -ms-linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
background : linear-gradient(top, #eeeeee 0%, #eeeeee 49%, #cccccc 72%, #eeeeee 100%);
filter : progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#eeeeee',GradientType=0 );
}
または、ここで新しいものを作成してください: CSS Button Generator
そして、作成したCSSスタイルに基づいて名前が付けられたclassタグを使用してリンクを作成します。
<a href='link.php' class='btn-style'>Link</a>
これがいじめです。
ブラウザコンソールでwindow.location
と入力し、enter
を押します。そうすれば、location
に含まれるものが明確にわかります
hash: ""
Host: "stackoverflow.com"
hostname: "stackoverflow.com"
href: "https://stackoverflow.com/questions/2906582/how-to-create-an-html-button-
that-acts-like-a-link"
Origin: "https://stackoverflow.com"
pathname: "/questions/2906582/how-to-create-an-html-button-that-acts-like-a-link"
port: ""
protocol: "https:"
ここから任意の値を設定できます。
したがって、別のページをリダイレクトするには、リンクにhref
値を設定できます。
window.location.href = your link
あなたの場合
<button onclick="window.location.href='www.google.com'">Google</button>
あなたがそれがボタンのように見えるということであるならば、 グラデーション画像を強調して 、あなたはこれをすることができます:
<a href="www.yourlink.com" class="btn btn-gradient"><i class="fa fa-home"> Button Text</i></a>
あなたがあなたのウェブサイト内にあるページにリダイレクトしたいなら、それからここに私の方法があります - 私は属性 href をボタンに加えて、onclickが割り当てられた this.getAttribute( 'href) ') document.location.hrefへ
** 'X-Frame-Options'から 'sameorigin'のためにドメインの外部のURLを参照しても機能しません。
サンプルコード
<button onclick="document.location.href=this.getAttribute('href');" href="/">Home</button>
JavaScriptで
setLocation(base: string) {
window.location.href = base;
}
HTMLで
<button onclick="setLocation('/<whatever>')>GO</button>"