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

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

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

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

482閲覧

CSS hoverColorの指定について。

MOTOMUR

総合スコア195

Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2017/11/20 02:27

編集2017/11/21 10:39

material ui cardにて。

cardHeaderのtitleにカーソルがあった時に、リンクがあるため色を変えようと思い、このようにかいたのですが、

js

1import React, { Component } from 'react' 2import { Card, CardActions, CardHeader, CardText, CardTitle } from 'material-ui/Card' 3import FlatButton from 'material-ui/FlatButton' 4import { List } from 'material-ui/List' 5import Dialog from 'material-ui/Dialog' 6import Avatar from 'material-ui/Avatar' 7import ChatIcon from 'material-ui/svg-icons/communication/chat-bubble-outline' 8import Badge from 'material-ui/Badge' 9import { withStyles } from 'material-ui/styles' 10 11import Linkify from 'react-linkify' 12import Timestamp from 'react-timestamp' 13 14import firebase from 'firebase' 15 16import CommentRef from './CommentRef' 17import CommentForm from './CommentForm' 18 19 20const myStyle = { 21 title: { 22 '&:hover': { 23 background: '#E0F7FA', 24 color:'white' 25 }, 26 paddingTop:'0' 27 } 28} 29 30class PostRef extends Component { 31 constructor(props) { 32 super(props); 33 this.state = { 34 open:false, 35 star:'', 36 profile_image:'', 37 postOpen:false, 38 }; 39 } 40 41 handleClose = () => { 42 this.setState({open: false,postOpen:false}); 43 } 44 45 onCommentFncOpen = () => { 46 this.setState({open:true}) 47 } 48 49 handleCommentSubmit = (val) =>{ 50 this.writeNewComment(val) 51 } 52 53 handlePostOpen = () => { 54 this.setState({postOpen:true}) 55 } 56 57 writeNewComment(val){ 58 const self = this 59 var newCommentKey = firebase.database().ref().child('comments').push().key 60 61 firebase.database().ref('posts/' + self.props.post.postId + '/postComment').once("value").then(function(snapshot) { 62 const postCommentData = snapshot.val() 63 var commentData = { 64 author: self.props.author, 65 uid: self.props.myuid, 66 body: val, 67 commentId: newCommentKey, 68 profile_image:self.props.profile_image, 69 } 70 var updates = {} 71 updates['/comments/' + newCommentKey] = commentData 72 updates['posts/' + self.props.post.postId + '/postComment/commentCount/'] = postCommentData.commentCount+1 73 updates['posts/' + self.props.post.postId + '/postComment/comments/' + newCommentKey]= true 74 console.log(updates) 75 return firebase.database().ref().update(updates); 76 }) 77 this.setState({open:false}) 78 } 79 80 fetchPostsData(){ 81 const self = this 82 const userId = this.props.post.uid 83 firebase.database().ref('/users/'+userId).once('value',function(snapshot) { 84 self.setState({ 85 profile_image:snapshot.val().profile_image, 86 star:snapshot.val().userStar.starCount, 87 }) 88 }) 89 } 90 91 componentDidMount(){ 92 this.fetchPostsData() 93 } 94 95 render(){ 96 const actions = [ 97 <FlatButton 98 label="Cancel" 99 primary={true} 100 onClick={this.handleClose} />,] 101 return( 102 <Card style={{ 103 width:'300px', 104 display: 'inline-block', 105 marginRight:'10px', 106 verticalAlign: 'top',}} > 107 <CardHeader 108 title={ 109 <div> 110 <Badge 111 badgeContent={this.state.star} 112 secondary={true} 113 badgeStyle={{top: 12, right: 12,fontSize:1}} 114 > 115 <Avatar src={this.state.profile_image} /> 116 </Badge> 117 {this.props.post.author} 118 </div> 119 } 120 style={{ 121 height:'70px', 122 cursor: 'pointer', 123 paddingTop:'0', 124 verticalAlign:'top' 125 }} 126 classes={{ title: this.props.classes.title }} 127 onClick={() => this.props.herfUserPage(this.props.post.uid)} /> 128 <CardTitle title={this.props.post.title} 129 subtitle={ 130 <Timestamp time={this.props.post.timestamp/1000} format='full' includeDay/> 131 } 132 titleStyle={{ 133 paddingTop:'0', 134 marginTop:'-20' 135 }}/> 136 <CardText style={{ 137 paddingTop:'0', 138 }} 139 onClick={this.handlePostOpen} 140 > 141 <Linkify> {this.props.post.body} </Linkify> 142 <br /> 143 <p style={{ 144 textAlign:'center' 145 }}> 146 <img src={this.props.post.post_image} 147 alt="" 148 style={{ 149 objectFit:'cover', 150 width:'270px', 151 hight:'270px',}}></img> 152 </p> 153 </CardText> 154 <CardActions style={{ 155 paddingTop:'0', 156 }}> 157 <FlatButton 158 secondary 159 label="Comment" 160 onClick={this.onCommentFncOpen} /> 161 </CardActions> 162 163 <CardHeader showExpandableButton 164 title={ <Badge badgeContent={this.props.post.postComment.commentCount} 165 primary={true} 166 badgeStyle={{fontSize:1,top: 12, right: 12}} > 167 <ChatIcon style={{size:'10px'}}/> 168 </Badge> } 169 style={{ 170 paddingTop:'0', 171 marginTop:'-10', 172 marginBottom:'-25' 173 }}/> 174 <List expandable> 175 <CommentRef postId={this.props.post.postId} uid={this.props.post.uid}/> 176 </List> 177 178 <Dialog title="write comment" 179 actions={actions} 180 modal={false} 181 open={this.state.open} 182 onRequestClose={this.handleClose} > 183 <CommentForm onSubmit={this.handleCommentSubmit.bind(this)}/> 184 </Dialog> 185 186 <Dialog title={this.props.post.title} 187 actions={actions} 188 modal={false} 189 open={this.state.postOpen} 190 onRequestClose={this.handleClose} > 191 <div style={{ 192 paddingTop:'0', 193 }} > 194 <Linkify> {this.props.post.body} </Linkify> 195 <br /> 196 <p style={{ 197 textAlign:'center' 198 }}> 199 <img src={this.props.post.post_image} 200 alt="" 201 style={{ 202 objectFit:'cover', 203 width:'100%', 204 hight:'100%',}}></img> 205 </p> 206 </div> 207 </Dialog> 208 </Card> 209 )} 210 211} 212export default withStyles(myStyle)(PostRef) 213

