- 投稿日:2020-11-15T21:50:00+09:00
「Qiita」と「WordPress」のRSSを取得して、PHPで静的HTMLに表示する方法
外部サイトのRSS情報を取得して表示させる方法
参考にしたページはこのあたり。
PHPで外部サイトのRSS情報を取得して表示させる方法。 - 株式会社オンズ
https://on-ze.com/archives/1615新着情報を受け取る!PHPでRSSを取得する方法 | TechAcademyマガジン
https://techacademy.jp/magazine/18803これで「Qiita」の記事を新着情報に表示させたい的なことをやろうとして、
サンプルはその通りにしたら表示されるのですけど、
「Qiita」のRSSフィードだと上手く行かなくてですねー、結論として言うと
ページによって「RSSフィード」の形式が違うのが原因でした。output-rss-qiita.php
それで「Qiita」のRSS形式に合わせた
RSSフィードを取得して表示する「.php」がこちら<!-- ?output-rss.php --> <?php // RSSフィードからRSSを取得 $feed = file_get_contents('https://qiita.com/sarap422/feed'); // XML解析を行う上で、XMLで不正文字と扱われる対象を空文字に変換 $invalid_characters = '/[^\x9\xa\x20-\xD7FF\xE000-\xFFFD]/'; $feed = preg_replace($invalid_characters, '', $feed); // 文字列をXMLとして解析して、SimpleXMLElementクラスのインスタンスに変換 $rss = simplexml_load_string($feed); ?> <?php date_default_timezone_set('Asia/Tokyo'); $count = 0; ?> <dl class="row mx-auto"> <?php foreach ($rss->entry as $entry) : ?> <?php // 取得回数の指定 if ($count >= 3) { break; } ?> <?php $entry_title = $entry->title; $entry_pub = date("Y-m-d", strtotime($entry->published)); $entry_url = $entry->url; $entry_cont = mb_strimwidth(strip_tags($entry->content), 0, 110, "…Read More", "utf-8"); ?> <dt class="col-lg-4"><?php echo $entry_pub; ?></dt> <dd class="col-lg-8 text-left"><a href="<?php echo $entry_url; ?>" target="_blank" rel="noopener noreferrer"> <?php echo $entry_title; ?></dd> </a></li> <?php $count++; ?> <?php endforeach; ?> </dl> <!--ƒ /?output-rss.php -->output-rss-wp.php
ついでに「WordPress」は「記事データの取得」から新着情報を表示する方法もあるのですけど、「RSSフィードからの取得」に統一した方がデザインとかたぶんやりやすいですよね?
ということで、「WordPress」のRSS形式に合わせた
RSSフィードを取得して表示する「.php」がこちら<!-- ?output-rss.php --> <?php // RSSフィードからRSSを取得 $feed = file_get_contents('https://sarap422.com/wp1/feed'); // XML解析を行う上で、XMLで不正文字と扱われる対象を空文字に変換 $invalid_characters = '/[^\x9\xa\x20-\xD7FF\xE000-\xFFFD]/'; $feed = preg_replace($invalid_characters, '', $feed); // 文字列をXMLとして解析して、SimpleXMLElementクラスのインスタンスに変換 $rss = simplexml_load_string($feed); ?> <?php date_default_timezone_set('Asia/Tokyo'); $count = 0; ?> <dl class="row mx-auto"> <?php foreach ($rss->channel->item as $item) : ?> <?php // 取得回数の指定 if ($count >= 3) { break; } ?> <?php $item_title = $item->title; $item_pub = date("Y-m-d", strtotime($item->pubDate)); $item_link = $item->link; $item_desc = mb_strimwidth(strip_tags($item->description), 0, 110, "…Read More", "utf-8"); ?> <dt class="col-lg-4"><?php echo $item_pub; ?></dt> <dd class="col-lg-8 text-left"><a href="<?php echo $item_link; ?>" target="_blank" rel="noopener noreferrer"> <?php echo $item_title; ?></a></dd> <?php $count++; ?> <?php endforeach; ?> </dl> <!--ƒ /?output-rss.php -->※
row
やmx-auto
、col-lg
は、「Bootstrap」のclassなので、適当に変えてください。「foreach」構文について
ちなみに「foreach」構文は、
<?php foreach ($array as $parameter){ 繰り返したい内容 } ?><?php foreach ($array as $parameter) : ?> 繰り返したい内容 <?php endforeach; ?>の、どちらでもいいらしいのですけど、
今のところ自分の場合は、<>
で囲んだ方が、htmlタグもそのまま書けるし、
見やすいかなーということで、その書き方にしました。
ついでに引っ張ってくる回数($count >= 3
)も指定できるように。あと「.htaccess」に、
AddHandler fcgid-script .html
を書いて
静的HTMLに「output-rss.php」をそのまま書けばたぶん動きそうなんですが、それだとHTMLがゴチャゴチャするので、
「output-rss.php」を「WordPress」の「theme」内に置いて、
上位ディレクトリの「index.html」から「get_template_part」で
「output-rss.php」を引っ張ったら、
何故かディレクトリ指定することもなくそのまま動きました。<!-- 「get_template_part」はWordPress構文 --> <?php get_template_part ( 'output-rss-qiita' ); ?> <?php get_template_part ( 'output-rss-wp' ); ?>本当は、WordPressの「theme」外の「.php」はそれで置き場変えたいのですけど、
ちょっとよくわからなくて、今PHPの勉強中だし時間かけて無理して調べるところじゃないので現状そんな感じで以上です。
- 投稿日:2020-11-15T21:05:17+09:00
現役保育士+駆け出しエンジニア
初めまして。現在保育士をしていて、WEB系エンジニアに転職を考えているNOZOMIです。
学習を始めて1ヶ月が経とうとしています。
現在の私の学習状況と取り組みについてまとめておこうと思います。ドットインストール
完了済み
- 実践!アプリ紹介ページを作ろう (全16回)
- 詳解HTML 基礎文法編 (全22回)
- はじめてのRuby (全9回)
- JavaScriptでモーダルウィンドウを作ろう (全8回)
- JavaScriptでタブメニューを作ろう (全10回)
- はじめてのPython (全9回)
- はじめてのJavaScript (全11回)
- 【試験運用中】はじめてのPHP [macOS版] (全12回)
- 【試験運用中】Dockerを導入しよう [macOS版] (全2回)
- はじめてのCSS (全15回)
- はじめてのHTML (全14回)
進行中
- 詳解CSS 基礎文法編 (全33回)
- CSSでチャット風のUIを作ってみよう (全7回)
- 詳解HTML フォーム部品編 (全8回)
- Ruby入門 (全26回)
- 詳解JavaScript 基礎文法編 (全26回)
- 詳解PHP 基礎文法編 (全34回)
かなりのスロースターターと自負しております・・・。徐々にエンジン全開にして行けるように頑張ります!!
雑食系サロン入会
YOUTUBEがきっかけで勝又さんの雑食系サロンに入会しました。かなりレベルの高い方がたくさんいらっしゃって、ポートフォリオも参考にさせていただいています。オフ会やもくもく会等参加したいと考えています。
MENTA
雑食系サロンでのYOUTUBEライブで、未経験者はメンターをつけてコードレビューをしてもらうべきとのお話を伺い、MENTAに登録し、chilldrainさんに5000円でポートフォリオ作りのロードマップを作成していただいています。
企業探し
保育士の経験を活かして働いて行けるような、保育系システムの自社開発系企業に絞りました。
- エクシオジャパン
- 日本ソフト開発株式会社
- キッズコネクト株式会社
来年の4月入社を目指して、頑張ります!!
- 投稿日:2020-11-15T17:17:35+09:00
【初心者向け】ボタンホバー時に透過しても背景が見えないようにする方法
どうも7noteです。透過時に背景が見えてしまう対策方法
背景色が入っている箇所の上にボタンを配置した時、ボタンがhoverで透過した際に背景色がうっすら見えてしまう対策方法について。
画像を使わずに、背景色で作成したボタンであれば次の方法で対策をすることができます。
(※ボタンが画像の場合はこちら)
ソース
index.html<div class="box"> <div class="btnA">透けちゃう。</div> <div class="btnB">透けないよ!</div> </div>style.css.box { padding: 50px; /* 適当な余白を確保 */ background: #f36 25%, /* 分かりやすいよう赤のストライプを指定 */ #fff 25%, #fff 50%, #f36 50%, #f36 75%, #fff 75%, #fff ); background-size: 40px 40px; /* 適度な大きさに指定 */ } .btnA, .btnB { width: 150px; /* 横幅を適当なサイズに指定 */ text-align: center; /* 文字を中央揃え */ background: #eee; /* 背景色をグレーに */ padding: 10px 30px; /* 内側の余白を指定 */ margin: 10px; /* ボタン同士が見やすいよう適度な余白 */ } .btnA:hover { opacity: .9; /* これだと透けてしまう */ } .btnB:hover { background: #fafafa; /* これなら透けない */ }解説
手法は、hover時に透過するのをやめ、背景色を変更することです。
こうすることにより、当たり前ですが透過はしないので後ろが透けることはありません。
背景色が単色やグラデーションでも対応できますが、画像の時ではこの方法は使えないので注意。まとめ
細かいところなのでチェック時に見落としがちですが、対応方法をしっていればなんてことないのでしっかり直しておきたいポイントです。
おそまつ!
~ Qiitaで毎日投稿中!! ~
【初心者向け】HTML・CSSのちょいテク詰め合わせ
- 投稿日:2020-11-15T17:02:50+09:00
Webページ表示高速化改善、始めます!
背景
- 先週からWebページ高速化を勉強しはじめて、なんとか最初の改善リリースを終えました。
- TOPページとLPをリニューアルしたのですが、表示速度が極端に低くなった(PageSpeed Insights で5/100点!)ため、急いでWebページ高速化に取り組まざるをえなくなった。最終的には数日程度で50点近くまで上げることができた。
- とにかく急いでやったプロジェクトだったんですが、似たような状況に追い込まれた人のために、やったことを残しておきます。
やったこと
1. 「初歩からのPageSpeed Insights」 を読む
とりあえずまず以下の本を読みました。
重いサイトを軽くする、Webページ表示速度の高速化10の基本: 初歩からのPageSpeed Insights (にししふぁくとりー叢書)
- Amazon Unlimitedに加入してれば無料で読める
- 少ない分量でまとまっている。
- 全部読まなくても、自分に関係がありそうな部分だけを拾い読む -> 可能な施策だけ着手 の流れが容易。
まずは、この本の内容と、自分のWebサイトのPageSpeed Insightsの結果を見比べて、効果がありそうなものから着手していきました。基本的な知識は全部この本で得られたので、この記事では、上記の本で足りなかったことを解説していきます。
2. 外部js, youtubeなどの超遅延ロード
超遅延ロード というのは私の造語ですが、
defer
などを用いた単なるjsの遅延ロードではなく、「Userが何らかのアクションをしたらロードする」というアクロバティックな遅延ロード手法です。この記事で紹介されてました。うちのサイトの場合、tweetのjavascriptの埋め込み と youtubeの埋め込み が表示速度の悪化の大部分の原因を占めていたので、 これが最も効果があった施策でした。
以下のコードで、Userの何らかのアクションに引っかけて、
<script>
タグや<iframe>
などのDOMをinsertします。上記記事からコードの大部分をお借りしております。lazy_load.js(function(window, document) { function insertResource() { // twitterの読み込み var tw_script = document.createElement('script'); tw_script.type = 'text/javascript'; tw_script.defer = true; tw_script.src = 'https://platform.twitter.com/widgets.js'; document.getElementById('js-twitter-load').appendChild(tw_script); // 対象のページに<div id="js-twitter-load"></div> を埋め込んでおく // youtubeの読み込み var youtube = document.createElement('iframe'); youtube.className = "youtube__iframe"; youtube.src = "https://www.youtube.com/embed/xxxxxxxxx"; youtube.frameborder = 0 youtube.allow = "autoplay; encrypted-media" youtube.allallowfullscreenow = "" document.getElementById('js-youtube').appendChild(youtube); // 対象のページに<div id="js-youtube"></div> を埋め込んでおく } // 遅延読込み var lazyLoad = false; function onLazyLoad() { if (lazyLoad === false) { // 複数呼び出し回避 + イベント解除 lazyLoad = true; window.removeEventListener('scroll', onLazyLoad); window.removeEventListener('mousemove', onLazyLoad); window.removeEventListener('mousedown', onLazyLoad); window.removeEventListener('touchstart', onLazyLoad); window.removeEventListener('keydown', onLazyLoad); insertResource(); } } window.addEventListener('scroll', onLazyLoad); window.addEventListener('mousemove', onLazyLoad); window.addEventListener('mousedown', onLazyLoad); window.addEventListener('touchstart', onLazyLoad); window.addEventListener('keydown', onLazyLoad); window.addEventListener('load', function() { // ドキュメント途中までスクロールしている場合(更新時 or ページ内リンク) if (window.pageYOffset) { onLazyLoad(); } }); })(window, document);あとは
lazy_load.js
自体を通常の遅延読み込みで埋め込みます。index.html<script type="text/javascript" src="/js/lazy_load.js" defer="defer" />3. CSS と WebFont の遅延ロード
defer
を使えば簡単にできるjavascriptの遅延ロードと違って、CSSの遅延ロードはちょっと面倒ですよね。
以下の記事で簡単な方法が紹介されていたので、活用しました。
media="print" onload="this.media='all'"
を追加するだけ。便利。以下は Uikit のcssを埋め込む時の例です。
index.html<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/uikit@3.5.9/dist/css/uikit.min.css" media="print" onload="this.media='all'" />WebFont(例:GoogleFontsの"Noto Sans JP")でも同様のことができます。
1. Google Fonts から 埋め込み用のタグを取得
2.media=”print” onload="this.media='all'"
を追記するindex.html<link rel="preconnect" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap" rel="stylesheet" media=”print” onload="this.media='all'">ファーストビューの描画に必要なCSSだけを同期的に読み込み、それ以外のCSSやWebFontは全部遅延読み込みにしてしまいます。
4.
.webp
形式の画像の導入上記までの施策で、うちのサイトの点数はだいたい改善されたのですが、残ったのが画像の重さ問題。
PageSpeed Insightsがしつこく勧めてくるので、.webp形式の画像の導入を決めました。
.webp 形式は .jpg や .png より軽いのが利点ですが、対応していないブラウザも多いので、他の形式の画像と併用する必要があります。
<img>
タグを使用している場合は、以下の書き方でOK。index.html<picture class="thumb"> <source srcset="/img/top/thumb.webp" type="image/webp"> <img class="image" src="/img/top/thumb.jpg" loading="lazy" /> </picture>問題は CSSの background-image などで画像を指定している場合ですね。
modernizr.jsを使用することで、ブラウザの対応状況に合わせてCSSを切り替えることができます。詳しくは以下記事をどうぞ。5. Resource Hintsの使用
そこまでやる必要があるのかはよくわからなかったんですが、 Resource Hints なるものを使うことで、必要になるであろうリソースを先にブラウザに伝えることができるようです。
今回の場合、ファーストビューのメインビジュアル画像をCSSのbackground-imageで指定してたので、HTML -> CSS -> 画像 という3要素のリクエストチェーンになってしまうので、読み込み開始を早めるために使用しました。index.html<link rel="preload" href="/img/top/mainvisual.webp" as="image">これにより、リクエストチェーンを HTML -> 画像 に短縮できます。
体感でしかないけど、ファーストビューの表示がちょっとだけ早くなったような気はする。結果
これだけやったところ、5/100点から50/100点にまでは上がったんですが、まだ Largest Contentful Paint(LCP) の点数が辛くてそれ以上にはならないようです。なんでなんや・・・。
もうちょっと勉強したらまた続きを書こうと思います。参考
- 投稿日:2020-11-15T17:02:50+09:00
Webページ表示速度高速化、始めます!
背景
- 先週からWebページ高速化を勉強しはじめて、なんとか最初の改善リリースを終えました。
- TOPページとLPをリニューアルしたのですが、表示速度が極端に低くなった(PageSpeed Insights で5/100点!)ため、急いでWebページ高速化に取り組まざるをえなくなった。最終的には数日程度で50点近くまで上げることができた。
- とにかく急いでやったプロジェクトだったんですが、似たような状況に追い込まれた人のために、やったことを残しておきます。
やったこと
1. 「初歩からのPageSpeed Insights」 を読む
とりあえずまず以下の本を読みました。
重いサイトを軽くする、Webページ表示速度の高速化10の基本: 初歩からのPageSpeed Insights (にししふぁくとりー叢書)
- Amazon Unlimitedに加入してれば無料で読める
- 少ない分量でまとまっている。
- 全部読まなくても、自分に関係がありそうな部分だけを拾い読む -> 可能な施策だけ着手 の流れが容易。
まずは、この本の内容と、自分のWebサイトのPageSpeed Insightsの結果を見比べて、効果がありそうなものから着手していきました。基本的な知識は全部この本で得られたので、この記事では、上記の本で足りなかったことを解説していきます。
2. 外部js, youtubeなどの超遅延ロード
超遅延ロード というのは私の造語ですが、
defer
などを用いた単なるjsの遅延ロードではなく、「Userが何らかのアクションをしたらロードする」というアクロバティックな遅延ロード手法です。この記事で紹介されてました。うちのサイトの場合、tweetのjavascriptの埋め込み と youtubeの埋め込み が表示速度の悪化の大部分の原因を占めていたので、 これが最も効果があった施策でした。(あと、tweetとyoutubeはページのかなり下の方のコンテンツだったので、ロードを遅らせる合理的な理由もありました)
以下のコードで、Userの何らかのアクションに引っかけて、
<script>
タグや<iframe>
などのDOMをinsertします。上記記事からコードの大部分をお借りしております。lazy_load.js(function(window, document) { function insertResource() { // twitterの読み込み var tw_script = document.createElement('script'); tw_script.type = 'text/javascript'; tw_script.defer = true; tw_script.src = 'https://platform.twitter.com/widgets.js'; document.getElementById('js-twitter-load').appendChild(tw_script); // 対象のページに<div id="js-twitter-load"></div> を埋め込んでおく // youtubeの読み込み var youtube = document.createElement('iframe'); youtube.className = "youtube__iframe"; youtube.src = "https://www.youtube.com/embed/xxxxxxxxx"; youtube.frameborder = 0 youtube.allow = "autoplay; encrypted-media" youtube.allallowfullscreenow = "" document.getElementById('js-youtube').appendChild(youtube); // 対象のページに<div id="js-youtube"></div> を埋め込んでおく } // 遅延読込み var lazyLoad = false; function onLazyLoad() { if (lazyLoad === false) { // 複数呼び出し回避 + イベント解除 lazyLoad = true; window.removeEventListener('scroll', onLazyLoad); window.removeEventListener('mousemove', onLazyLoad); window.removeEventListener('mousedown', onLazyLoad); window.removeEventListener('touchstart', onLazyLoad); window.removeEventListener('keydown', onLazyLoad); insertResource(); } } window.addEventListener('scroll', onLazyLoad); window.addEventListener('mousemove', onLazyLoad); window.addEventListener('mousedown', onLazyLoad); window.addEventListener('touchstart', onLazyLoad); window.addEventListener('keydown', onLazyLoad); window.addEventListener('load', function() { // ドキュメント途中までスクロールしている場合(更新時 or ページ内リンク) if (window.pageYOffset) { onLazyLoad(); } }); })(window, document);あとは
lazy_load.js
自体を通常の遅延読み込みで埋め込みます。index.html<script type="text/javascript" src="/js/lazy_load.js" defer="defer" />3. CSS と WebFont の遅延ロード
defer
を使えば簡単にできるjavascriptの遅延ロードと違って、CSSの遅延ロードはちょっと面倒ですよね。
以下の記事で簡単な方法が紹介されていたので、活用しました。
media="print" onload="this.media='all'"
を追加するだけ。便利。以下は Uikit のcssを埋め込む時の例です。
index.html<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/uikit@3.5.9/dist/css/uikit.min.css" media="print" onload="this.media='all'" />WebFont(例:GoogleFontsの"Noto Sans JP")でも同様のことができます。
1. Google Fonts から 埋め込み用のタグを取得
2.media=”print” onload="this.media='all'"
を追記するindex.html<link rel="preconnect" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap" rel="stylesheet" media=”print” onload="this.media='all'">ファーストビューの描画に必要なCSSだけを同期的に読み込み、それ以外のCSSやWebFontは全部遅延読み込みにしてしまいます。
4.
.webp
形式の画像の導入上記までの施策で、うちのサイトの点数はだいたい改善されたのですが、残ったのが画像の重さ問題。
PageSpeed Insightsがしつこく勧めてくるので、.webp形式の画像の導入を決めました。
.webp 形式は .jpg や .png より軽いのが利点ですが、対応していないブラウザも多いので、他の形式の画像と併用する必要があります。
<img>
タグを使用している場合は、以下の書き方でOK。index.html<picture class="thumb"> <source srcset="/img/top/thumb.webp" type="image/webp"> <img class="image" src="/img/top/thumb.jpg" loading="lazy" /> </picture>問題は CSSの background-image などで画像を指定している場合ですね。
modernizr.jsを使用することで、ブラウザの対応状況に合わせてCSSを切り替えることができます。詳しくは以下記事をどうぞ。5. Resource Hintsの使用
そこまでやる必要があるのかはよくわからなかったんですが、 Resource Hints なるものを使うことで、必要になるであろうリソースを先にブラウザに伝えることができるようです。
今回の場合、ファーストビューのメインビジュアル画像をCSSのbackground-imageで指定してたので、HTML -> CSS -> 画像ファイル という3工程のリクエストチェーンになってしまうので、読み込み開始を早めるために使用しました。index.html<link rel="preload" href="/img/top/mainvisual.webp" as="image">これにより、ファーストビューのメインビジュアル画像のリクエストチェーンを HTML -> 画像ファイル の2工程に短縮できます。
体感でしかないけど、ファーストビューの表示がちょっとだけ早くなったような気はする。結果
これだけやったところ、5/100点から50/100点にまでは上がったんですが、まだ Largest Contentful Paint(LCP) の点数が辛くてそれ以上にはならないようです。なんでなんや・・・。
もうちょっと勉強したらまた続きを書こうと思います。参考
- 投稿日:2020-11-15T10:02:53+09:00
HTMLをコードとして実行する前に知るべきこと4選
HTMLの構成
HTMLはコードとして実行する前にやるべきこと・知っておくべきことが4つあります。
まずはHTMLの構成を理解することです。HTMLは主にhead要素とboby要素の2つの要素で構成されています。
それぞれ順にどんな役割があるのかを解説していきます。head要素
この要素はウェブサイトの見た目とは関係のない要素ですが、HTML&CSSを実行するならば欠かすことのできない要素です。
役割としては、ウェブサイトの情報やCSSの読み込み、CSSファイルの情報を記載することが主な役割です。具体例をあげると、ウェブページのタイトルとなる部分(ウェブページのタブの情報)、装飾するためのCSSファイルの指定、外部ファイルの読み込みなどを行います。
要するにウェブページには表示されないけれどページのデザインをしたり、そのページがどんなページなのかを指定したりする下準備をするための要素ということです。それでは実際の記述を見てみましょう。
<head> <meta charaset = "UTF-8"> <title>Qiita</title> <link rel = "stylesheet" href = "style.css"> </head>このようにウェブページの情報やCSSの読み込みをおこなっています。
boby要素
この要素は主にウェブページに表示されるものを記載していく要素です。
つまり、この要素の中に書かれたものが実際にブラウザに表示されるということです。それでは実際のコードを見ていきましょう。
<boby> <h1>これは見出しです</h1> </body>このように実際に表示される内容をboby要素には書き込んでいきます。
今見てきたようにHTMLはhead要素とboby要素の2つの要素で構成されています。「これでウェブページを書いていく準備が整った」と思ってしまいますが、まだ残り2つやるべきことがあります。
HTMLの宣言と開始/終了を示そう
これまで見てきたのはHTMLの構成でしたが、これを理解していないと宣言や開始/終了を誤ってブラウザに表示してしまう、という状況を避けるために、まずは構成を解説しました。
それでは具体的に宣言、開始/終了を見ていきましょう。
!DOCTIPE HTML/html要素
HTMLの記述ではまず「この文章がHTMLである」といったことを示すための宣言をする必要があります。
これを1番最初に記述してから実際のHTMLを記述していきます。そして、宣言をしたらhtmlの始まりと終りを示す必要があります。
つまり、どこからHTMLが始まって、どこまでがHTMLなのかを記述するということです。<!DOCTYPE HTML> <html> <head> </head> <boby> </body> </html>このように記述してからはじめてHTMLの構成を作っていきます。
以上が実際にページを作るため・コードを実行する前にやることです。
この4つの準備をしてようやくウェブページの内容を作成していきます。
- 投稿日:2020-11-15T09:06:15+09:00
【JavaScript】要素に指定したCSSスタイルを取得したい!
プログラミング勉強日記
2020年11月15日
ドットインストールでJavaScriptを学習中にふと、『CSSのスタイルはどうやって取得するのか?』と気になりました。
自分的には、ややこしかったので今後間違えないように記録していきます。取得したいこと
- CSSファイルに記述したbackgroundプロパティの値を取得したいと思います。
index.html<div class="box" id="target"></div>style.css.box { width: 100px; height: 100px; background-color: rgb(204,204,204); }完成コード
まず最終的に取得できたコードが以下になります。
script.js'use strict'; let $target = document.getElementById('target'); console.log(window.getComputedStyle($target)['background']);完成コードの解説
1.id属性が
'target'
の要素を取得。2.
window.getComputedStyle($target)[background]
で取得した要素のCSSStyleDeclarationオブジェクトのbackgroundプロパティの値
を返す。つまづいた箇所
ドットインストールで、boxクラスの背景色を変える際に、
script.js$target.style.background = 'pink';と記述していたので、背景色を取得する時も、
script.jsconsole.log($target.style.background);でいけるかと思ったのですが、コンソール見てみると何も取得できていませんでした。
もし、上記の書き方で取得する際は、
index.html<div class="box" id="target" style='background: pink;'></div>と
要素にstyle属性を直接指定する
もしくは、script.js$target.style.background = 'pink'; console.log($target.style.background);と
jsファイルで先に背景色を変える指定を行い、
取得する必要があると分かりました。参考資料
- 投稿日:2020-11-15T08:21:25+09:00
aタグの下線、リンク色の変更方法(CSS)
- 投稿日:2020-11-15T07:39:13+09:00