DigiPress

Highly Flexible WordPress Theme

メニュー

[React]インラインスタイル用の数値に勝手に「px」がつくのを回避する方法

WordPress カスタムブロック開発関連メモ。

RangeControl などで指定された数値を元に、例えば CSS の opacity プロパティ用の値を取得すると、ブロックエディター上ではうまく不透明度が反映されますが、実際にフロントエンドのページで確認してみると反映されていません。

save 関数例
export const save = props => {
	const {
		attributes,
	} = props

	const {
		text,
		opacity
	} = attributes

	// インラインスタイル用の CSS
	const style = {
		'--bg-opacity' : opacity
	}

	// インラインスタイルをセット
	const blockProps = useBlockProps.save( {
		style: style
	} )

	return
		<div { ...blockProps }>
			<div className="wrapper__inner">
				<RichText.Content
					tagName='span'
					value={ text }
				/>
			</div>
		</div>
}

出力されたブロックの要素を確認してみると、ブロックのラッパー要素にインラインスタイルで挿入したはずの opacity プロパティの数値に「px」という単位名が勝手に追加されています。

ブロックの実際の出力内容
<div class="wp-block-my-block" style="--bg-opacity:0.5px">
	<span>てきすと</span>
</div>

React のドキュメントにはこうありました。

React will automatically append a “px” suffix to certain numeric inline style properties. If you want to use units other than “px”, specify the value as a string with the desired unit.

https://reactjs.org/

つまり、特定の数値のインラインスタイルプロパティは、React で自動的に「px」接尾辞を付けるという仕様のようです。

これを回避するには、対象の変数は数値ではなく文字列として処理します。

文字列として値をセット
const style = {
	'--bg-opacity' : `${ opacity }`
}
Share / Subscribe
Facebook Likes
Tweets
Hatena Bookmarks
Pinterest
Pocket
Feedly
Send to LINE