24862

[code]

    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/milligram/1.1.0/milligram.min.css">  
    
[/code]

上記のタグを`<head>〜</head>`内に追加すると、CSSフレームワークのMilligramを利用することができますが、Milligramのデフォルトテーマカラーの紫色を好きな色に変更するにはどうすれば良いですか？

CDNを利用せずにCSSをダウンロードして全ての`#9b4dca`（紫色）を好きな色に書き換えれば可能ですが、公式に配布されているコードに手を加えたくないと考えています。

何か素敵なアイディアがあれば是非教えてください！よろしくお願いします。


CC BY-SA 3.0
2016-05-14T13:22:12.203
24857
2016-05-15T13:05:32.587
2016-05-15T13:05:32.587
5840
5840
question
css
Milligramのデフォルトテーマカラーの紫色を好きな色に変更する方法


Milligramではデフォルトテーマカラーを変更する方法は提供されていません。

読み込むcssを読み込む前に置換することが出来ればいいのですが、そういった手段も同様にブラウザには提供されていません。

そこで、javascriptを利用して無理やりスタイルを上書きする方法が考えられます。

**cssをjsで読み直してカラーを置換して上書きする方法**

以下のコードを`head`タグ内に貼り付け、milligram.cssを読み込んでいる`link`タグの`color`属性の値にお好きなカラーコードを設定してください。