これでは色を変えることができません。どこで間違えてますでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

material-ui v1.0 なら、js上でホバー時などのスタイルを与えることができます。

Overriding with classes

(右の"<>"を押すとソースが見れる)

v1.0 からは JSS というのを使っているらしく、それにより js の中でホバー時などのスタイルを指定できるみたいです。

lang

1const myStyle = { 2 title: { 3 '&:hover': { 4 background: 'black' 5 }, 6 background: 'white' 7 } 8}

このスタイルオブジェクトをwithStylesで inject し、CardHeaderの方でtitleclassを override すればOKです。

CardHeader - CSS API

lang

1 <CardHeader 2 classes={{ title: this.props.classes.title }} 3 title="This is a pen" 4 />

Demo
Decoratorを使ってますが使う必要はありません。

投稿2017/11/20 09:45

karamarimo

総合スコア2551

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

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

karamarimo

2017/11/20 09:56

そもそもですが、hoverBackgroundColor という css property は存在しないと思います。
MOTOMUR

2017/11/20 15:38

こちらでもお世話になって申し訳ないです。 回答ありがとうございます。一つ躓いてしまったのですが、デコレータを使える仕様ではないのでどのように導入しようか困っています。 const myStyle = { title: { '&:hover': { background: '#E0F7FA', color:'white' }, paddingTop:'0' } } @withStyles(myStyle) class PostRef extends Component { これの@の部分はどのように変えたら良いでしょうか。
MOTOMUR

2017/11/21 06:00

申し訳ありません。現在使用しているmaterial uiのバージョンが0.19.4(http://www.material-ui.com/#/get-started/usage)でございまして。1.00の導入を検討し、頑張ってみたのですが、AppBarのmaterialui自身のjsファイルにエラーが出たため、挫折してしまいました。 0.19.4ではどのようにしたら良いでしょうか?
karamarimo

2017/11/21 06:12

できないことはないと思います。どのようなエラーですか?
MOTOMUR

2017/11/21 06:34

TypeError: Object(...) is not a function ./src/views/components/PostRef.js src/views/components/PostRef.js:212 209 | )} 210 | 211 | } > 212 | export default withStyles(myStyle)(PostRef) このようなエラーです
karamarimo

2017/11/21 07:19

withStyles の import はしましたか? import { withStyles } from 'material-ui/styles';
MOTOMUR

2017/11/21 09:27

行いました。
karamarimo

2017/11/21 09:58 編集

ではコード全体を載せてもらえますか(質問文に)?
MOTOMUR

2017/11/21 10:40

載せさせていただきました。
karamarimo

2017/11/21 11:32

material-ui v1.0.0 では api が少し変わったりしてます(CardTitle, CardText の削除など)ので、そのままのコードでは動きません。 乗り換えるのが面倒なら、CardHeader 全体にスタイルを適用すればいいです。 そもそも CardHeader の title 部分だけにホバー時のスタイルを追加したいのか、CardHeader 全体なのか、どちらでしょうか。 後者ならCardHeader に className プロパティで自由にクラス名を付けることができますので、外部の css でその スタイルを指定すればいいです。
MOTOMUR

