質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

0回答

380閲覧

プルダウンメニューにoptgroupを対応させたい。

donut4

総合スコア148

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

2クリップ

投稿2019/06/03 09:30

編集2019/06/03 10:13

jquery+CSSを使ったプルダウンメニューのデザイン設計についてです。

ネットからサンプルコードをとってきて半オリジナルのデザインを作ろうと思っています。

しかし、そのデザインはoptgroup要素がない前提で作られているもので、
私が想定しているoptgroupありのプルダウンデザインではありませんでした。

自分でoptgroupの要素を取ってきてCSSで装飾させるプログラムを書いたのですが
どうもうまくいかず。2時間以上試行錯誤している状態です。

下記プルダウンのlabel="group"の中にtestを入れさせるようなつくりにするためにはjavascriptとCSSをどのように
構築知ればよろしいか教えていただければと思っております。

WEB初心者で至らぬところもあるとは思いますが
よろしくお願いいたします。

html

1 2{% load static %} 3<!doctype html> 4<html lang=ja> 5 <head> 6 <mata charset=utf-8> 7 <link rel="stylesheet" href="{% static 'css/devtest.css' %}" type="text/css"> 8 <script type="text/javascript" src="{% static 'jquery/jquery-3.2.1.min.js' %}"></script> 9 <title>devtest</title> 10 </head> 11 <body> 12 <div class="center"> 13 <select name="sources" id="sources" class="custom-select sources" placeholder="選んでください"> 14 <optgroup label="group">   ←これの表示がされていない 15 <option value="1">test</option> 16 <option value="2">test</option> 17 <option value="3">test</option> 18 </optgroup> 19 </select> 20 </div> 21 22 23 24 25 <script> 26 $(".custom-select").each(function() { 27 var classes = $(this).attr("class"), 28 id = $(this).attr("id"), 29 name = $(this).attr("name"); 30 var template = '<div class="' + classes + '">'; 31 template += '<span class="custom-select-trigger">' + $(this).attr("placeholder") + '</span>'; 32 template += '<div class="custom-options">'; 33 34 $(this).find("option").each(function() {   ここに入れ子のfind("optgroup ")関数を入れて試してみたのですがまくいきませんでした。 35 template += '<span class="custom-option ' + $(this).attr("class") + '" data-value="' + $(this).attr("value") + '">' + $(this).html() + '</span>'; 36 }); 37 template += '</div></div>'; 38 $(this).wrap('<div class="custom-select-wrapper"></div>'); 39 $(this).hide(); 40 $(this).after(template); 41 }); 42 43 $(".custom-option:first-of-type").hover(function() { 44 $(this).parents(".custom-options").addClass("option-hover"); 45 }, function() { 46 $(this).parents(".custom-options").removeClass("option-hover"); 47 }); 48 49 $(".custom-select-trigger").on("click", function() { 50 $('html').one('click',function() { 51 $(".custom-select").removeClass("opened"); 52 }); 53 $(this).parents(".custom-select").toggleClass("opened"); 54 event.stopPropagation(); 55 }); 56 57 $(".custom-option").on("click", function() { 58 $(this).parents(".custom-select-wrapper").find("select").val($(this).data("value")); 59 $(this).parents(".custom-options").find(".custom-option").removeClass("selection"); 60 $(this).addClass("selection"); 61 $(this).parents(".custom-select").removeClass("opened"); 62 $(this).parents(".custom-select").find(".custom-select-trigger").text($(this).text()); 63 }); 64 </script> 65 </body> 66</html> 67

css

1 2.center { 3 position: absolute; 4 display: inline-block; 5 top: 50%; left: 50%; 6 transform: translate(-50%, -50%); 7} 8 9/** Custom Select **/ 10.custom-select-wrapper { 11 position: relative; 12 display: inline-block; 13 user-select: none; 14} 15 .custom-select-wrapper select { 16 display: none; 17 } 18 .custom-select { 19 position: relative; 20 display: inline-block; 21 } 22 .custom-select-trigger { 23 position: relative; 24 display: block; 25 text-align: center; 26 line-height: 80px; 27 background-color: rgba( 255, 255, 255, 0.3 ); 28 font-size: 25px; 29 font-weight: 100; 30 color: #000; 31 width: 380px; 32 height: 80px; 33 border-radius: 20px; 34 font-family: 'Sawarabi Gothic', sans-serif; 35 box-shadow: -2px -2px 10px black inset; 36 } 37 38 .custom-select.opened .custom-select-trigger:after { 39 margin-top: 3px; 40 transform: rotate(-135deg) translateY(-50%); 41 } 42 43 .custom-options { 44 position: absolute; 45 display: block; 46 top: 100%; left: 0; right: 0; 47 min-width: 100%; 48 margin: 15px 0; 49 border: 1px solid #b5b5b5; 50 border-radius: 4px; 51 box-sizing: border-box; 52 box-shadow: 0 2px 1px rgba(0,0,0,.07); 53 background: #fff; 54 transition: all .4s ease-in-out; 55 56 opacity: 0; 57 visibility: hidden; 58 pointer-events: none; 59 transform: translateY(-15px); 60 } 61 .custom-select.opened .custom-options { 62 opacity: 1; 63 visibility: visible; 64 pointer-events: all; 65 transform: translateY(0); 66 } 67 .custom-options:before { /*プルダウン部上部の三角形*/ 68 position: absolute; 69 display: block; 70 content: ''; 71 bottom: 100%; right: 25px; 72 width: 7px; height: 7px; 73 margin-bottom: -4px; 74 border-top: 1px solid #b5b5b5; 75 border-left: 1px solid #b5b5b5; 76 background: #fff; 77 transform: rotate(45deg); 78 transition: all .4s ease-in-out; 79 } 80 .option-hover:before { /*プルダウン部上部の三角形の色*/ 81 background: #f9f9f9; 82 } 83 .custom-option { /*プルダウン部リスト内部*/ 84 position: relative; 85 display: block; 86 padding: 0 22px; 87 border-bottom: 1px solid #b5b5b5; 88 font-size: 18px; 89 font-weight: 600; 90 color: #4d4d4d; 91 line-height: 47px; 92 cursor: pointer; 93 transition: all .4s ease-in-out; 94 } 95 .custom-option:first-of-type { 96 border-radius: 4px 4px 0 0; 97 } 98 .custom-option:last-of-type { 99 border-bottom: 0; 100 border-radius: 0 0 4px 4px; 101 102 } 103 .custom-option:hover, 104 .custom-option.selection { 105 background: #ebebeb; 106 } 107

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/06/04 03:57

試した感じ optgroupありとなしでそれぞれ想定通り表示されているようです 具体的にどういう状態になっているのが問題でどうしたいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問