[code]

    <link rel="stylesheet" color="orange" href="//cdnjs.cloudflare.com/ajax/libs/milligram/1.1.0/milligram.min.css">
    <script>
      !function(){var e=new XMLHttpRequest,t=document.querySelectorAll("link[color]")[0];e.timeout=3e4,e.open("get",t.getAttribute("href"),!0),e.onreadystatechange=function(){if(200==this.status&&""!=this.responseText){e.onreadystatechange=null;var n=this.responseText,a=t.getAttribute("color");n=n.replace(/#9b4dca/g,a);var o=document.getElementsByTagName("head").item(0),r=document.createElement("style"),s=document.createTextNode(n);r.media="screen",r.type="text/css",r.appendChild(s),o.appendChild(r)}},e.send()}();
    </script>
    
[/code]

しかし、スタイルを変更するためだけにcssを読み直すのは馬鹿馬鹿しいので、Milligramのソースコードからカラーにまつわるcss部分だけ抜き出すことでajaxを利用しない手段も考えてみました。

また、Milligramでは`select`ボックスの逆三角形マークに紫色のsvg画像を利用しているため、カラー置換のみでは全てのテーマカラーを変更することはできません。そこで、selectボックスにフォーカスが当たった時に紫色に変更しないよう対策してみました。こちらは根本的解決にはなりませんが、フォーカスが当たった時に逆三角形マークの色まで変わらなくても見た目は悪くないと思います。

**css再読み込みも発生せずselectボックス問題にも対処した方法（コード長いです）**

以下のコードをheadタグ内に貼り付け、`script`タグ内の`<<< Setting a milligram theme
color!`と書いてある箇所にお好きなカラーコードを設定してください。

[code]

    <link rel="stylesheet" color="blue" href="//cdnjs.cloudflare.com/ajax/libs/milligram/1.1.0/milligram.min.css">
    <script>
      !function(f){f('orange'/* <<< Setting a milligram theme color! */)}(function(c){var h=document.getElementsByTagName('head')[0],s=document.createElement('style'),r=document.createTextNode(".button,.button.button-disabled:focus,.button.button-disabled:hover,.button[disabled]:focus,.button[disabled]:hover,button,button.button-disabled:focus,button.button-disabled:hover,button[disabled]:focus,button[disabled]:hover,input[type=button],input[type=button].button-disabled:focus,input[type=button].button-disabled:hover,input[type=button][disabled]:focus,input[type=button][disabled]:hover,input[type=reset],input[type=reset].button-disabled:focus,input[type=reset].button-disabled:hover,input[type=reset][disabled]:focus,input[type=reset][disabled]:hover,input[type=submit],input[type=submit].button-disabled:focus,input[type=submit].button-disabled:hover,input[type=submit][disabled]:focus,input[type=submit][disabled]:hover{background-color:#9b4dca;border-color:#9b4dca}.button.button-clear,.button.button-clear.button-disabled:focus,.button.button-clear.button-disabled:hover,.button.button-clear:focus,.button.button-clear:hover,.button.button-clear[disabled]:focus,.button.button-clear[disabled]:hover,.button.button-outline,.button.button-outline.button-disabled:focus,.button.button-outline.button-disabled:hover,.button.button-outline[disabled]:focus,.button.button-outline[disabled]:hover,a,button.button-clear,button.button-clear.button-disabled:focus,button.button-clear.button-disabled:hover,button.button-clear:focus,button.button-clear:hover,button.button-clear[disabled]:focus,button.button-clear[disabled]:hover,button.button-outline,button.button-outline.button-disabled:focus,button.button-outline.button-disabled:hover,button.button-outline[disabled]:focus,button.button-outline[disabled]:hover,input[type=button].button-clear,input[type=button].button-clear.button-disabled:focus,input[type=button].button-clear.button-disabled:hover,input[type=button].button-clear:focus,input[type=button].button-clear:hover,input[type=button].button-clear[disabled]:focus,input[type=button].button-clear[disabled]:hover,input[type=button].button-outline,input[type=button].button-outline.button-disabled:focus,input[type=button].button-outline.button-disabled:hover,input[type=button].button-outline[disabled]:focus,input[type=button].button-outline[disabled]:hover,input[type=reset].button-clear,input[type=reset].button-clear.button-disabled:focus,input[type=reset].button-clear.button-disabled:hover,input[type=reset].button-clear:focus,input[type=reset].button-clear:hover,input[type=reset].button-clear[disabled]:focus,input[type=reset].button-clear[disabled]:hover,input[type=reset].button-outline,input[type=reset].button-outline.button-disabled:focus,input[type=reset].button-outline.button-disabled:hover,input[type=reset].button-outline[disabled]:focus,input[type=reset].button-outline[disabled]:hover,input[type=submit].button-clear,input[type=submit].button-clear.button-disabled:focus,input[type=submit].button-clear.button-disabled:hover,input[type=submit].button-clear:focus,input[type=submit].button-clear:hover,input[type=submit].button-clear[disabled]:focus,input[type=submit].button-clear[disabled]:hover,input[type=submit].button-outline,input[type=submit].button-outline.button-disabled:focus,input[type=submit].button-outline.button-disabled:hover,input[type=submit].button-outline[disabled]:focus,input[type=submit].button-outline[disabled]:hover{color:#9b4dca}input[type=email]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,pre,select:focus,textarea:focus{border-color:#9b4dca}select:focus{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiICAgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjkgMTQiICAgaGVpZ2h0PSIxNHB4IiAgIGlkPSJMYXllcl8xIiAgIHZlcnNpb249IjEuMSIgICB2aWV3Qm94PSIwIDAgMjkgMTQiICAgd2lkdGg9IjI5cHgiICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjQgcjk5MzkiICAgc29kaXBvZGk6ZG9jbmFtZT0iY2FyZXQtZ3JheS5zdmciPjxtZXRhZGF0YSAgICAgaWQ9Im1ldGFkYXRhMzAzOSI+PHJkZjpSREY+PGNjOldvcmsgICAgICAgICByZGY6YWJvdXQ9IiI+PGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+PGRjOnR5cGUgICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzICAgICBpZD0iZGVmczMwMzciIC8+PHNvZGlwb2RpOm5hbWVkdmlldyAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiICAgICBib3JkZXJvcGFjaXR5PSIxIiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIgICAgIGdyaWR0b2xlcmFuY2U9IjEwIiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSI5MDMiICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI1OTQiICAgICBpZD0ibmFtZWR2aWV3MzAzNSIgICAgIHNob3dncmlkPSJ0cnVlIiAgICAgaW5rc2NhcGU6em9vbT0iMTIuMTM3OTMxIiAgICAgaW5rc2NhcGU6Y3g9Ii00LjExOTMxODJlLTA4IiAgICAgaW5rc2NhcGU6Y3k9IjciICAgICBpbmtzY2FwZTp3aW5kb3cteD0iNTAyIiAgICAgaW5rc2NhcGU6d2luZG93LXk9IjMwMiIgICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJMYXllcl8xIj48aW5rc2NhcGU6Z3JpZCAgICAgICB0eXBlPSJ4eWdyaWQiICAgICAgIGlkPSJncmlkMzA0MSIgLz48L3NvZGlwb2RpOm5hbWVkdmlldz48cG9seWdvbiAgICAgcG9pbnRzPSIwLjE1LDAgMTQuNSwxNC4zNSAyOC44NSwwICIgICAgIGlkPSJwb2x5Z29uMzAzMyIgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuMzU0MTEzODcsMCwwLDAuNDgzMjkxMSw5LjMyNDE1NDUsMy42MjQ5OTkyKSIgICAgIHN0eWxlPSJmaWxsOiNkMWQxZDE7ZmlsbC1vcGFjaXR5OjEiIC8+PC9zdmc+)}".replace(/#9b4dca/g,c));s.media='screen';s.type='text/css';s.appendChild(r);h.appendChild(s);});
    </script>
    
[/code]


CC BY-SA 3.0
2016-05-14T16:25:04.733
24862
2016-05-15T12:53:26.423
2016-05-15T12:53:26.423
8351
8351
24857
answer