2017/11/21 11:44

なるほど、今までやったことのないstyleの指定の仕方なので、いまいちイメージできないのですが、とってもシンプルなデモいただけますでしょうか・・
MOTOMUR

2017/11/22 04:53

.PushableCardHeader{ paddingTop:0, marginTop:-10, marginBottom:-25, '&:hover': { background: #E0F7FA; color:white; }; } このようにCSSを記述し、 <CardHeader showExpandableButton title={ <Badge badgeContent={this.props.post.postComment.commentCount} primary={true} badgeStyle={{fontSize:1,top: 12, right: 12}} > <ChatIcon style={{size:'10px'}}/> </Badge> } className="PushableCardHeader"/> このようにスタイルを指定したのですが、これでは背景色が変わりません。 CSSの文法が未熟なので、そこが間違っているのかなと思っていますが。。。 どのように直したらいいでしょうか? また、このようにスタイルを指定してもwithStyleは必要でしょうか?(なしで動かしています。)
karamarimo

2017/11/22 07:26

それはCSSではないですね...。 ご自分で勉強してくださいとしか言いようがないですが、訂正だけするとこうです。 https://pastebin.com/wHR5dL4z > このようにスタイルを指定してもwithStyleは必要でしょうか? material-ui 0.* には withStyles は存在しません。
MOTOMUR

2017/11/22 07:50 編集

普通に勘違いしてました。お騒がせしました。ありがとうございます
karamarimo

2017/11/22 07:53

コードを質問文に載せてもらえますか?
MOTOMUR

2017/11/22 08:11

勘違いで下側にクラスネームを入れておりました。。。 hoverが不自然なので、もう少し枠を小さく色をつけたいのですが、そのようなことは可能でしょうか? 全域の枠になってしまっているので、内側の枠に調整したいのですが。
karamarimo

2017/11/22 09:11

強引ですが、CardHeaderの中身はこのようになっているので、 https://imgur.com/a/VCQ8Z (<div style="padding: 16px; ..."> が CardHeader の root subtitle ではなく title だけにしたいなら .PushableCardHeader > div > span:first とすればいいのではないでしょうか。
MOTOMUR

2017/11/22 09:38

ありがとうございます。申し訳ないですが、CSSの記述の知識は赤子のような状態でして、理解できないです。 CardHeaderの中身が <CardHeader> <div> <span> </span></div></CardHeader> となっているってことでしょうか?
karamarimo

2017/11/22 09:51

いえ、画像を見ていただければわかると思いますが、 <div><div><span></span></div></div> となっています。DOM tree において実際に <CardHeader> という要素は存在しません。 .PushableCardHeader > div > span:first-child (さきほどは間違えましたが :first ではなく :first-child でした) は .PushableCardHeader の子要素 div の1番目の子要素 span という意味です。 今、root の div に PushableCardHeader クラスがついているので、これで Title にあたる要素を選ぶことができます。
MOTOMUR

2017/11/23 14:59

それを実現するにはcssを .PushableCardHeader div span{ } とすればいいってことですね! だいぶ理解できました。ありがとうございます! CSSではなく機能で困ってしまったので、あちらでまたお世話になります。。。 長らくお答えありがとうございました!
karamarimo

2017/11/23 16:50

いえ、 .PushableCardHeader > div > span:first-child { ... } というつもりだったんですが...。 .PushableCardHeader div span だと subtitle の方にも適用されてしまうのでは?
MOTOMUR

2017/11/24 00:49

.PushableCardHeader { margin: 5px; } .PushableCardHeader div { vertical-align:middle; margin-left: -3px; margin-top: -3px; } .PushableCardHeader div span{ height:30px; cursor: pointer; } .PushableCardHeader:hover{ background: rgba( 0 , 151 , 167 ,0.3); color: white; display: block; transition: 1.0s ; margin: 5px; /*枠を丸く*/ border-radius: 3px; /* CSS3草案 */ -webkit-border-radius: 3px; /* Safari,Google Chrome用 */ -moz-border-radius: 3px; /* Firefox用 */ } subtitleも含めて選択したかったので、こちらのようにしました。 spanの中身を指定するにはspan:first-childとすればできるのですね、勉強になります。 他の要素の場合second-childだったりするんですかね? 丁寧にありがとうございます。
karamarimo

2017/11/24 05:22

> spanの中身を指定するにはspan:first-childとすればできるのですね :first-child は親から見て1番目の子要素である ということです。 first-child, last-child 以外は nth-child で指定することになります。 http://www.htmq.com/selector/nth-child.shtml
MOTOMUR

2017/11/24 05:28

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問