CINXE.COM
ブラウザからBluetoothが使える! JSでWeb Bluetooth APIを使ってBLE機器を操作する方法[B!]新着記事・評価 - はてなブックマーク
<!DOCTYPE html> <html lang="ja" data-page-scope="EntryList" data-stable-request-url="https://b.hatena.ne.jp/site/ics.media/" data-device-type="PC" data-sentry-environment="production" data-sentry-sample-rate="0.1" data-category-name="all" data-issue-name="" data-page-subtype="recententry" data-page-type="entrylist" > <head> <!-- Google Tag Manager --> <script> (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5TDHQX'); </script> <!-- End Google Tag Manager --> <meta charset="UTF-8"> <title>ブラウザからBluetoothが使える! JSでWeb Bluetooth APIを使ってBLE機器を操作する方法[B!]新着記事・評価 - はてなブックマーク</title> <script src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/js/v4/bookmark.js" async></script> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/css/v4/bookmark.css" /> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/css/v4/bookmark.star.css" /> <link rel="canonical" href="https://b.hatena.ne.jp/site/ics.media/" /> <link rel="next" href="/site/ics.media/?page=2"> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> <meta name="viewport" content="width=device-width"> <link rel="search" type="application/opensearchdescription+xml" title="はてなブックマーク検索" href="/opensearch.xml" /> <link rel="apple-touch-icon-precomposed" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/apple-touch-icon-precomposed.png" /> <link rel="mask-icon" href="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/safari-pinned-tab-icon.svg" color="#00A4DE" /> <meta name="msapplication-navbutton-color" content="#2C6EBD" /> <meta name="msapplication-task" content="name=はてなブックマーク; action-uri=/; icon-uri=https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/icons/bookmark.ico" /> <meta name="msapplication-task" content="name=マイブックマーク; action-uri=/my; icon-uri=https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/icons/my-bookmark.ico" /> <meta name="msapplication-task" content="name=お気に入りのブックマーク; action-uri=/my/favorite; icon-uri=https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/icons/favorite-bookmark.ico" /> <meta name="msapplication-task" content="name=人気エントリー; action-uri=/hotentry; icon-uri=https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/icons/hotentry.ico" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="referrer" content="always"> <link rel="alternate" type="application/rss+xml" href="/site/ics.media/?sort=hot&threshold=3&mode=rss" /> <script> function isMobile() { const html = document.documentElement; const deviceType = html.dataset.deviceType || ''; if (deviceType.length > 0) { return deviceType === 'MOBILE'; } else { const maxMobileWidth = 480; const windowWidth = window.innerWidth; return maxMobileWidth >= windowWidth; } } </script> </head> <body class=" fixed-header"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5TDHQX" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div class="link-app-banner js-dynamic-link-app-banner is-hidden"> <button class="link-app-banner-btn-close js-dynamic-link-app-banner-close-button"><span>close</span></button> <a class="link-app-banner-btn" href="https://hatenabookmark.page.link/app"> <div class="link-app-banner-btn-detail"> <div class="link-app-banner-icon"><img src="/images/v4/public/app/ic-ios.svg" alt="はてなブックマークアプリ"></div> <p class="link-app-banner-text">サクサク読めて、<br class="link-app-banner-text-newline">アプリ限定の機能も多数!</p> </div> <div class="link-app-banner-btn-open">アプリで開く</div> </a> </div> <header id="global-header" data-portal-static-origin="//cdn.www.st-hatena.com"> <div id="header" class="global-header-inner js-global-header-inner"> <h2 id="gh-logo"><a href="/" data-gtm-label="gh-blogo"><span>はてなブックマーク</span></a></h2> <div class="is-guest js-guest is-hidden"> <input id="gh-search-icon-check" type="checkbox" checked="checked" /> <label class="gh-search-icon" for="gh-search-icon-check" aria-label="検索を閉じる"><span>閉じる</span></label> <form class="gh-searchbox" method="get" action="/search_dwim" role="search"> <input value="" name="q" type="search" class="gh-inputtext" placeholder="キーワード・URLを検索" size="40" /> <input value="" type="submit" class="gh-search-button" /> </form> <ul class="gh-service-menu"> <li><a href="/guide" data-gtm-label="gh-guest-guide">はてなブックマークって?</a></li> <li><a href="/guide/tools" data-gtm-label="gh-guest-tools">アプリ・拡張の紹介</a></li> <li><a href="https://www.hatena.ne.jp/register?location=https%3A%2F%2Fb.hatena.ne.jp%2F%3Fregistered_from%3Dglobal-header&via=201037" class="gh-guest-register" data-gtm-label="gh-guest-register">ユーザー登録</a></li> <li><a href="https://www.hatena.ne.jp/login?location=https%3A%2F%2Fb.hatena.ne.jp%2Fsite%2Fics.media%2F" rel="nofollow" class="gh-guest-login" data-gtm-label="gh-guest-login">ログイン</a></li> <li class="gh-hatena-logo"><a href="http://www.hatena.ne.jp/"><img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/logo/logo-global-white.svg" alt="Hatena" width="74px" height="13px"/></a></li> </ul> </div> <noscript> <ul class="gh-service-menu"> <li><a href="https://www.hatena.ne.jp/logout?location=https%3A%2F%2Fb.hatena.ne.jp%2F">ログアウト</a></li> </ul> </noscript> <script type="text/x-template" id="template-menu-hatena-user"> <form class="gh-searchbox" method="get" action="/search_dwim" role="search"> <input value="" name="q" type="search" class="gh-inputtext" placeholder="キーワード・URLを検索" size="40" /> <input value="" type="submit" class="gh-search-button" /> </form> <ul class="gh-service-menu"> <li><a class="hotentry" data-gtm-label="gh-mypage" href="{{hotentry_url}}"><img src="{{user_image_url}}" class="header-profile-icon" width="16" height="16" alt="{{username}}" /></a><a class="hotentry" data-gtm-label="gh-mypage" href="{{hotentry_url}}">マイページ</a></li> <li><a class="bookmark" data-gtm-label="gh-bookmark" href="{{bookmark_url}}">ブックマーク</a></li> <li><a class="unread_bookmark" data-gtm-label="gh-ril" href="{{bookmark_stock_url}}">あとで読む</a></li> <li><a class="add" data-gtm-label="gh-add" href="{{add_bookmark_url}}">追加</a></li> <li><a class="tools" data-gtm-label="gh-tools" href="/guide/tools">ツール</a></li> <li><a class="config" data-gtm-label="gh-config" href="/-/my/config/profile">設定</a></li> <li><a class="feedback" data-gtm-label="gh-feedback" href="/-/feedback/hatena_bookmark" target="_blank">フィードバック</a></li> <li id="header-username" class="gh-dropdown-services" data-gtm-label="gh-services" title="利用中のサービス" data-name="{{username}}"> <span class="header-dropdown gh-dropdown" tabindex="0"> <img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/common/usermenu-wh.svg" alt="利用中のサービス" width="24" height="24" /> </span> <dl class="header-window" id="username-window"></dl> </li> <li id="header-notify" data-gtm-label="gh-notify" class="gh-dropdown-notify" title="あなたへのお知らせ"> <span class="header-dropdown gh-dropdown" tabindex="0"> <img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/common/notify-wh.svg" alt="あなたへのお知らせ" width="25" height="25" /> <span class="notify-count"></span> </span> <div id="notify-window" class="header-window header-notify"></div> </li> <li class="gh-hatena-logo"><a href="http://www.hatena.ne.jp/"><img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/logo/logo-global-white.svg" alt="Hatena" width="74px" height="13px"/></a></li> </ul> </script> </div> </header> <div id="info-header"><div id="info-header-message"></div><span></span></div> <div class="global-notification is-hidden js-global-notification"></div> <script type="text/javascript"> (function() { var layout = "tile"; if (!isMobile()) { try { layout = window.localStorage.getItem("bstn.entrylist.layout") || "tile"; // default } catch (ignore) { layout = "tile" } if (layout === "list") { document.body.classList.add("style-list") } if (layout === "headline") { document.body.classList.add("style-headline") } (dataLayer = window.dataLayer || []).push({ event: 'boston:entrylist:layout', boston: { entrylist: { layout: layout, } } }); } document.body.setAttribute("data-entrylist-layout", layout) })() </script> <ul class="is-hidden"> </ul> <div class="is-hidden"> <div class="river-placement entrylist-image-entry" data-river-placement="url_search_1"></div> </div> <script type="text/javascript" src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/js/v4/bookmark.river.js" async></script> <script type="text/x-template" id="template-ad-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> <script> (function() { function hideAndRegister(configuration, callback) { var styleElement = document.createElement('style'); var selector = configuration.selector; var ads = configuration.ads; var css = ''; for (var i = 0; i < ads.length; i++) { var row = ads[i].row; css += selector + '.is-nativeads-loading > li:nth-child(' + row + ') > .entrylist-contents > * { display: none; }\n'; } styleElement.textContent = css; document.head.appendChild(styleElement); (nativeAds = window.nativeAds || []).push(function(nativeAds) { nativeAds.register(configuration).then(callback || function(){}); }); } if (isMobile()) { } else { var waitContentLoaded = function(callback) { if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', callback); } else { callback(); } }; (nativeAds = window.nativeAds || []).push(function(nativeAds) { nativeAds.register( { selector: ".js-right-top-native-ad", ads: [ { placement: 'url_search_1', row: 1 } ], options: { insert: true, group: true } } ).catch(function() { waitContentLoaded(function() { var layout = document.body.getAttribute('data-entrylist-layout'); if (layout === 'tile') { var nativeAdContainer = document.querySelector('.js-right-top-native-ad'); if (nativeAdContainer) { nativeAdContainer.classList.add('is-hidden'); } var adContainer = document.querySelector('#entrylist-ad-right-top'); if (adContainer) { adContainer.classList.remove('is-hidden'); } var valve = window.valve || []; valve.push(function(v) { v.displayDFPSlot("entrylist-ad-right-top"); }); } else if (layout === 'list' || layout === 'headline') { var container = document.querySelector('.js-right-top-native-ad'); if (container) { container.classList.add('is-hidden'); } } }); }); }); } })(); </script> <script type="text/javascript"> // ---------------- dfp section ---------------- function showAdRightTopDFPSlot() { var nativeAdContainer = document.querySelector('.js-right-top-native-ad'); if (nativeAdContainer) { nativeAdContainer.classList.add('is-hidden'); } var adContainer = document.querySelector('#entrylist-ad-right-top'); if (adContainer) { adContainer.classList.remove('is-hidden'); } }; var valve = valve || []; if (isMobile()) { valve.push(function(v) { v.defineDFPSlot({ unit: '/4374287/bookmark_overlay_sp', sizes: [[320,80],[320,70],[320,50]], slotId: 'touch-footer-ad' }); v.defineDFPSlot({ unit: '/4374287/bookmark_entrylist_middle_rectangle_sp', sizes: [[300,250]], slotId: 'entrylist-ad-rectangle-middle' }); v.defineDFPSlot({ unit: '/4374287/bookmark_entrylist_bottom_rectangle_sp', sizes: [[300,250]], slotId: 'entrylist-ad-rectangle-bottom' }); v.sealDFPSlots(); }); } else { var layout = document.body.getAttribute('data-entrylist-layout'); if (layout === 'tile') { valve.push(function(v) { v.defineDFPSlot({ unit: '/4374287/bookmark_entrylist_middle_super_pc', sizes: [[728,90]], slotId: 'entrylist-ad-banner-middle' }); v.defineDFPSlot({ unit: '/4374287/bookmark_entrylist_bottom_super_pc', sizes: [[728,90]], slotId: 'entrylist-ad-banner-bottom' }); v.defineDFPSlot({ unit: '/4374287/bookmark_entrylist_top_right_rectangle_pc', sizes: [[300,250]], slotId: 'entrylist-ad-right-top', lazy: true }); v.sealDFPSlots(); }); } else if (layout === 'list' || layout === 'headline') { valve.push(function(v) { v.defineDFPSlot({ unit: '/4374287/bookmark_entrylist_sidebar_top_pc', sizes: [[300,250]], slotId: 'entrylist-ad-sidebar-top' }); v.defineDFPSlot({ unit: '/4374287/bookmark_entrylist_sidebar_bottom_pc', sizes: [[300,250]], slotId: 'entrylist-ad-sidebar-bottom' }); v.sealDFPSlots(); }); } } </script> <script> var valve = window.valve || []; valve.push(function(v) { var pageKeyValues = {}; if (document.cookie.split(';').some(function(item) { return item.indexOf('202011_guest_status=register_incomplete') >= 0})) { pageKeyValues.bookmark_status = 'register_incomplete'; } v.config({ pageKeyValues: pageKeyValues, textSelector: ".entrylist-wrapper", content: { result: "ng" }, service: 'bookmark' }); }); </script> <script src="https://cdn.pool.st-hatena.com/valve/valve.js" async></script> <div id="container"> <div class="branding js-branding" class="__FIXME__"> <div class="branding-header"> <h1 class="branding-title"> <a href="/"><span>はてなブックマーク</span></a> </h1> <p class="gototop"><a href="/" data-gtm-click-label="branding-left-top-blogo">トップへ戻る</a></p> </div> <form class="branding-searchbox" method="get" action="/search_dwim"> <input value="https://ics.media/" name="q" type="text" class="inputtext" id="searchtext" placeholder="キーワード・URLを検索" size="40" aria-label="キーワード・URLを検索" /> <input value="" type="submit" class="search-button" /> </form> <div class="navi-layout js-entrylist-layout-switcher"> <button type="button" class="navi-layout-tile js-entrylist-layout-switcher-item" data-layout="tile" aria-label="表示レイアウトをタイル形式に変更"></button> <button type="button" class="navi-layout-list js-entrylist-layout-switcher-item" data-layout="list" aria-label="表示レイアウトをリスト形式に変更"></button> <button type="button" class="navi-layout-headline js-entrylist-layout-switcher-item" data-layout="headline" aria-label="表示レイアウトをヘッドライン形式に変更"></button> </div> </div> <div class="navi-wrapper js-navi-category-wrapper is-unscrolled noscript"> <ul class="navi-body js-navi-category"> <li class="js-navi-category-item cat-all" data-category-name="cat-all"> <div class="navi-link js-navi-link"> <a href="/hotentry/all" class="navi-link-text cat-all" data-gtm-click-label="global-navi-all"><span>総合</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-all" data-gtm-click-label="global-navi-button-all"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/all" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/all" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/all/IT" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/0c74360a5d03bcd288c29e788dfeb83ae4884b41/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F7fb50cc051604bbbb2b9378cc74f58b9%2Fslide_0.jpg%3F34404793);"></a> </span> <span class="issue"> <a href="/entrylist/all/IT">IT</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/all/%E6%9C%80%E6%96%B0%E3%82%AC%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/a751d7841fd66b00eb3e0f6fb809bb955b402b65/height=288;version=1;width=512/https%3A%2F%2Fimage.itmedia.co.jp%2Fnews%2Farticles%2F2503%2F26%2Fcover_news175.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/all/%E6%9C%80%E6%96%B0%E3%82%AC%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88">最新ガジェット</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/all/%E8%87%AA%E7%84%B6%E7%A7%91%E5%AD%A6" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/2dbd8b5e1e372a7a8ecebc587a46363e919c64cd/height=288;version=1;width=512/https%3A%2F%2Fi.gzn.jp%2Fimg%2F2025%2F03%2F26%2Fgoogle-txgemma-therapeutics-development-open-model%2F00.png);"></a> </span> <span class="issue"> <a href="/entrylist/all/%E8%87%AA%E7%84%B6%E7%A7%91%E5%AD%A6">自然科学</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/all/%E7%B5%8C%E6%B8%88%E3%83%BB%E9%87%91%E8%9E%8D" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/all/%E7%B5%8C%E6%B8%88%E3%83%BB%E9%87%91%E8%9E%8D">経済・金融</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/all/%E3%81%8A%E3%82%82%E3%81%97%E3%82%8D" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/all/%E3%81%8A%E3%82%82%E3%81%97%E3%82%8D">おもしろ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/all/%E3%83%9E%E3%83%B3%E3%82%AC" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/ec56d2bbe78748f72b6e920547590dfe6818450f/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak-img.shonenjumpplus.com%2Fpublic%2Frppp-thumbnail_image%2F17106567264502098637-db5fe1ebefd5be307ca8bae96283ab86%3F1742370583);"></a> </span> <span class="issue"> <a href="/entrylist/all/%E3%83%9E%E3%83%B3%E3%82%AC">マンガ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/all/%E3%82%B2%E3%83%BC%E3%83%A0" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/fd4e3dc1f3900bec7c11f436cba8e1cf7e3d0465/height=288;version=1;width=512/https%3A%2F%2Fwww.gamespark.jp%2Fimgs%2Fogp_f%2F966767.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/all/%E3%82%B2%E3%83%BC%E3%83%A0">ゲーム</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/all/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E7%B7%8F%E5%90%88%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/c454f7286561948c16db638614fdd0bcdedd58d4/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Febc49c6c264f12786c8c3f7337b0f50fa2922503%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fw%252Fwlj-Friday%252F20250321%252F20250321164600.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/all/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E7%B7%8F%E5%90%88%EF%BC%89">はてなブログ(総合)</a> </span> </li> </ul> </div> </div> </li> <li class="js-navi-category-item cat-general" data-category-name="cat-general"> <div class="navi-link js-navi-link"> <a href="/hotentry/general" class="navi-link-text cat-general" data-gtm-click-label="global-navi-general"><span>一般</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-general" data-gtm-click-label="global-navi-button-general"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/general" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/general" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/general/%E7%A4%BE%E4%BC%9A%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/e9052303ddb9cd3a4a258e9439149c35e3ea12f1/height=288;version=1;width=512/https%3A%2F%2Fcdn.mainichi.jp%2Fvol1%2F2025%2F03%2F26%2F20250326k0000m030305000p%2F0c10.jpg%3F1);"></a> </span> <span class="issue"> <a href="/entrylist/general/%E7%A4%BE%E4%BC%9A%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9">社会ニュース</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/general/%E5%9C%B0%E5%9F%9F" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/918f1212885c7ad24749f6e5e4e079ae8c819b07/height=288;version=1;width=512/https%3A%2F%2Fryukyushimpo.jp%2Ftachyon%2F2025%2F03%2FRS20250318G00240010100.jpg%3Fresize%3D1200%252C630%26gravity%26crop_strategy%3Dsmart);"></a> </span> <span class="issue"> <a href="/entrylist/general/%E5%9C%B0%E5%9F%9F">地域</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/general/%E5%9B%BD%E9%9A%9B" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/8cce74228657997d92b37befad11dbdc1c433f2c/height=288;version=1;width=512/https%3A%2F%2Fichef.bbci.co.uk%2Fnews%2F1024%2Fbranded_japanese%2F377a%2Flive%2F6434fb80-09e5-11f0-97d3-37df2b293ed1.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/general/%E5%9B%BD%E9%9A%9B">国際</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/general/%E5%A4%A9%E6%B0%97" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/45536631f352ff7638f1b7bf442663bac60f0eed/height=288;version=1;width=512/https%3A%2F%2Fwww3.nhk.or.jp%2Fnews%2Fhtml%2F20250325%2FK10014759961_2503251637_0325164657_01_02.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/general/%E5%A4%A9%E6%B0%97">天気</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/general/%E3%82%B0%E3%83%AB%E3%83%A1" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/e9f7131785dc2a6e56962c621f5f3c5f991a7d6f/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F8e88a627114437493c93102722201223-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/general/%E3%82%B0%E3%83%AB%E3%83%A1">グルメ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/general/%E6%98%A0%E7%94%BB%E3%83%BB%E9%9F%B3%E6%A5%BD" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/0d34d69cfcb6fa3451763a017b1956e91c7df88d/height=288;version=1;width=512/https%3A%2F%2Fguitar-ijiri.com%2Fwp-content%2Fuploads%2F2025%2F03%2FIMG_20250326_-82SubZ.png);"></a> </span> <span class="issue"> <a href="/entrylist/general/%E6%98%A0%E7%94%BB%E3%83%BB%E9%9F%B3%E6%A5%BD">映画・音楽</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/general/%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/fd4e3dc1f3900bec7c11f436cba8e1cf7e3d0465/height=288;version=1;width=512/https%3A%2F%2Fwww.gamespark.jp%2Fimgs%2Fogp_f%2F966767.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/general/%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84">スポーツ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/general/%E3%81%AF%E3%81%A6%E3%81%AA%E5%8C%BF%E5%90%8D%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AA%E3%83%BC" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/general/%E3%81%AF%E3%81%A6%E3%81%AA%E5%8C%BF%E5%90%8D%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AA%E3%83%BC">はてな匿名ダイアリー</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/general/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E4%B8%80%E8%88%AC%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/c454f7286561948c16db638614fdd0bcdedd58d4/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Febc49c6c264f12786c8c3f7337b0f50fa2922503%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fw%252Fwlj-Friday%252F20250321%252F20250321164600.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/general/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E4%B8%80%E8%88%AC%EF%BC%89">はてなブログ(一般)</a> </span> </li> </ul> </div> </div> </li> <li class="js-navi-category-item cat-social" data-category-name="cat-social"> <div class="navi-link js-navi-link"> <a href="/hotentry/social" class="navi-link-text cat-social" data-gtm-click-label="global-navi-social"><span>世の中</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-social" data-gtm-click-label="global-navi-button-social"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/social" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/social" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/social/%E6%96%B0%E5%9E%8B%E3%82%B3%E3%83%AD%E3%83%8A%E3%82%A6%E3%82%A4%E3%83%AB%E3%82%B9" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/81b8a6dc2efadc0d6e2bf09343bb2937bf6532b0/height=288;version=1;width=512/https%3A%2F%2Fwww.sankei.com%2Fresizer%2FyL1xNIEihEcNyc1NVht62-Hifhc%3D%2F1200x630%2Ffilters%3Afocal%28453x332%3A463x342%29%3Aquality%2850%29%2Fcloudfront-ap-northeast-1.images.arcpublishing.com%2Fsankei%2FRS4BQ62ZCROJNMBCTDC5MEU2U4.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/social/%E6%96%B0%E5%9E%8B%E3%82%B3%E3%83%AD%E3%83%8A%E3%82%A6%E3%82%A4%E3%83%AB%E3%82%B9">新型コロナウイルス</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/social/%E5%83%8D%E3%81%8D%E6%96%B9" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/social/%E5%83%8D%E3%81%8D%E6%96%B9">働き方</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/social/%E7%94%9F%E3%81%8D%E6%96%B9" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/social/%E7%94%9F%E3%81%8D%E6%96%B9">生き方</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/social/%E5%9C%B0%E5%9F%9F" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/918f1212885c7ad24749f6e5e4e079ae8c819b07/height=288;version=1;width=512/https%3A%2F%2Fryukyushimpo.jp%2Ftachyon%2F2025%2F03%2FRS20250318G00240010100.jpg%3Fresize%3D1200%252C630%26gravity%26crop_strategy%3Dsmart);"></a> </span> <span class="issue"> <a href="/entrylist/social/%E5%9C%B0%E5%9F%9F">地域</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/social/%E5%8C%BB%E7%99%82%E3%83%BB%E3%83%98%E3%83%AB%E3%82%B9" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/965c851c231ea6825c6fc53ee54816a3400df2d4/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F8eb7f0c3b6f50aaa52b12562d575fa13-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/social/%E5%8C%BB%E7%99%82%E3%83%BB%E3%83%98%E3%83%AB%E3%82%B9">医療・ヘルス</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/social/%E6%95%99%E8%82%B2" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/177dc6fe2018a6fc70e600420a06e8e24557ceae/height=288;version=1;width=512/https%3A%2F%2Fi.gzn.jp%2Fimg%2F2025%2F03%2F26%2Fmeta-instagram-partnership-schools%2F00.png);"></a> </span> <span class="issue"> <a href="/entrylist/social/%E6%95%99%E8%82%B2">教育</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/social/%E3%81%AF%E3%81%A6%E3%81%AA%E5%8C%BF%E5%90%8D%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AA%E3%83%BC" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/social/%E3%81%AF%E3%81%A6%E3%81%AA%E5%8C%BF%E5%90%8D%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AA%E3%83%BC">はてな匿名ダイアリー</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/social/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E4%B8%96%E3%81%AE%E4%B8%AD%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/e176840ab4092cfdad67ddcb32385bf1760a9041/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Fea9dcdff415feb6ef32c6ab659a127fb5a0c0daa%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fn%252Fnou_yunyun%252F20250322%252F20250322135339.png);"></a> </span> <span class="issue"> <a href="/entrylist/social/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E4%B8%96%E3%81%AE%E4%B8%AD%EF%BC%89">はてなブログ(世の中)</a> </span> </li> </ul> </div> </div> </li> <li class="js-navi-category-item cat-economics" data-category-name="cat-economics"> <div class="navi-link js-navi-link"> <a href="/hotentry/economics" class="navi-link-text cat-economics" data-gtm-click-label="global-navi-economics"><span>政治と経済</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-economics" data-gtm-click-label="global-navi-button-economics"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/economics" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/economics" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/economics/%E6%94%BF%E6%B2%BB" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/918f1212885c7ad24749f6e5e4e079ae8c819b07/height=288;version=1;width=512/https%3A%2F%2Fryukyushimpo.jp%2Ftachyon%2F2025%2F03%2FRS20250318G00240010100.jpg%3Fresize%3D1200%252C630%26gravity%26crop_strategy%3Dsmart);"></a> </span> <span class="issue"> <a href="/entrylist/economics/%E6%94%BF%E6%B2%BB">政治</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/economics/%E7%B5%8C%E6%B8%88%E3%83%BB%E9%87%91%E8%9E%8D" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/economics/%E7%B5%8C%E6%B8%88%E3%83%BB%E9%87%91%E8%9E%8D">経済・金融</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/economics/%E4%BC%81%E6%A5%AD" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/00812047f90129800220742ab6c479743f070125/height=288;version=1;width=512/https%3A%2F%2Fline-line-line.com%2Fwp-content%2Fuploads%2F2020%2F12%2F2020y12m19d_232041242.png);"></a> </span> <span class="issue"> <a href="/entrylist/economics/%E4%BC%81%E6%A5%AD">企業</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/economics/%E4%BB%95%E4%BA%8B%E3%83%BB%E5%B0%B1%E8%81%B7" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/c244ce23660a96657c71e6278b32d7bae60ecb8e/height=288;version=1;width=512/https%3A%2F%2Fimgopt.asahi.com%2Fogp%2FAS20250326003194_comm.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/economics/%E4%BB%95%E4%BA%8B%E3%83%BB%E5%B0%B1%E8%81%B7">仕事・就職</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/economics/%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/de943d7e2e56573c3fc339086f64cd7c3cbf4484/height=288;version=1;width=512/https%3A%2F%2Fwww.reuters.com%2Fresizer%2Fv2%2F73EWALDHDJME5BJVYQMGHFYCP4.jpg%3Fauth%3D48a59c5c291474b9f9110cee767baa819a1aedcb10da5d3ee30d78abf39a6aac%26height%3D1005%26width%3D1920%26quality%3D80%26smart%3Dtrue);"></a> </span> <span class="issue"> <a href="/entrylist/economics/%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88">マーケット</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/economics/%E5%9B%BD%E9%9A%9B" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/8cce74228657997d92b37befad11dbdc1c433f2c/height=288;version=1;width=512/https%3A%2F%2Fichef.bbci.co.uk%2Fnews%2F1024%2Fbranded_japanese%2F377a%2Flive%2F6434fb80-09e5-11f0-97d3-37df2b293ed1.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/economics/%E5%9B%BD%E9%9A%9B">国際</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/economics/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E6%94%BF%E6%B2%BB%E3%81%A8%E7%B5%8C%E6%B8%88%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b9f8dba296817124d529b8de4ffd8294dca0e47e/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F54b6e4803f1d68c97ea410d2cd89bc8623a0718e%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fm%252Fmiyasho88%252F20250324%252F20250324140642.png);"></a> </span> <span class="issue"> <a href="/entrylist/economics/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E6%94%BF%E6%B2%BB%E3%81%A8%E7%B5%8C%E6%B8%88%EF%BC%89">はてなブログ(政治と経済)</a> </span> </li> </ul> </div> </div> </li> <li class="js-navi-category-item cat-life" data-category-name="cat-life"> <div class="navi-link js-navi-link"> <a href="/hotentry/life" class="navi-link-text cat-life" data-gtm-click-label="global-navi-life"><span>暮らし</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-life" data-gtm-click-label="global-navi-button-life"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/life" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/life" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E3%82%AB%E3%83%AB%E3%83%81%E3%83%A3%E3%83%BC%E3%83%BB%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/c34b0d37e48731991696164dfb72018dba9c60fd/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F6a96ef1bfa1266998d89064f8abae301-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E3%82%AB%E3%83%AB%E3%83%81%E3%83%A3%E3%83%BC%E3%83%BB%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB">カルチャー・ライフスタイル</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/0d34d69cfcb6fa3451763a017b1956e91c7df88d/height=288;version=1;width=512/https%3A%2F%2Fguitar-ijiri.com%2Fwp-content%2Fuploads%2F2025%2F03%2FIMG_20250326_-82SubZ.png);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E3%83%95%E3%82%A1%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3">ファッション</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E9%81%8B%E5%8B%95%E3%83%BB%E3%82%A8%E3%82%AF%E3%82%B5%E3%82%B5%E3%82%A4%E3%82%BA" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/af2769c58ef311270c0d85b697e962b23e110096/height=288;version=1;width=512/https%3A%2F%2Fhonnwo3doyomou.up.seesaa.net%2Fimage%2F0637-0.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E9%81%8B%E5%8B%95%E3%83%BB%E3%82%A8%E3%82%AF%E3%82%B5%E3%82%B5%E3%82%A4%E3%82%BA">運動・エクササイズ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E7%B5%90%E5%A9%9A%E3%83%BB%E5%AD%90%E8%82%B2%E3%81%A6" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/ec56d2bbe78748f72b6e920547590dfe6818450f/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak-img.shonenjumpplus.com%2Fpublic%2Frppp-thumbnail_image%2F17106567264502098637-db5fe1ebefd5be307ca8bae96283ab86%3F1742370583);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E7%B5%90%E5%A9%9A%E3%83%BB%E5%AD%90%E8%82%B2%E3%81%A6">結婚・子育て</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E4%BD%8F%E3%81%BE%E3%81%84" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/94b3d9504879e3a3fcceeaee2579e722df61071b/height=288;version=1;width=512/https%3A%2F%2Farticle-image-ix.nikkei.com%2Fhttps%253A%252F%252Fimgix-proxy.n8s.jp%252FDSXZQO6178965026032025000000-1.jpg%3Fauto%3Dformat%26bg%3DFFFF%26crop%3Dfocalpoint%26fit%3Dcrop%26h%3D630%26w%3D1200%26s%3D186a6b7803ac3c3942d7355b85099199);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E4%BD%8F%E3%81%BE%E3%81%84">住まい</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E3%82%B0%E3%83%AB%E3%83%A1" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/e9f7131785dc2a6e56962c621f5f3c5f991a7d6f/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F8e88a627114437493c93102722201223-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E3%82%B0%E3%83%AB%E3%83%A1">グルメ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E7%9B%B8%E7%B6%9A" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E7%9B%B8%E7%B6%9A">相続</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E6%9A%AE%E3%82%89%E3%81%97%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/4fb557c761b654013a1846fee1c57a15f8156878/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F07cfbfae3c584c856daa4c7f7beea19e0af32332%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fp%252Fp_shirokuma%252F20250325%252F20250325190950.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E6%9A%AE%E3%82%89%E3%81%97%EF%BC%89">はてなブログ(暮らし)</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E6%8E%83%E9%99%A4%E3%83%BB%E6%95%B4%E7%90%86%E6%95%B4%E9%A0%93" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/4b3e99ac8484590c03e984c7ad833fd2a5d0e93c/height=288;version=1;width=512/https%3A%2F%2Flivedoor.blogimg.jp%2Ferii0813%2Fimgs%2F3%2Fe%2F3ea3f839.png);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E6%8E%83%E9%99%A4%E3%83%BB%E6%95%B4%E7%90%86%E6%95%B4%E9%A0%93">掃除・整理整頓</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E9%9B%91%E8%B2%A8" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/743c08971533df33273c82af919ad52e0092bf7b/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F45363284543c134e0c73f767e1be54ee4d3435ca%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fs%252Fsoredoko%252F20250325%252F20250325114226.png);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E9%9B%91%E8%B2%A8">雑貨</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E8%B2%B7%E3%81%A3%E3%81%A6%E3%82%88%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/bc3ba0d42e2126657df67ca97b4ed8605683160d/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F566e31910109deb3125f13237b4f8c1e-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E8%B2%B7%E3%81%A3%E3%81%A6%E3%82%88%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE">買ってよかったもの</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E6%97%85%E8%A1%8C" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/396c686b731f4a7741239eb6e975eeea18fba1e7/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F3f3f52d10b4c702b4975e923254c3d4d3a63c8c6%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fr%252Fritocamp%252F20250326%252F20250326081938.png);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E6%97%85%E8%A1%8C">旅行</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E3%82%A2%E3%82%A6%E3%83%88%E3%83%89%E3%82%A2" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/cfbf5f46c0da8b65b0780cd3c17f600ce8df380c/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F3c2f92cc2612529c3ef9d068d619085a-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E3%82%A2%E3%82%A6%E3%83%88%E3%83%89%E3%82%A2">アウトドア</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/life/%E8%B6%A3%E5%91%B3" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/628ae4d8931925ea94792cdbceac49c7f886036e/height=288;version=1;width=512/https%3A%2F%2Fpc.watch.impress.co.jp%2Fimg%2Fpcw%2Flist%2F2001%2F024%2F1.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/life/%E8%B6%A3%E5%91%B3">趣味</a> </span> </li> </ul> </div> </div> </li> <li class="js-navi-category-item cat-knowledge" data-category-name="cat-knowledge"> <div class="navi-link js-navi-link"> <a href="/hotentry/knowledge" class="navi-link-text cat-knowledge" data-gtm-click-label="global-navi-knowledge"><span>学び</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-knowledge" data-gtm-click-label="global-navi-button-knowledge"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/knowledge" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/knowledge" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E4%BA%BA%E6%96%87%E7%A7%91%E5%AD%A6" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/c454f7286561948c16db638614fdd0bcdedd58d4/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Febc49c6c264f12786c8c3f7337b0f50fa2922503%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fw%252Fwlj-Friday%252F20250321%252F20250321164600.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E4%BA%BA%E6%96%87%E7%A7%91%E5%AD%A6">人文科学</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E7%A4%BE%E4%BC%9A%E7%A7%91%E5%AD%A6" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/aca513b13ff43de638a2d61e38b15491cd46882e/height=288;version=1;width=512/https%3A%2F%2Fcdn.mainichi.jp%2Fvol1%2F2025%2F03%2F25%2F20250325k0000m040161000p%2F0c10.jpg%3F1);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E7%A4%BE%E4%BC%9A%E7%A7%91%E5%AD%A6">社会科学</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E8%87%AA%E7%84%B6%E7%A7%91%E5%AD%A6" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/2dbd8b5e1e372a7a8ecebc587a46363e919c64cd/height=288;version=1;width=512/https%3A%2F%2Fi.gzn.jp%2Fimg%2F2025%2F03%2F26%2Fgoogle-txgemma-therapeutics-development-open-model%2F00.png);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E8%87%AA%E7%84%B6%E7%A7%91%E5%AD%A6">自然科学</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E8%AA%9E%E5%AD%A6" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b85a434310065326fd70e97823c3d524748d3cce/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F8c64e7815328bc0ea283d3881a8a1b8f-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E8%AA%9E%E5%AD%A6">語学</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%BB%E7%B5%8C%E5%96%B6%E5%AD%A6" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%BB%E7%B5%8C%E5%96%B6%E5%AD%A6">ビジネス・経営学</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/0d34d69cfcb6fa3451763a017b1956e91c7df88d/height=288;version=1;width=512/https%3A%2F%2Fguitar-ijiri.com%2Fwp-content%2Fuploads%2F2025%2F03%2FIMG_20250326_-82SubZ.png);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3">デザイン</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E6%B3%95%E5%BE%8B" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/ab92dfdb30819b746bf69320dab126570162bc05/height=288;version=1;width=512/https%3A%2F%2Fimg.ben54.jp%2Fnews%2F2083%2FlOE00rblEC6Q1742961491.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E6%B3%95%E5%BE%8B">法律</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E6%9C%AC%E3%83%BB%E6%9B%B8%E8%A9%95" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/c613e4892b335cb065eebfd8b09604c7cc001e1d/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F5b9276a8f0ee93832adf7072c1c99bad-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E6%9C%AC%E3%83%BB%E6%9B%B8%E8%A9%95">本・書評</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E5%B0%86%E6%A3%8B%E3%83%BB%E5%9B%B2%E7%A2%81" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/63d03c50b434bd760cffb9bd6fda650d5aebbd39/height=288;version=1;width=512/https%3A%2F%2Fcdn-img.www.sunday-webry.com%2Fpublic%2Fseries-thumbnail%2F3269754496548915247-0309b2f13be0089f4deb1512a407dc58%3F1654488887);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E5%B0%86%E6%A3%8B%E3%83%BB%E5%9B%B2%E7%A2%81">将棋・囲碁</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/knowledge/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E5%AD%A6%E3%81%B3%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/c454f7286561948c16db638614fdd0bcdedd58d4/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Febc49c6c264f12786c8c3f7337b0f50fa2922503%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fw%252Fwlj-Friday%252F20250321%252F20250321164600.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/knowledge/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E5%AD%A6%E3%81%B3%EF%BC%89">はてなブログ(学び)</a> </span> </li> </ul> </div> </div> </li> <li class="js-navi-category-item cat-it" data-category-name="cat-it"> <div class="navi-link js-navi-link"> <a href="/hotentry/it" class="navi-link-text cat-it" data-gtm-click-label="global-navi-it"><span>テクノロジー</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-it" data-gtm-click-label="global-navi-button-it"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/it" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/it" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/it/IT" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/0c74360a5d03bcd288c29e788dfeb83ae4884b41/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F7fb50cc051604bbbb2b9378cc74f58b9%2Fslide_0.jpg%3F34404793);"></a> </span> <span class="issue"> <a href="/entrylist/it/IT">IT</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/it/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E6%8A%80%E8%A1%93" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/8d6d0331c11c4796e5a3da608bd2808e3253b1d8/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--KbK9do5x--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AMCP%2525E3%252582%2525B5%2525E3%252583%2525BC%2525E3%252583%252590%2525E3%252583%2525BC%2525E3%252582%252592%2525E5%252588%2525A9%2525E7%252594%2525A8%2525E3%252581%252599%2525E3%252582%25258B%2525E3%252581%252593%2525E3%252581%2525A8%2525E3%252581%2525AF%2525E3%252582%2525BB%2525E3%252582%2525AD%2525E3%252583%2525A5%2525E3%252583%2525AA%2525E3%252583%252586%2525E3%252582%2525A3%2525E7%25259A%252584%2525E3%252581%2525AB%2525E5%2525AE%252589%2525E5%252585%2525A8%2525E3%252581%25258B%25253F%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Aarrowkato%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzE3NTJjMWZlNmYuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png);"></a> </span> <span class="issue"> <a href="/entrylist/it/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E6%8A%80%E8%A1%93">セキュリティ技術</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/it/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/c2b9faa50c177d5f7f949ecf59f88b3c78187fe9/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F572082a340c2c9fa4a8f07b04567b2c50032d9db%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fk%252Fkossy-web-engineer%252F20250326%252F20250326174054.png);"></a> </span> <span class="issue"> <a href="/entrylist/it/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC%EF%BC%89">はてなブログ(テクノロジー)</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/it/AI%E3%83%BB%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/0c74360a5d03bcd288c29e788dfeb83ae4884b41/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F7fb50cc051604bbbb2b9378cc74f58b9%2Fslide_0.jpg%3F34404793);"></a> </span> <span class="issue"> <a href="/entrylist/it/AI%E3%83%BB%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92">AI・機械学習</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/it/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/f1ac3d1561d37b989030de8fb357d63051ec2a99/height=288;version=1;width=512/https%3A%2F%2Fimage.itmedia.co.jp%2Faiplus%2Farticles%2F2503%2F26%2Fcover_news065.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/it/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0">プログラミング</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/it/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/d0ef66efd49cdcb642ec4bd6348d6c06a7172388/height=288;version=1;width=512/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1200%2F1%2Au7kGIeHvj6ycHO7ixVYaYg.png);"></a> </span> <span class="issue"> <a href="/entrylist/it/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2">エンジニア</a> </span> </li> </ul> </div> </div> </li> <li class="js-navi-category-item cat-fun" data-category-name="cat-fun"> <div class="navi-link js-navi-link"> <a href="/hotentry/fun" class="navi-link-text cat-fun" data-gtm-click-label="global-navi-fun"><span>おもしろ</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-fun" data-gtm-click-label="global-navi-button-fun"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/fun" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/fun" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/fun/%E3%81%BE%E3%81%A8%E3%82%81" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/d33419dca28b27422f7a73bea49ff99afd1d8ebd/height=288;version=1;width=512/https%3A%2F%2Flivedoor.blogimg.jp%2Fall_nations%2Fimgs%2F2%2F8%2F2898fc95-s.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/fun/%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/fun/%E3%83%8D%E3%82%BF" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/cfbf5f46c0da8b65b0780cd3c17f600ce8df380c/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F3c2f92cc2612529c3ef9d068d619085a-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/fun/%E3%83%8D%E3%82%BF">ネタ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/fun/%E3%81%8A%E3%82%82%E3%81%97%E3%82%8D" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/fun/%E3%81%8A%E3%82%82%E3%81%97%E3%82%8D">おもしろ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/fun/%E3%81%93%E3%82%8C%E3%81%AF%E3%81%99%E3%81%94%E3%81%84" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/185387ed65a4a5fc1375b0d3485aad0097a68c90/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F9b96b3240086ac442b22761b4718c974-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/fun/%E3%81%93%E3%82%8C%E3%81%AF%E3%81%99%E3%81%94%E3%81%84">これはすごい</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/fun/%E3%81%8B%E3%82%8F%E3%81%84%E3%81%84" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/1d708d278a380582454bc2483f1378322adaf4f0/height=288;version=1;width=512/https%3A%2F%2Fapi.ananweb.jp%2Fwp-content%2Fuploads%2F2025%2F03%2Ffc6927a4cd7fc6f068de9eb5d3ae4aff-2.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/fun/%E3%81%8B%E3%82%8F%E3%81%84%E3%81%84">かわいい</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/fun/%E9%9B%91%E5%AD%A6" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/32c40a130d11202690ddf44a8aa3649889699681/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F2af7af33c297e06125d98671873fb97c-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/fun/%E9%9B%91%E5%AD%A6">雑学</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/fun/%E7%99%92%E3%82%84%E3%81%97" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/dc39c2b80e4d41791eb5b68865aabaaa6933acdd/height=288;version=1;width=512/https%3A%2F%2Finternet.watch.impress.co.jp%2Fimg%2Fiw%2Flist%2F2000%2F107%2Fyajiuma-watch_1.png);"></a> </span> <span class="issue"> <a href="/entrylist/fun/%E7%99%92%E3%82%84%E3%81%97">癒やし</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/fun/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%81%8A%E3%82%82%E3%81%97%E3%82%8D%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/daa33737d4b9cad1d3816d0cdfa806e4a34f7073/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F8fa0ef82f4202e95fca9340ec64af908402c9439%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fm.media-amazon.com%252Fimages%252FI%252F515UYgMz2DL._SL500_.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/fun/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%81%8A%E3%82%82%E3%81%97%E3%82%8D%EF%BC%89">はてなブログ(おもしろ)</a> </span> </li> </ul> </div> </div> </li> <li class="js-navi-category-item cat-entertainment" data-category-name="cat-entertainment"> <div class="navi-link js-navi-link"> <a href="/hotentry/entertainment" class="navi-link-text cat-entertainment" data-gtm-click-label="global-navi-entertainment"><span>エンタメ</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-entertainment" data-gtm-click-label="global-navi-button-entertainment"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/entertainment" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/entertainment" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/entertainment/%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/fd4e3dc1f3900bec7c11f436cba8e1cf7e3d0465/height=288;version=1;width=512/https%3A%2F%2Fwww.gamespark.jp%2Fimgs%2Fogp_f%2F966767.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/entertainment/%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84">スポーツ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/entertainment/%E6%98%A0%E7%94%BB" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/a44e2265337ac67201800ea18ea882777a0d6c15/height=288;version=1;width=512/https%3A%2F%2Fimgopt.asahi.com%2Fogp%2FAS20250326000276_comm.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/entertainment/%E6%98%A0%E7%94%BB">映画</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/entertainment/%E9%9F%B3%E6%A5%BD" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/0d34d69cfcb6fa3451763a017b1956e91c7df88d/height=288;version=1;width=512/https%3A%2F%2Fguitar-ijiri.com%2Fwp-content%2Fuploads%2F2025%2F03%2FIMG_20250326_-82SubZ.png);"></a> </span> <span class="issue"> <a href="/entrylist/entertainment/%E9%9F%B3%E6%A5%BD">音楽</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/entertainment/%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/67e1e79dd75c3952379d6df62cfac45526e18e48/height=288;version=1;width=512/https%3A%2F%2Fwww.moneypost.jp%2Fuploads%2F2025%2F03%2F24%2Fnestle_takaoka_02_01.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/entertainment/%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB">アイドル</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/entertainment/%E8%8A%B8%E8%83%BD" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/efc961c35bf798538c7b68ca224d5d09f8a58713/height=288;version=1;width=512/https%3A%2F%2Fnewsatcl-pctr.c.yimg.jp%2Ft%2Famd-img%2F20250326-03978413-ytv-000-3-view.jpg%3Fexp%3D10800);"></a> </span> <span class="issue"> <a href="/entrylist/entertainment/%E8%8A%B8%E8%83%BD">芸能</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/entertainment/%E3%81%8A%E7%AC%91%E3%81%84" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/d793f17f67e8892a57a37c3cf0d6ffca113a5d76/height=288;version=1;width=512/https%3A%2F%2Fogre.natalie.mu%2Fmedia%2Fnews%2Fowarai%2F2025%2F0324%2Fthesecond0324_02.jpg%3Fimpolicy%3Dtwitter_card_face_crop);"></a> </span> <span class="issue"> <a href="/entrylist/entertainment/%E3%81%8A%E7%AC%91%E3%81%84">お笑い</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/entertainment/%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/fd4e3dc1f3900bec7c11f436cba8e1cf7e3d0465/height=288;version=1;width=512/https%3A%2F%2Fwww.gamespark.jp%2Fimgs%2Fogp_f%2F966767.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/entertainment/%E3%82%B5%E3%83%83%E3%82%AB%E3%83%BC">サッカー</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/entertainment/%E8%A9%B1%E9%A1%8C%E3%81%AE%E5%8B%95%E7%94%BB" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/00812047f90129800220742ab6c479743f070125/height=288;version=1;width=512/https%3A%2F%2Fline-line-line.com%2Fwp-content%2Fuploads%2F2020%2F12%2F2020y12m19d_232041242.png);"></a> </span> <span class="issue"> <a href="/entrylist/entertainment/%E8%A9%B1%E9%A1%8C%E3%81%AE%E5%8B%95%E7%94%BB">話題の動画</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/entertainment/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%82%A8%E3%83%B3%E3%82%BF%E3%83%A1%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/157f8b4022f91d8e7e19cb51e241f086a58cd533/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Fc679fae435b08538c9a0bc28751b451439e1c70a%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fg%252Fgryphon%252F20250325%252F20250325132612.png);"></a> </span> <span class="issue"> <a href="/entrylist/entertainment/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%82%A8%E3%83%B3%E3%82%BF%E3%83%A1%EF%BC%89">はてなブログ(エンタメ)</a> </span> </li> </ul> </div> </div> </li> <li class="js-navi-category-item cat-game" data-category-name="cat-game"> <div class="navi-link js-navi-link"> <a href="/hotentry/game" class="navi-link-text cat-game" data-gtm-click-label="global-navi-game"><span>アニメとゲーム</span></a> <span class="gnavi-button js-gnavi-button" data-category-name="cat-game" data-gtm-click-label="global-navi-button-game"></span> </div> <div class="navi-item-detail js-navi-item-detail is-hidden"> <div class="navi-item-detail-inner js-navi-item-detail-inner"> <ul class="navi-item-list"> <li class="navi_hotentry"><a href="/hotentry/game" data-gtm-click-label="global-navi-hotentry">人気</a></li> <li class="navi_entrylist"><a href="/entrylist/game" data-gtm-click-label="global-navi-recententry">新着</a></li> </ul> <ul class="navi-item-issue"> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/%E3%83%9E%E3%83%B3%E3%82%AC" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/ec56d2bbe78748f72b6e920547590dfe6818450f/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak-img.shonenjumpplus.com%2Fpublic%2Frppp-thumbnail_image%2F17106567264502098637-db5fe1ebefd5be307ca8bae96283ab86%3F1742370583);"></a> </span> <span class="issue"> <a href="/entrylist/game/%E3%83%9E%E3%83%B3%E3%82%AC">マンガ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/Web%E3%83%9E%E3%83%B3%E3%82%AC" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/ec56d2bbe78748f72b6e920547590dfe6818450f/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak-img.shonenjumpplus.com%2Fpublic%2Frppp-thumbnail_image%2F17106567264502098637-db5fe1ebefd5be307ca8bae96283ab86%3F1742370583);"></a> </span> <span class="issue"> <a href="/entrylist/game/Web%E3%83%9E%E3%83%B3%E3%82%AC">Webマンガ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/%E3%82%B2%E3%83%BC%E3%83%A0" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/fd4e3dc1f3900bec7c11f436cba8e1cf7e3d0465/height=288;version=1;width=512/https%3A%2F%2Fwww.gamespark.jp%2Fimgs%2Fogp_f%2F966767.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/game/%E3%82%B2%E3%83%BC%E3%83%A0">ゲーム</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/%E4%BB%BB%E5%A4%A9%E5%A0%82" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/23f6050c5813ac034db1902135613c5c0f71b8b1/height=288;version=1;width=512/https%3A%2F%2Fwww.nintendo.com%2Fjp%2Fnintendo_direct%2F20250327%2Fsns.png%3F0327);"></a> </span> <span class="issue"> <a href="/entrylist/game/%E4%BB%BB%E5%A4%A9%E5%A0%82">任天堂</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/PlayStation" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/c64c50977bfd4158b2db1dff28d3d597c92b9c22/height=288;version=1;width=512/https%3A%2F%2Fnews.denfaminicogamer.jp%2Fwp-content%2Fuploads%2F2026%2F03%2Fimage_032-3.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/game/PlayStation">PlayStation</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/%E3%82%A2%E3%83%8B%E3%83%A1" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/a10931fdd080a08d246031c848aeb9c2c1832288/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2Fc015fad60f264bd3f7d3d885323c9923-1200x630.jpeg);"></a> </span> <span class="issue"> <a href="/entrylist/game/%E3%82%A2%E3%83%8B%E3%83%A1">アニメ</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%ABYouTuber" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/4cd33ae54de1f98a12c0d073972d7d9e0cd1c46a/height=288;version=1;width=512/https%3A%2F%2Fcdn.ciao.shogakukan.co.jp%2Fwp-content%2Fuploads%2F2025%2F03%2F3ced060d01ff94646817fa5e180625b8.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/game/%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%ABYouTuber">バーチャルYouTuber</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/%E3%82%AA%E3%82%BF%E3%82%AF%E3%82%AB%E3%83%AB%E3%83%81%E3%83%A3%E3%83%BC" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif);"></a> </span> <span class="issue"> <a href="/entrylist/game/%E3%82%AA%E3%82%BF%E3%82%AF%E3%82%AB%E3%83%AB%E3%83%81%E3%83%A3%E3%83%BC">オタクカルチャー</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%82%A2%E3%83%8B%E3%83%A1%E3%81%A8%E3%82%B2%E3%83%BC%E3%83%A0%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/4fb557c761b654013a1846fee1c57a15f8156878/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F07cfbfae3c584c856daa4c7f7beea19e0af32332%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fp%252Fp_shirokuma%252F20250325%252F20250325190950.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/game/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%82%A2%E3%83%8B%E3%83%A1%E3%81%A8%E3%82%B2%E3%83%BC%E3%83%A0%EF%BC%89">はてなブログ(アニメとゲーム)</a> </span> </li> <li class="navi-item-unit" data-gtm-click-label="global-navi-issue-item"> <span class="thumbnail"> <a href="/entrylist/game/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%82%B2%E3%83%BC%E3%83%A0%EF%BC%89" style="background-image: url(https://cdn-ak-scissors.b.st-hatena.com/image/square/4fb557c761b654013a1846fee1c57a15f8156878/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F07cfbfae3c584c856daa4c7f7beea19e0af32332%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fp%252Fp_shirokuma%252F20250325%252F20250325190950.jpg);"></a> </span> <span class="issue"> <a href="/entrylist/game/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%AD%E3%82%B0%EF%BC%88%E3%82%B2%E3%83%BC%E3%83%A0%EF%BC%89">はてなブログ(ゲーム)</a> </span> </li> </ul> </div> </div> </li> <li class="recommend"> <a href="/entrylist/all/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%93%E3%83%A5%E3%83%BC" class="navi-link-text recommend" title="おすすめ" data-gtm-click-label="global-navi-recommended"><span>おすすめ</span></a> <p class="pickup"><a href="/hotentry/all/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%93%E3%83%A5%E3%83%BC">インタビュー</a></p> </li> </ul> </div> <div class="navi-page"> <h2 class="navi-page-title">『ブラウザからBluetoothが使える! JSでWeb Bluetooth APIを使ってBLE機器を操作す...』</h2> <ul class="navi-page-mode"> <li class=""> <a href="/site/ics.media/?sort=count" data-gtm-click-label="hotentry-button-beneath-global-navi">人気</a> </li> <li class="is-current"> <a href="/site/ics.media/" data-gtm-click-label="entrylist-button-beneath-global-navi">新着</a> </li> <li class=""> <a href="/site/ics.media/?sort=eid" data-gtm-click-label="all-button-beneath-global-navi">すべて</a> </li> </ul> </div> <div class="entrylist-wrapper"> <div class="entrylist-wrapper"> <div class="entrylist-main"> <section class="entrylist-unit"> <div class="entrylist-header"> <ul class="entrylist-header-main"> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/250319/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/250319/" title="CSSでテキストの上下余白が調整可能に!text-box-trimの使い方 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4767796363127438657" data-entry-category="テクノロジー">CSSでテキストの上下余白が調整可能に!text-box-trimの使い方 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/250319/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>184</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F250319%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/250319/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">2024年12月〜2025年2月頃にかけてリリースされたSafari 18.2、Chrome 133、Microsoft Edge 133から、text-box-trimプロパティとtext-box-edgeプロパティが使用可能になりました。テキスト要素の上下のスペースを調整できるようになります。 たとえば、次のCSSでテキスト上下の余白を調整できます。 .selector { text-box: trim-both cap alphabetic; } ※ただし、フォントによります。 本記事では、上記で指定した各プロパティの使用方法と具体的にどのようなデザインの実装に役立つのか、日本語フォントの場合を中心に紹介します。 テキストの上下のスペースとは? 今回調整ができるようになったテキストの上下のスペースとは何でしょうか? このスペースはテキストにline-heightプロパティを設定した際</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/f1b02b08d5132db72ce0bf6673cbb64110ac8dba/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F250319%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2025/03/19 20:42</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88" rel="tag" data-gtm-click-label="entry-info-tag">フォント</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/%E4%BD%99%E7%99%BD" rel="tag" data-gtm-click-label="entry-info-tag">余白</a></li> <li><a href="/q/font" rel="tag" data-gtm-click-label="entry-info-tag">font</a></li> <li><a href="/q/webfont" rel="tag" data-gtm-click-label="entry-info-tag">webfont</a></li> <li><a href="/q/HTML" rel="tag" data-gtm-click-label="entry-info-tag">HTML</a></li> <li><a href="/q/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88" rel="tag" data-gtm-click-label="entry-info-tag">テキスト</a></li> <li><a href="/q/web%E5%88%B6%E4%BD%9C" rel="tag" data-gtm-click-label="entry-info-tag">web制作</a></li> <li><a href="/q/web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">webデザイン</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/250319/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> </ul> <div class="entrylist-header-sub js-right-top-native-ad is-nativeads-loading"> </div> <div id="entrylist-ad-right-top" class="entrylist-header-sub is-hidden"></div> </div> <ul class="entrylist-item js-hotentries is-nativeads-loading"> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/250307/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/250307/" title="HTML/CSSで装飾可能に! select・optionタグの新しいカスタマイズ方法 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4767236148242002625" data-entry-category="テクノロジー">HTML/CSSで装飾可能に! select・optionタグの新しいカスタマイズ方法 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/250307/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>52</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F250307%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/250307/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">2025年3月にリリースされたChrome 134、Microsoft Edge 134では、<select>要素をカスタマイズできるようになりました。今までは<select>要素で表現できる見た目は限られており、やむをえず別のタグを組み合わせて独自の実装をしていた方も多いのではないでしょうか? 独自の実装をした場合、アクセシビリティーやキーボード操作に対しても独自の対応が必要だったり、対応が不十分になる場合もあります。<select>要素をカスタマイズできるようになれば、こうした課題を解決しつつ自由なデザインやレイアウトを実現できるようになります。 この記事では、カスタマイズできるようになった<select>要素でどんなことができるのかを紹介します!(※本記事の作例はChrome 134、Microsoft Edge 134以上で閲覧ください)。 カスタマイズに必須のCSS まずはカスタ</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/ef55da92502a4bcc24246998c60f0277b5289414/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F250307%2Fimages%2Feyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2025/03/07 18:51</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/html" rel="tag" data-gtm-click-label="entry-info-tag">html</a></li> <li><a href="/q/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0" rel="tag" data-gtm-click-label="entry-info-tag">フォーム</a></li> <li><a href="/q/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA" rel="tag" data-gtm-click-label="entry-info-tag">カスタマイズ</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/250307/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/250221/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/250221/" title="CSSひとつで印象が変わる! スクロールでふわっと出るアニメーション - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4766600509911575713" data-entry-category="テクノロジー">CSSひとつで印象が変わる! スクロールでふわっと出るアニメーション - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/250221/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>12</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F250221%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/250221/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">ウェブサイトの中にはスクロールするとフワッと文字が出てくる表現があります。シンプルに見えますが、少し工夫を凝らすだけで表現力を大きく高めることが可能です。今回は、フワッと出るアニメーションをより魅力的にするためのテクニックとその応用例をいくつか紹介します。本記事の完成形は次のとおりです。 比較 まず、2つのフワッと出てくるアニメーションを比較してみましょう。下記の2つのアニメーションは、どちらもスクロールするとフワッと文字が出てくる表現です。エレガントなカフェのサイトを想定してアニメーションを作りました。 ▼実際にスクロールして比較してみてください。 サンプルを別ウインドウで開く コードを確認する(ちょっと微妙な方) コードを確認する(改良したもの) どちらも同じフワッと出てくるアニメーションですが、速度やイージング、タイミングなどが異なります。左側の「ちょっと微妙なもの」は全体的に間延び</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/48cf19b193f9ca000d780efa937cf91b4a005756/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F250221%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2025/02/22 01:58</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">アニメーション</a></li> <li><a href="/q/Web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">Webデザイン</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/250221/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/250203/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/250203/" title="ブラウザでマークダウンを編集!? Nuxt Studioことはじめ - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4765967329366668865" data-entry-category="テクノロジー">ブラウザでマークダウンを編集!? Nuxt Studioことはじめ - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/250203/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>31</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F250203%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/250203/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">以前の記事「マークダウンの力を引き出す! Nuxt Contentで快適なウェブサイト制作」では、Nuxt Contentについて紹介しました。Nuxt ConetentはVue.jsのフレームワークであるNuxtのモジュールで、マークダウンなどのコンテンツからサイトを作る強力なプラグインです。 Nuxt Contentそれ自体も強力なコンテンツ管理、運用システムですが、WordPressやヘッドレスCMSといった既存のコンテンツ管理システムと比べると以下の課題があります。 マークダウンの知識が要求されるため、コンテンツの作成が難しい Nuxtを起動する必要があるため、環境構築する必要がある つまり、「開発者しかコンテンツが作成できない」のが大きな課題です。 Nuxt Contentを使いつつその課題を解決するのがNuxt Studioです。Nuxt StudioはNuxtのモジュールでは</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/a50ae572a4f9ac24cd9408a3a10a1b98ca6c7155/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F250203%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2025/02/08 10:22</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/Vue" rel="tag" data-gtm-click-label="entry-info-tag">Vue</a></li> <li><a href="/q/webdesign" rel="tag" data-gtm-click-label="entry-info-tag">webdesign</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/blog" rel="tag" data-gtm-click-label="entry-info-tag">blog</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/250203/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/250131/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/250131/" title="HTMLとCSSでつくる! 1文字ずつ変化するテキストのアニメーション - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4765610742711657697" data-entry-category="テクノロジー">HTMLとCSSでつくる! 1文字ずつ変化するテキストのアニメーション - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/250131/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>36</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F250131%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/250131/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">前回、以下の記事でリンクテキストをホバーした際のアニメーション実装例をご紹介しました。 『HTMLとCSSでつくる! リンクテキストのホバー時アニメーション11選』 さて、今回は少しだけ複雑になりますが、HTMLとCSSのみでより凝った表現をする方法を紹介します。 リンクテキストといえば、ヘッダーなどのメニューとして小さめのフォントサイズでデザインされていることも多いでしょう。 そんな小さいサイズのテキストでもホバー時に目を引くような、1文字ずつ区切ったテキストアニメーションのアイデアを紹介します。よりサイトの雰囲気に合う演出をしたい、またアイデアの引き出しを増やしたいデザイナーやエンジニアの参考になれば嬉しいです。 ▼ 今回紹介する実装例一覧はこちらです。 記事前半では、実装方法について基本となるアニメーションの仕組みと実装時に気をつけたいことを解説し、後半はバリエーションの実装例を掲載</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/73cecee6e6ff296f2c1e5bf9d7fcca06b3d74e07/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F250131%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2025/01/31 17:52</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">アニメーション</a></li> <li><a href="/q/Web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">Webデザイン</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/HTML" rel="tag" data-gtm-click-label="entry-info-tag">HTML</a></li> <li><a href="/q/webdesign" rel="tag" data-gtm-click-label="entry-info-tag">webdesign</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/250131/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/241227/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/241227/" title="これがフロントエンドで話題になった記事! ICS MEDIAの2024年 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4763990307889959424" data-entry-category="テクノロジー">これがフロントエンドで話題になった記事! ICS MEDIAの2024年 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/241227/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>95</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F241227%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/241227/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">ICSはフロントエンドを専門とするウェブ制作会社ですが、オウンドメディアとして技術情報発信サイト「ICS MEDIA」を運用しています。このサイトは開設から10年目をむかえましたが、今年は「国内のウェブ水準を前進させる記事を。話題のテーマも、他のサイトでは読めないニッチな技術も」をテーマとしてやってきました。そんなICS MEDIAにとっての2024年を、あらゆる数値を使って多角的にレポートします。 今年はどの記事がもっとも読まれたのでしょうか? 今年執筆した記事で上位10記事をピックアップしました。 1位 : フキダシ作例 HTML・CSSで実装するかわいいフキダシのアイデア 24,708 PV HTMLとCSSだけで作るかわいい吹き出しデザインを取り上げた記事です。マスキングテープ風などの凝ったスタイルからシンプルな角丸まで、応用範囲が広いオリジナルサンプルを豊富に掲載しています。 ユ</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/583a1389658a3d1634fa005fceaa96a967ac6b22/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F241227%2Fimages%2Feyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/12/27 19:27</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/html" rel="tag" data-gtm-click-label="entry-info-tag">html</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" rel="tag" data-gtm-click-label="entry-info-tag">フロントエンド</a></li> <li><a href="/q/javascript" rel="tag" data-gtm-click-label="entry-info-tag">javascript</a></li> <li><a href="/q/%E6%96%87%E7%AB%A0" rel="tag" data-gtm-click-label="entry-info-tag">文章</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/241227/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/241219/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/241219/" title="意外? @propertyがCSSアニメーションを激変させる理由 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4763623023018591136" data-entry-category="テクノロジー">意外? @propertyがCSSアニメーションを激変させる理由 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/241219/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>28</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F241219%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/241219/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">メディアクエリとして知られる@mediaやCSSアニメーションで使われる@keyframesなど、CSSには@から始まるさまざまなルールがあります。その中にある@propertyというルールはご存知でしょうか? CSS変数の定義をより細かく設定できるものですが、実はアニメーションにも活用できる意外な隠し能力があります。今回は@propertyについてと、そのアニメーションへの応用方法について解説します。 サンプルを別ウインドウで開く コードを確認する @propertyとは? @propertyはCSS変数の定義を宣言できるルールです。その変数の型や初期値、継承の有無などを設定できます。次のコードは--custom-colorという変数の定義です。 @property --custom-color { syntax: "<color>"; inherits: false; initial-</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/6ca54dd65854cd96c13e53ffd5e21482f53997dc/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F241219%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/12/19 21:25</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/CSS" rel="tag" data-gtm-click-label="entry-info-tag">CSS</a></li> <li><a href="/q/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">アニメーション</a></li> <li><a href="/q/web%E5%88%B6%E4%BD%9C" rel="tag" data-gtm-click-label="entry-info-tag">web制作</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/241219/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/241206/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/241206/" title="インタラクションに特化したアニメーションツールRiveの魅力 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4763036528269343264" data-entry-category="テクノロジー">インタラクションに特化したアニメーションツールRiveの魅力 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/241206/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>8</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F241206%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/241206/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">ウェブサイトやアプリなどでアニメーションするイラストを目にすることがよくあります。クリックしたらアニメーションする「いいね」アイコン、ローディング画面など、最近はインタラクティブでリッチなアニメーションを取り入れたものが多いです。 このようなアニメーションを作るツールとしてLottieが有名ですが、Riveというツールがあるのをご存知でしょうか? Lottieもとても便利なツールですが、RiveにはLottieにはない魅力があります。今回はこのRiveのメリットやデメリット、実際にRiveで作ったデモをご紹介します! Riveとは? Riveはアニメーションを作成できるデザインツールと、それを多様なプラットフォームで実行できるランタイムです。最大の特徴はインタラクションをツール上で作れることです。オンラインエディター、またはダウンロードページからダウンロードしたデスクトップアプリがあります</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/c8cfa15c149d07918a3fb180dd5a7ca92009d0e2/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F241206%2Fimages%2Feyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/12/07 05:58</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">アニメーション</a></li> <li><a href="/q/animation" rel="tag" data-gtm-click-label="entry-info-tag">animation</a></li> <li><a href="/q/%E3%83%84%E3%83%BC%E3%83%AB" rel="tag" data-gtm-click-label="entry-info-tag">ツール</a></li> <li><a href="/q/%E3%82%A2%E3%83%97%E3%83%AA" rel="tag" data-gtm-click-label="entry-info-tag">アプリ</a></li> <li><a href="/q/Javascript" rel="tag" data-gtm-click-label="entry-info-tag">Javascript</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/241206/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/241122/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/241122/" title="コピペOK! SVGフィルターを使った画像加工の作例集 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4762689741134353568" data-entry-category="テクノロジー">コピペOK! SVGフィルターを使った画像加工の作例集 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/241122/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>14</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F241122%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/241122/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">ウェブサイトに欠かせない画像コンテンツ。Adobe Photoshopなどで加工し書き出すことも多いですが、SVGフィルターを使用すると同じように複雑な効果を表現できます。 本記事では、SVGフィルターを使っていろいろな雰囲気の画像加工の作例を紹介します。数値を変えると雰囲気もガラリと変わりますのでコピペして色々とお試しいただき、ぜひ取り入れてみてください。 SVGフィルター実装方法の概要 作例紹介の前に、今回の実装方法について概説したいと思います。SVGフィルターの適用にはCSSのfilter: url()を使用します。 コードで画像加工を行う簡易的な方法として、CSSのfilterプロパティを使う方法が挙げられます。filterプロパティに指定できるCSS関数はいくつか用意されており、blur()関数でぼかしたり、contrast()でコントラストを強めたりと簡単な加工が行えます。 こ</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/213d40dace8016331218eb9028b1007f0100e681/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F241122%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/11/29 18:32</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/SVG" rel="tag" data-gtm-click-label="entry-info-tag">SVG</a></li> <li><a href="/q/CSS" rel="tag" data-gtm-click-label="entry-info-tag">CSS</a></li> <li><a href="/q/web%E5%88%B6%E4%BD%9C" rel="tag" data-gtm-click-label="entry-info-tag">web制作</a></li> <li><a href="/q/%E7%94%BB%E5%83%8F" rel="tag" data-gtm-click-label="entry-info-tag">画像</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/241122/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/241108/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/241108/" title="マークダウンの力を引き出す!Nuxt Contentで快適なウェブサイト制作 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4762186028163778752" data-entry-category="テクノロジー">マークダウンの力を引き出す!Nuxt Contentで快適なウェブサイト制作 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/241108/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>24</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F241108%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/241108/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">Vue.jsのフレームワークであるNuxtには便利なプラグインがたくさんあります。マークダウンファイルとNuxtを連携するNuxt Contentはその中のひとつとしてよく用いられています。 読者の中には「NuxtってVue.jsのフレームワークでしょ? 私はReact派だし興味ないかな…。」という人も多くいると思います。 しかし、Nuxtの強みとして、コミュニティ主導で質の高いモジュールが管理されていることが挙げられます。NuxtコミュニティではNuxt Modulesという名前でライブラリが管理、提供されています。Nuxt Contentもそのひとつです。 Nuxt Modulesに追加されるライブラリについてはコミュニティ内で実装ガイドラインが定められており、Nuxtチームのレビューを受けて追加されるため品質が担保されています。また、Nuxtで使いやすい形になっているため導入が容易で</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/f6b1f7170a861bc535de3f52536648b74387dd59/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F241108%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/11/18 21:55</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/Nuxt.js" rel="tag" data-gtm-click-label="entry-info-tag">Nuxt.js</a></li> <li><a href="/q/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88" rel="tag" data-gtm-click-label="entry-info-tag">テンプレート</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/blog" rel="tag" data-gtm-click-label="entry-info-tag">blog</a></li> <li><a href="/q/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84" rel="tag" data-gtm-click-label="entry-info-tag">コンテンツ</a></li> <li><a href="/q/webdesign" rel="tag" data-gtm-click-label="entry-info-tag">webdesign</a></li> <li><a href="/q/media" rel="tag" data-gtm-click-label="entry-info-tag">media</a></li> <li><a href="/q/%2A%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">*あとで読む</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/241108/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/241105/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/241105/" title="CSSで文節の折り返しを! br・wbrとauto-phraseの活用術 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4761624785685305440" data-entry-category="テクノロジー">CSSで文節の折り返しを! br・wbrとauto-phraseの活用術 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/241105/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>190</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F241105%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/241105/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">ウェブでのテキストの折り返しは、HTMLコーダーにとって意外と難しい分野です。多様な画面サイズが存在する現代では、適切なテキストの折り返しについて悩むことが少なくありません。 この記事で紹介する折り返しとは、以下のようなテキストの区切りの良い場所で改行するかどうかです。 ▼固定幅で折り返し どこで生れたかとんと見当がつかぬ。何で も薄暗いじめじめした所でニャーニャー泣 いていた事だけは記憶している。 ▼文節での折り返し どこで生れたかとんと見当がつかぬ。 何でも薄暗いじめじめした所で ニャーニャー泣いていた事だけは記憶している。 本記事では、HTMLコーディングにおいて改行・折り返し方法の選択肢を整理し、最適な方法について考察します。 この記事で紹介すること <br />と<wbr />タグを使った改行指定 CSSのword-break: auto-phraseを使った自動折り返し JSラ</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/99717fb46cde21abf6918fe78039d80ecc23ccd8/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F241105%2Fimages%2Feyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/11/06 19:31</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/html" rel="tag" data-gtm-click-label="entry-info-tag">html</a></li> <li><a href="/q/%E6%94%B9%E8%A1%8C" rel="tag" data-gtm-click-label="entry-info-tag">改行</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88" rel="tag" data-gtm-click-label="entry-info-tag">テキスト</a></li> <li><a href="/q/%E3%82%B3%E3%83%BC%E3%83%89" rel="tag" data-gtm-click-label="entry-info-tag">コード</a></li> <li><a href="/q/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6" rel="tag" data-gtm-click-label="entry-info-tag">ブラウザ</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/241105/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/241025/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/241025/" title="mask-compositeでつくるCSSの新しい表現方法 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4761064734512465472" data-entry-category="テクノロジー">mask-compositeでつくるCSSの新しい表現方法 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/241025/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>24</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F241025%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/241025/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">CSSで特定の形に切り抜く(マスキングする)にはmask-imageプロパティが便利です。マスク用の画像をmask-imageプロパティを使って要素に適用すれば、その画像の不透過部分のみにマスキングできます。mask-imageプロパティに関連して2024年から使用可能になったmask-compositeプロパティを使うと、マスクの合成方法を指定でき、より幅広いマスク表現ができるようになりました。この記事ではmask-compositeプロパティについて解説します。 サンプルを別ウインドウで開く コードを確認する mask-compositeプロパティの値とそのマスク結果の違い mask-compositeプロパティは、複数のマスク画像をどのように合成するかの方法を指定するためのプロパティです。実はmask-imageプロパティは複数画像の指定にも対応しています。複数画像からマスク領域を生</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/2d70e24246897f35056385fe31c8b88848040ffb/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F241025%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/10/25 17:45</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">アニメーション</a></li> <li><a href="/q/%E3%82%B3%E3%83%BC%E3%83%89" rel="tag" data-gtm-click-label="entry-info-tag">コード</a></li> <li><a href="/q/animation" rel="tag" data-gtm-click-label="entry-info-tag">animation</a></li> <li><a href="/q/%E7%94%BB%E5%83%8F" rel="tag" data-gtm-click-label="entry-info-tag">画像</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/241025/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/241004/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/241004/" title="コピペで使える! HTMLのチェックボックスを独自のデザインで実装する方法 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4760093029788529408" data-entry-category="テクノロジー">コピペで使える! HTMLのチェックボックスを独自のデザインで実装する方法 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/241004/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>14</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F241004%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/241004/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">チェックボックスは、HTML・CSSで独自にデザインすると手間のかかる要素です。ほとんどの場合は、<input type="checkbox" />を利用することになりますが、以下の課題があります。 標準のinputタグはブラウザごとに見た目が異なり、利用できるCSSプロパティにばらつきがある。 実装方法が複数存在し、どの方法が適しているか判断しにくい。 チェックボックスには複数の状態が存在し、用意すべき見た目がわかりにくい。 慣れていない方にとっては、判断に迷いやすい要素です。この記事では、独自にデザインされたチェックボックスの作り方を4つのポイントに分けて紹介します。 本記事で紹介すること チェックボックスの独自のデザインを、シンプルなHTML構造で実装する方法 標準のinputタグの利点を落とさず、独自のデザインを適用する方法 コピペで使えるチェックボックスの作例 シンプルなチェック</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/2ae67f167f6a1429bfbba5a6488843243bfb59cc/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F241004%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/10/04 18:59</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/HTML" rel="tag" data-gtm-click-label="entry-info-tag">HTML</a></li> <li><a href="/q/CSS" rel="tag" data-gtm-click-label="entry-info-tag">CSS</a></li> <li><a href="/q/%E3%83%A1%E3%83%A2" rel="tag" data-gtm-click-label="entry-info-tag">メモ</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/241004/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240910/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240910/" title="TensorFlow.jsを使ったリアルタイムポーズ認識 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4758983334669685440" data-entry-category="テクノロジー">TensorFlow.jsを使ったリアルタイムポーズ認識 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240910/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>10</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240910%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240910/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">前回の記事『ブラウザ上で可愛いフィルターを実現!TensorFlow.jsを使ったリアルタイム顔認識』では、Googleが開発した機械学習用JavaScriptライブラリ「TensorFlow.js」が提供する、顔認識モデルをご紹介しました。そしてウェブカメラを使用してリアルタイムで顔認識を行い、好きなスタンプ画像を選んで顔に貼り付けるデモを作成しました。 今回の記事では、TensorFlow.jsを利用し、ポーズに合わせた画像が出現するデモを作成します。 ▲ ポーズに合わせた画像が出現するデモ。詳細は後述します。 TensorFlow.jsとは TensorFlow.jsは、Pythonで広く利用されている機械学習ライブラリ「TensorFlow」のJavaScript版です。TensorFlow.jsを利用すると、以下のようなことをブラウザ上で実現できます。 オリジナルの機械学習モデル</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/f356ae65996e14335d931c4f7b568c4f5612ac38/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240910%2Fimages%2F240910_eyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/09/10 20:50</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/tech" rel="tag" data-gtm-click-label="entry-info-tag">tech</a></li> <li><a href="/q/JavaScript" rel="tag" data-gtm-click-label="entry-info-tag">JavaScript</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240910/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240902/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240902/" title="JavaScriptで実現するFLIPアニメーションの原理と基礎 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4758691906464092864" data-entry-category="テクノロジー">JavaScriptで実現するFLIPアニメーションの原理と基礎 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240902/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>138</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240902%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240902/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">アニメーション実装のテクニックのひとつにFLIPと呼ばれるものがあります。FLIPアニメーションは2つの状態をなめらかにつなげるテクニックで、とくに移動や拡大といった動きに有効です。FLIPアニメーションを用いると、次のようなアニメーションを実装できます。 本記事では、ライブラリに依存しないFLIPアニメーションの原理を理解し、実装する方法を紹介します。 FLIPアニメーションとは FLIPとは、First, Last, Invert, Playをまとめた造語です。これらはFLIPアニメーションの手順を説明したものになります。 First:アニメーションを開始するときの状態 Last:アニメーション終了時の状態 Invert:変化量を計算し、Lastの状態に適用してFirstの状態を復元します Play:Invert量を徐々に減らしてLastの状態に近づけていきます FLIPのおもしろい点</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/026de44713e1c2f5e5d54637c8071848b9a24e65/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240902%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/09/04 14:03</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/javascript" rel="tag" data-gtm-click-label="entry-info-tag">javascript</a></li> <li><a href="/q/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">アニメーション</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/web%E5%88%B6%E4%BD%9C" rel="tag" data-gtm-click-label="entry-info-tag">web制作</a></li> <li><a href="/q/%E8%A7%A3%E8%AA%AC" rel="tag" data-gtm-click-label="entry-info-tag">解説</a></li> <li><a href="/q/animation" rel="tag" data-gtm-click-label="entry-info-tag">animation</a></li> <li><a href="/q/%E3%82%B3%E3%83%BC%E3%83%89" rel="tag" data-gtm-click-label="entry-info-tag">コード</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240902/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240827/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240827/" title="デザイナーにもお勧め! CSSもThree.jsもタイムライン編集を可能にするTheatre.jsが凄い - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4758375482614283488" data-entry-category="テクノロジー">デザイナーにもお勧め! CSSもThree.jsもタイムライン編集を可能にするTheatre.jsが凄い - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240827/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>216</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240827%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240827/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">デザイナーにもお勧め! CSSもThree.jsもタイムライン編集を可能にするTheatre.jsが凄い ウェブサイトの演出を作る上でアニメーションの実装は欠かせません。一般的には、CSSアニメーションやJavaScriptのライブラリ(GSAPジーサップなど)を用いてコードベースで動きをつけることが多いと思います。ですが、完全にコードだけでアニメーションを調整するのは大変だと思ったことはないでしょうか? 一度実装したことがある方は共感いただけるかもしれませんが、少し直そうにもコードに戻って調整し、反映されたブラウザ画面を確認して、もう一度コードを直して…と往復していると結構大変です。また、アニメーションさせるプロパティや要素が複数ある場合には、コードを解読する難易度も上がります。 本記事ではそんな悩みを解決できる、GUIからアニメーションを調整できるライブラリ「Theatre.jsシアタ</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/617726d30739145bcfae505c8132b4ac29616d78/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240827%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/08/28 18:20</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/javascript" rel="tag" data-gtm-click-label="entry-info-tag">javascript</a></li> <li><a href="/q/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">アニメーション</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/animation" rel="tag" data-gtm-click-label="entry-info-tag">animation</a></li> <li><a href="/q/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA" rel="tag" data-gtm-click-label="entry-info-tag">ライブラリ</a></li> <li><a href="/q/js" rel="tag" data-gtm-click-label="entry-info-tag">js</a></li> <li><a href="/q/Three.js" rel="tag" data-gtm-click-label="entry-info-tag">Three.js</a></li> <li><a href="/q/GUI" rel="tag" data-gtm-click-label="entry-info-tag">GUI</a></li> <li><a href="/q/JSON" rel="tag" data-gtm-click-label="entry-info-tag">JSON</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240827/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240820/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240820/" title="JavaScriptのユニットテストを始めよう - ユニットテストのメリットと書き方のコツ - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4757991772702368384" data-entry-category="テクノロジー">JavaScriptのユニットテストを始めよう - ユニットテストのメリットと書き方のコツ - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240820/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>51</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240820%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240820/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">プログラミングにおいて、ユニットテストを書いてコードが正しく動くか検証することはとても重要です。ユニットテストを導入する目的といえば品質の向上ですが、それ以外にもメリットがたくさんあります。 この記事ではユニットテストを書くとどんなメリットがあるのか、またユニットテストを書くときのちょっとしたコツを紹介します。 ユニットテストを書くメリット 「TODOアプリ」を作っていると仮定して、実際にコードとテストコードを確認しながらメリットを考えてみましょう。 この記事で紹介するテストコードは以下から確認できます。実際に手元で動かせるのでぜひ試してみてください。 コードを確認する ※上記のテストコードはテストフレームワークのVitestを使用して書かれていますが、記事の内容自体はフレームワークによらない普遍的な考え方をもとにしています。 メリット①書いたコードが意図したとおりに動くかすぐ確認できる</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/e339d1439a721ab325dcba10f4bd0ba90bad35b8/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240820%2Fimages%2Feyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/08/20 11:48</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/javascript" rel="tag" data-gtm-click-label="entry-info-tag">javascript</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/%E3%83%86%E3%82%B9%E3%83%88" rel="tag" data-gtm-click-label="entry-info-tag">テスト</a></li> <li><a href="/q/test" rel="tag" data-gtm-click-label="entry-info-tag">test</a></li> <li><a href="/q/development" rel="tag" data-gtm-click-label="entry-info-tag">development</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240820/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240808/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240808/" title="has()疑似クラスでコーディングが変わる! CSS最新スタイリング - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4757475884032016096" data-entry-category="テクノロジー">has()疑似クラスでコーディングが変わる! CSS最新スタイリング - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240808/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>179</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240808%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240808/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">2024年のブラウザならCSSの:has()疑似クラスが使えます。この:has()疑似クラスは非常に強力なポテンシャルをもっています。というのも:has()疑似クラスを使えば、どんな関係のセレクターも指定可能になります。これを使えば多彩なセレクターが記述できるようになり、より表現力豊かなCSSを実現できます。この記事では:has()疑似クラスを使ったCSSの表現手法やテクニックを紹介します。 サンプルを別ウインドウで開く コードを確認する :has()疑似クラスの基本的な使い方 :has()疑似クラスの使い方について簡単に説明します。:has()疑似クラスは渡したセレクターを持つ親要素を選択します。たとえば、次のようなHTMLとCSSがあるとします。 <p class="text"> <strong>メロス</strong>は激怒した。必ず、かの邪智暴虐の王を除かなければならぬと決意した。</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/3ac2c8bc006b4fbefd60a429e7f4245d291d08c1/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240808%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/08/09 08:53</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/web%E5%88%B6%E4%BD%9C" rel="tag" data-gtm-click-label="entry-info-tag">web制作</a></li> <li><a href="/q/%E8%A6%81%E7%B4%A0" rel="tag" data-gtm-click-label="entry-info-tag">要素</a></li> <li><a href="/q/%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0" rel="tag" data-gtm-click-label="entry-info-tag">コーディング</a></li> <li><a href="/q/%E8%A7%A3%E8%AA%AC" rel="tag" data-gtm-click-label="entry-info-tag">解説</a></li> <li><a href="/q/Web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">Webデザイン</a></li> <li><a href="/q/javascript" rel="tag" data-gtm-click-label="entry-info-tag">javascript</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240808/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240801/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240801/" title="HTMLとCSSでつくる! リンクテキストのホバー時アニメーション11選 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4757118227408504224" data-entry-category="テクノロジー">HTMLとCSSでつくる! リンクテキストのホバー時アニメーション11選 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240801/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>133</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240801%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240801/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">テキストをホバーしたときの変化やアニメーションをつくることは、どのようなサイトをつくっていてもほぼ必ず行う工程ではないでしょうか。 テキストがリンクであることをユーザーに伝えるという点では、ブラウザのデフォルトスタイルのような下線のみで十分な場合もあると思います。 しかしそれだけではなく、変化をつけてよりわかりやすくしたい場合や、サイト全体の雰囲気に合わせたい場合にちょっとしたアニメーションが効果的です。 今回はHTMLとCSSのみで作成できる、シンプルながら少し目を引くアニメーションをテーマに実装例を紹介します。 ▼今回紹介する実装例一覧 とくに、以下のようなデザイナー/エンジニアにとって参考になれば嬉しいです。 HTMLとCSSのみでどのようなホバー時のアニメーションができるのか知りたい 透明度の変化や、下線のつけ外し以外の実装例の引き出しを増やしたい ※今回の実装例では主にヘッダー/</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/02cd762eeea819037ef3b133ac3a2e204ce78a83/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240801%2Fimages%2Feyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/08/01 15:49</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/html" rel="tag" data-gtm-click-label="entry-info-tag">html</a></li> <li><a href="/q/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">アニメーション</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88" rel="tag" data-gtm-click-label="entry-info-tag">テキスト</a></li> <li><a href="/q/Web%E5%88%B6%E4%BD%9C" rel="tag" data-gtm-click-label="entry-info-tag">Web制作</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240801/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240723/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240723/" title="CSSのコンテナースタイルクエリーstyle()の使い方 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4756703354804410208" data-entry-category="テクノロジー">CSSのコンテナースタイルクエリーstyle()の使い方 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240723/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>24</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240723%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240723/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">コンテナークエリーは、要素の幅を条件にする機能だけでなく、CSS変数を条件にスタイルを適用する、コンテナースタイルクエリーという機能があります。活用することで、ひとつのクラスに異なるバリエーションのスタイルを定義できます。 前回の記事『要素の幅でレスポンシブ対応を行える!コンテナークエリーの使い方』では、コンテナークエリーの基本的な使い方を紹介しました。本記事では、コンテナースタイルクエリーの使い方を紹介します。 ※本記事のデモは、ChromeまたはEdgeでご覧ください。ブラウザのサポート状況は、後述する「対応ブラウザ」を参照ください。 コンテナースタイルクエリーの使い方 @containerの条件をstyle()関数で定義することで、コンテナースタイルクエリーを利用できます。関数の引数には、条件とするCSS変数と値を設定します。CSS変数は、親要素に定義された値を参照します。 また、前</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/fff66941047d8ad519ad4c3bed909be8a8896672/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240723%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/07/23 17:10</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/web%E5%88%B6%E4%BD%9C" rel="tag" data-gtm-click-label="entry-info-tag">web制作</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240723/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240709/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240709/" title="ブラウザ上で可愛いフィルターを実現!TensorFlow.jsを使ったリアルタイム顔認識 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4756048415951447808" data-entry-category="テクノロジー">ブラウザ上で可愛いフィルターを実現!TensorFlow.jsを使ったリアルタイム顔認識 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240709/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>17</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240709%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240709/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">顔認識技術を利用したアプリケーションは身近なところにあります。たとえば、カメラで映した顔に猫耳やリボンなどのスタンプを自由に追加できる加工アプリ「SNOW」や、ビデオ会議ツール「Zoom」、「Microsoft Teams」で使用できるフィルター機能などがあります。これらの機能は、フェイストラッキング技術を利用しています。 この技術はアプリだけでなく、ウェブブラウザ上でも実現できます。今回は、Googleが開発した機械学習用JavaScriptライブラリ「TensorFlow.js」を使って、ウェブカメラでリアルタイムに顔が認識されるデモを作成してみました。 TensorFlow.jsとは TensorFlow.jsは、Pythonで広く利用されている機械学習ライブラリ「TensorFlow」をJavaScript用にラップしたもので、ブラウザ上で機械学習モデルを手軽に利用できるようにする</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/4362b03477d5663c2b5986d1d11258a2391c8b7c/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240709%2Fimages%2F240709_eyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/07/09 14:18</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/TensorFlow" rel="tag" data-gtm-click-label="entry-info-tag">TensorFlow</a></li> <li><a href="/q/JavaScript" rel="tag" data-gtm-click-label="entry-info-tag">JavaScript</a></li> <li><a href="/q/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6" rel="tag" data-gtm-click-label="entry-info-tag">ブラウザ</a></li> <li><a href="/q/jQuery" rel="tag" data-gtm-click-label="entry-info-tag">jQuery</a></li> <li><a href="/q/ai" rel="tag" data-gtm-click-label="entry-info-tag">ai</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240709/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-knowledge entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240702/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240702/" title="Figmaの基本機能で簡単につくる、テキスト&あしらい表現TIPS - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4755723323239898112" data-entry-category="学び">Figmaの基本機能で簡単につくる、テキスト&あしらい表現TIPS - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240702/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>42</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240702%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240702/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">リリース以来数多くのアップデートが行われ、多機能になっていくFigma。今回はそんなFigmaの基本機能を使用した、簡単なデザイン作成やあしらいづくりに活かせる表現TIPSを紹介します。 テキストの表現 マスク機能やエフェクト、そしてレイヤーのブレンドモードを使用したテキストの表現をいくつか紹介します。 TIPS:画像をテキストでマスクする マスク機能を使用して、画像をテキストの形に切り抜きます。 以下の手順で切り抜きます。 画像とテキストレイヤーを用意 画像が前面になるようにして、画像とテキストレイヤーを重ねる 両方のレイヤーを選択状態にして、右クリックメニューから[マスクとして使用]を選択(ショートカットキーは、Mac:control + command + M、Windows:Ctrl + Alt + M) マスクした後も、テキストレイヤーは編集可能です。 さらに画像をレイヤーブラー</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/014cd7fb5467c6c615f895d977426600bff0368c/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240702%2Fimages%2Feyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/knowledge" data-gtm-click-label="entry-info-category">学び</a> </li> <li class="entrylist-contents-date">2024/07/02 14:06</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/Figma" rel="tag" data-gtm-click-label="entry-info-tag">Figma</a></li> <li><a href="/q/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">デザイン</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/%E5%8A%B9%E6%9E%9C" rel="tag" data-gtm-click-label="entry-info-tag">効果</a></li> <li><a href="/q/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB" rel="tag" data-gtm-click-label="entry-info-tag">チュートリアル</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240702/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240625/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240625/" title="JSでLottieを配置する方法 - パフォーマンスの最適化方法も紹介! - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4755407690740031520" data-entry-category="テクノロジー">JSでLottieを配置する方法 - パフォーマンスの最適化方法も紹介! - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240625/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>19</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240625%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240625/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">「Lottieロッティー」はベクター画像のアニメーションを実現できる技術・ファイルフォーマットです。 Lottieアニメーションの作り方編の記事(Figma編、After Effects編)では、Lottieの概要から作り方、ファイルの書き出し方を紹介しました。そして、実装編の前編となる記事では、HTMLメインで実装できるお手軽な実装方法を紹介しました。 実装編の後編となる本記事では、JavaScriptメインに実装する方法の基本事項、およびパフォーマンス考慮についてのポイントを紹介します。 「Lottie=軽い」と思っていませんか? 一般的にウェブサイトの「軽い」「重い」には、読み込みデータ量の大小を指す場合と、動作負荷でのもたつきを指す場合の2つの意味があります。確かにデータ量的にはLottieは軽いといえますが、実はLottieのアニメーションは表示や動作の負荷的に重くなりがちです。</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/8194e40e767a35cf66fd45cf87a16d97f0222318/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240625%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/06/25 18:47</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">アニメーション</a></li> <li><a href="/q/javascript" rel="tag" data-gtm-click-label="entry-info-tag">javascript</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/Animation" rel="tag" data-gtm-click-label="entry-info-tag">Animation</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240625/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240617/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240617/" title="要素の幅でレスポンシブ対応を行える! コンテナークエリーの使い方 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4755230050263662592" data-entry-category="テクノロジー">要素の幅でレスポンシブ対応を行える! コンテナークエリーの使い方 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240617/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>40</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240617%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240617/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">コンテナークエリー(@container)は、CSSの新しいアットルールです。従来のメディアクエリー(@media)とは異なる手法で、レスポンシブウェブデザインができます。メディアクエリーはビューポート(ブラウザ幅)を条件にスタイルを適用できるのに対して、コンテナークエリーは要素の幅を条件にスタイルを適用できます。 コンテナークエリーを利用することで、再利用性の高いパーツを実装できます。とくに、カラム数が多いレイアウトや複雑な横並びの要素において、コンテナークエリーは有効な機能です。 この記事では、簡単な作例と使用上の注意点を紹介します。 コンテナークエリーの使い方 作例の紹介の前に、コンテナークエリーの使い方を簡単に説明します。 コンテナークエリーを使用するためには、使用したい親の要素にcontainer-typeプロパティを設定する必要があります。以下の2通りの指定ができます。 con</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/d755a176ef5a8c4d11cec0397e4b176f0eb95d2c/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240617%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/06/21 22:53</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/%E8%A6%81%E7%B4%A0" rel="tag" data-gtm-click-label="entry-info-tag">要素</a></li> <li><a href="/q/%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B7%E3%83%96" rel="tag" data-gtm-click-label="entry-info-tag">レスポンシブ</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240617/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240611/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240611/" title="ReactとZodで作る堅牢なフォームバリデーション - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4754759641570330080" data-entry-category="テクノロジー">ReactとZodで作る堅牢なフォームバリデーション - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240611/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>69</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240611%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240611/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">前回の記事『2024年版 HTMLで作るフォームバリデーション』ではHTMLの機能を駆使したフォームバリデーションの実装について解説しました。HTMLのみでも高機能なフォームを作成できるのは解説したとおりですが、HTMLに加えてJavaScriptを組み合わせることでより高機能なフォームを作成できます。それに加えて、開発者体験の向上も期待できます。 本記事では3つのライブラリを使用して実践的なフォームを作成する方法を解説します。 UIライブラリ「React」 フォーム向けライブラリ「React Hook Form」 型システムと相性の良いスキーマバリデーションライブラリ「Zod」 また、静的型付け言語であるTypeScriptもこれらのライブラリと同時に使用し、堅牢なフォームの実装を目指します。 本記事を読むことで以下の知識が身につきます。 フォーム画面のユーザー体験(UX)と、フォーム実</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/0c3d88c20133af3616307f63429587d11d6d6408/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240611%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/06/11 19:29</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/React" rel="tag" data-gtm-click-label="entry-info-tag">React</a></li> <li><a href="/q/TypeScript" rel="tag" data-gtm-click-label="entry-info-tag">TypeScript</a></li> <li><a href="/q/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0" rel="tag" data-gtm-click-label="entry-info-tag">フォーム</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">バリデーション</a></li> <li><a href="/q/zod" rel="tag" data-gtm-click-label="entry-info-tag">zod</a></li> <li><a href="/q/Form" rel="tag" data-gtm-click-label="entry-info-tag">Form</a></li> <li><a href="/q/development" rel="tag" data-gtm-click-label="entry-info-tag">development</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240611/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240603/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240603/" title="Figmaでちょっとしたデザインをつくるときに使っているプラグイン8選 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4754389833383371392" data-entry-category="テクノロジー">Figmaでちょっとしたデザインをつくるときに使っているプラグイン8選 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240603/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>309</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240603%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240603/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">アイコンやスライド作成など、デザイナーに限らずちょっとしたデザインをつくる機会はありませんか? そんなとき、Figmaのプラグインを使うと、いつもより少し凝ったデザインを手軽につくることができます。 今回は、画像加工やあしらいをつくるときに便利なプラグインを8個紹介します。2024年6月時点で、すべて無料で使用できるので気軽に試してみてください。 Figmaのプラグインを使ったことがないという方は、以下の記事で使い方を紹介していますので参考ください。 『Figmaを使いこなせ! デザイナー必須のおすすめプラグイン15選』 1. Noise & Texture Noise & Texture | Figma 「Noise & Texture」は、ノイズやさまざまなテクスチャーを画像として作成できるプラグインです。 プラグイン実行後、設定パネル内の[Add to Canvas]をクリックすると</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/31a04d94c6492da0615e62539555345571a31d7d/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240603%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/06/03 20:09</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/Figma" rel="tag" data-gtm-click-label="entry-info-tag">Figma</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">デザイン</a></li> <li><a href="/q/tips" rel="tag" data-gtm-click-label="entry-info-tag">tips</a></li> <li><a href="/q/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">プラグイン</a></li> <li><a href="/q/%E8%A8%AD%E5%AE%9A" rel="tag" data-gtm-click-label="entry-info-tag">設定</a></li> <li><a href="/q/%E7%94%BB%E5%83%8F" rel="tag" data-gtm-click-label="entry-info-tag">画像</a></li> <li><a href="/q/design" rel="tag" data-gtm-click-label="entry-info-tag">design</a></li> <li><a href="/q/%E3%83%86%E3%82%AF%E3%82%B9%E3%83%81%E3%83%A3" rel="tag" data-gtm-click-label="entry-info-tag">テクスチャ</a></li> <li><a href="/q/web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">webデザイン</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240603/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240529/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240529/" title="数値や日付をさまざまな形式の文字列に! toLocaleString()を使ってスマートに変換しよう - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4754158498792343104" data-entry-category="テクノロジー">数値や日付をさまざまな形式の文字列に! toLocaleString()を使ってスマートに変換しよう - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240529/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>41</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240529%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240529/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">数値や日付をさまざまな形式の文字列に! toLocaleString()を使ってスマートに変換しよう ウェブアプリケーションなどでは外部のAPIからデータを取得して表示することがあるでしょう。しかしながら、APIの値を必ずしもそのまま表示せず、ユーザーにとって分かりやすい文字列に加工することもあります。たとえば、数値をカンマ区切りにしたり、日付データを特定のフォーマットに変換したりといったことはみなさんも経験があるのではないでしょうか? そのような数字や日付を変換するのに便利なのが、JavaScriptのtoLocaleString()メソッドです。このメソッドを使うことで、数値や日付をさまざまな形式に変換できます。この記事では、toLocaleString()メソッドの使い方と、その応用例を紹介します。 サンプルを別ウインドウで開く コードを確認する toLocaleString()メソ</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/25448823f55ad9e5914ac8d5cff7823ea4aed887/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240529%2Fimages%2Feyecatch.png');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/05/29 20:27</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/javascript" rel="tag" data-gtm-click-label="entry-info-tag">javascript</a></li> <li><a href="/q/%E5%A4%89%E6%8F%9B" rel="tag" data-gtm-click-label="entry-info-tag">変換</a></li> <li><a href="/q/%E6%95%B0%E5%80%A4" rel="tag" data-gtm-click-label="entry-info-tag">数値</a></li> <li><a href="/q/%E6%97%A5%E4%BB%98" rel="tag" data-gtm-click-label="entry-info-tag">日付</a></li> <li><a href="/q/%E6%96%87%E5%AD%97%E5%88%97" rel="tag" data-gtm-click-label="entry-info-tag">文字列</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240529/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240523/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240523/" title="VS Codeでマークダウンを快適に書きたい! オススメの拡張機能と設定6選 - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4753884708966531264" data-entry-category="テクノロジー">VS Codeでマークダウンを快適に書きたい! オススメの拡張機能と設定6選 - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240523/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>248</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240523%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240523/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">ブログの文章やドキュメント作成など、さまざまなシーンで使われる記法に「マークダウン記法」があります。文字修飾の簡単さや読みやすさから使うタイミングは多々あると思いますが、みなさんは快適にマークダウンを書けていますか? 筆者はVS Codeでドキュメントをマークダウンで書くことが多く、表の作成・編集やプレビュー表示など、めんどくさい・見づらい・使いづらいと思うことがあります。どうにか快適に書けないかと思いさまざまな拡張機能や設定を試しながら業務を行ってきました。 この記事では、筆者が試した拡張機能やVS Codeの設定の中で便利だったものを紹介します。①から⑥まではすべて無料で利用できるので気軽に試してみてください! ①マークダウンの表をエクセルからコピペできる拡張機能 VS Codeでの表の作成に重宝しているのが「Excel to Markdown table」という拡張機能です。エクセル</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/cb1918dbd23d0d3a6aa8706a7830e6f4e767ac30/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240523%2Fimages%2Feyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/05/23 22:48</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/VSCode" rel="tag" data-gtm-click-label="entry-info-tag">VSCode</a></li> <li><a href="/q/markdown" rel="tag" data-gtm-click-label="entry-info-tag">markdown</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/%E8%A8%AD%E5%AE%9A" rel="tag" data-gtm-click-label="entry-info-tag">設定</a></li> <li><a href="/q/%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD" rel="tag" data-gtm-click-label="entry-info-tag">拡張機能</a></li> <li><a href="/q/code" rel="tag" data-gtm-click-label="entry-info-tag">code</a></li> <li><a href="/q/%2AWeb%E5%88%B6%E4%BD%9C" rel="tag" data-gtm-click-label="entry-info-tag">*Web制作</a></li> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240523/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> <li class="cat-it entrylist-image-entry js-keyboard-selectable-item"> <div class="entrylist-contents"> <div class="js-bookmark-stock-button is-hidden" data-gtm-click-label="entry-info-stock-button"> <button class="js-bookmark-stock-button-ready readlater-button" title="あとで読む" alt="あとで読む" tabindex="0" type="button" data-href="https://ics.media/entry/240425/"><span>あとで読む</span> </button> </div> <div class="entrylist-contents-main"> <h3 class="entrylist-contents-title"> <a href="https://ics.media/entry/240425/" title="HTML・CSSで実装するかわいいフキダシのアイデア - ICS MEDIA" target="_blank" rel="noopener" class="js-keyboard-openable" data-gtm-click-label="entry-info-title" data-entry-id="4752575986103430304" data-entry-category="テクノロジー">HTML・CSSで実装するかわいいフキダシのアイデア - ICS MEDIA</a> </h3> <span class="entrylist-contents-users"> <a href="/entry/s/ics.media/entry/240425/" title="すべてのブックマークを見る" class="js-keyboard-entry-page-openable" data-gtm-click-label="entry-info-users"><span>217</span> users</a> </span> <p class="entrylist-contents-domain"> <a href="/site/ics.media/" title="『ics.media』の新着エントリー" data-gtm-click-label="entry-info-root-url"> <img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fics.media%2Fentry%2F240425%2F" class="favicon" alt="" /> <span>ics.media</span> </a> </p> <div class="entrylist-contents-body"> <a href="/entry/s/ics.media/entry/240425/" title="すべてのブックマークを見る"> <p class="entrylist-contents-description" data-gtm-click-label="entry-info-description-href">見出しなどのテキストを目立たせたいときに便利なフキダシ(吹き出し)。 この記事では、HTMLとCSSだけで簡単に実装できる、シンプルなデザインのフキダシをご紹介します。 雑誌やポスターなどで見かける可愛いあしらいをウェブサイトにも取り入れたいと思ったことが、今回のテーマを選んだきっかけです。 とくにフキダシは、少ないコードで表現でき、見出しなどのテキストに華やかな印象を与えられます。 ウェブサイトを制作する際に、ぜひ取り入れてみてください。 また、この記事のほとんどの作例で、CSSの疑似要素『::before』と『::after』を利用しています。 疑似要素を使うと、不要なHTMLタグを増やさずにCSSで装飾できます。 ::before = 選択した要素の最初の子要素として疑似要素を生成 ::after = 選択した要素の最後の子要素として疑似要素を生成 これらは、要素に装飾的な内容を追加</p> <p class="entrylist-contents-thumb"> <span style="background-image:url('https://cdn-ak-scissors.b.st-hatena.com/image/square/9f6fcae9ac62ab891313b645220110f20f340d1e/height=288;version=1;width=512/https%3A%2F%2Fics.media%2Fentry%2F240425%2Fimages%2F240425_eyecatch.jpg');" data-gtm-click-label="entry-info-thumbnail"></span> </p> </a> </div> <ul class="entrylist-contents-meta"> <li class="entrylist-contents-category"> <a href="/entrylist/it" data-gtm-click-label="entry-info-category">テクノロジー</a> </li> <li class="entrylist-contents-date">2024/04/25 17:40</li> </ul> <ul class="entrylist-contents-tags"> <li><a href="/q/css" rel="tag" data-gtm-click-label="entry-info-tag">css</a></li> <li><a href="/q/html" rel="tag" data-gtm-click-label="entry-info-tag">html</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" rel="tag" data-gtm-click-label="entry-info-tag">あとで読む</a></li> <li><a href="/q/web%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">webデザイン</a></li> <li><a href="/q/%E5%90%B9%E3%81%8D%E5%87%BA%E3%81%97" rel="tag" data-gtm-click-label="entry-info-tag">吹き出し</a></li> <li><a href="/q/HTML%E3%83%BBCSS" rel="tag" data-gtm-click-label="entry-info-tag">HTML・CSS</a></li> <li><a href="/q/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB" rel="tag" data-gtm-click-label="entry-info-tag">サンプル</a></li> <li><a href="/q/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" rel="tag" data-gtm-click-label="entry-info-tag">デザイン</a></li> <li><a href="/q/design" rel="tag" data-gtm-click-label="entry-info-tag">design</a></li> <li><a href="/q/%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A2" rel="tag" data-gtm-click-label="entry-info-tag">アイデア</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ics.media/entry/240425/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> </div> </li> </ul> <p class="entrylist-readmore js-keyboard-selectable-item"> <a href="/site/ics.media/?page=2" class="js-keyboard-openable"> 次のページ </a> </p> </section> </div> <div class="entrylist-aside"> <div class="entrylist-ad-optional-rectangle"> <div id="entrylist-ad-sidebar-top"></div> </div> <div class="entrylist-ad-optional-rectangle"> <div id="entrylist-ad-sidebar-bottom"></div> </div> </div> <div class="entrylist-bottom"> </div> </div> </div> <div class="entrylist-ad-pc-banner"> <div id="entrylist-ad-banner-bottom"></div> </div> <div class="entrylist-ad-sp-rectangle"> <div id="entrylist-ad-rectangle-bottom"></div> </div> </div> <div class="drawer-menu js-drawer-menu"> <button class="drawer-menu-button js-drawer-menu-button" data-gtm-click-label="drawer-open"> <span class="drawer-notify-count js-notify-count"></span> </button> <ul class="drawer-menu-body js-drawer-body-container"> </ul> <script type="text/x-template" id="template-drawer-body"> {{ #is_login_user }} <li class="drawer-loginMenu"> <a href="/{{ user_name }}/bookmark" class="drawer-loginMenu-username" data-gtm-click-label="drawer-header-username"><img src="{{ profile_image }}" alt="{{ user_name }}" /><span>{{ user_name }}</span></a> <button type="button" class="drawer-loginMenu-button js-notify-list-button notify" data-gtm-click-label="drawer-header-notify"> <span class="drawer-notify-count js-notify-count"></span> <span class="hide-text">通知</span> </button> <span role="link" class="drawer-loginMenu-button config"> <a href="/{{ user_name }}/config" data-gtm-click-label="drawer-header-config"><span class="hide-text">設定</span></a> </span> </li> {{ /is_login_user }} {{ #is_guest_user }} <li class="drawer-menu-item"> <a href="{{ login_url }}" rel="nofollow" data-gtm-click-label="drawer-guest-login"><span>ログイン</span></a> </li> <li class="drawer-menu-item"> <a href="/guide" rel="nofollow" data-gtm-click-label="drawer-guest-guide"> <span>はてなブックマークとは</span> </a> </li> {{ /is_guest_user }} <li class="drawer-notify-list js-drawer-notify-list is-loading"> <img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/common/loading@2x.gif" class="notify-list-loading-image" alt="読み込み中" /> <iframe class="notify-list js-notify-list"></iframe> </li> <li class="drawer-menu-item"> <a href="/hotentry" data-gtm-click-label="drawer-menu-hotentry">人気エントリー</a> </li> <li class="drawer-menu-item"> <a href="/entrylist" data-gtm-click-label="drawer-menu-entrylist">新着エントリー</a> </li> {{ #is_login_user }} <li class="drawer-menu-item"> <a href="/add" data-gtm-click-label="drawer-menu-bookmarkadd">ブックマークを追加</a> </li> <li class="drawer-toggleMenu js-drawer-submenu is-open"> <button type="button" class="drawer-toggleMenu-label js-drawer-submenu-label">マイページ</button> <ul class="service-submenu"> <li class="service-submenu-item"> <a href="/{{ user_name }}/bookmark" data-gtm-click-label="drawer-mypage-mybookmark">マイブックマーク</a> </li> <li class="service-submenu-item"> <a href="/{{ user_name}}/unread_bookmark" data-gtm-click-label="drawer-mypage-unread">あとで読む</a> </li> <li class="service-submenu-item"> <a href="/{{ user_name }}/hotentry" data-gtm-click-label="drawer-mypage-myhotentry">マイホットエントリー</a> </li> <li class="service-submenu-item"> <a href="/{{ user_name }}/interest" data-gtm-click-label="drawer-mypage-interest">関心ワード</a> </li> <li class="service-submenu-item"> <a href="/{{ user_name }}/favorite" data-gtm-click-label="drawer-mypage-favorite">お気に入り</a> </li> </ul> </li> {{ /is_login_user }} <li class="drawer-toggleMenu js-drawer-submenu is-open"> <button type="button" class="drawer-toggleMenu-label js-drawer-submenu-label">カテゴリー</button> <ul class="service-submenu"> <li class="service-submenu-item"> <a href="/hotentry/general" data-gtm-click-label="drawer-category-general">一般</a> <a href="/hotentry/social" data-gtm-click-label="drawer-category-social">世の中</a> <a href="/hotentry/economics" data-gtm-click-label="drawer-category-economics">政治と経済</a> <a href="/hotentry/life" data-gtm-click-label="drawer-category-life">暮らし</a> <a href="/hotentry/knowledge" data-gtm-click-label="drawer-category-knowledge">学び</a> <a href="/hotentry/it" data-gtm-click-label="drawer-category-it">テクノロジー</a> <a href="/hotentry/fun" data-gtm-click-label="drawer-category-fun">おもしろ</a> <a href="/hotentry/entertainment" data-gtm-click-label="drawer-category-entertainment">エンタメ</a> <a href="/hotentry/game" data-gtm-click-label="drawer-category-game">アニメとゲーム</a> </li> </ul> </li> {{ #is_app_target }} <li class="drawer-toggleMenu js-drawer-submenu is-open"> <button type="button" class="drawer-toggleMenu-label js-drawer-submenu-label">アプリをダウンロード</button> <ul class="service-submenu"> {{ #is_ios }} <li class="service-submenu-item device-ios app-bookmark"> <a href="https://apps.apple.com/jp/app/hatenabukkumaku/id354976659?mt=8" data-gtm-click-label="drawer-app-ios">はてなブックマーク</a> </li> {{ /is_ios }} {{ #is_android }} <li class="service-submenu-item device-android app-bookmark"> <a href="https://play.google.com/store/apps/details?id=com.hatena.android.bookmark&referrer=utm_source%3Dbookmark_sp%26utm_campaign%3Dbookmark_sp_drawer&hl=ja" data-gtm-click-label="drawer-app-android">はてなブックマーク</a> </li> {{ /is_android }} </ul> </li> {{ /is_app_target }} </script> </div> <div class="entry-notfound-modal js-entry-notfound-modal is-hidden"> <div class="entry-notfound-modal-widnow js-modal-content"> <div class="entry-notFound"> <div class="entry-notFound-text"> <h2 class="entry-notFound-title">このページはまだ<br />ブックマークされていません</h2> <p class="entry-notFound-description"><span class="for-pc">このページを</span>最初にブックマークしてみませんか?</p> </div> <form method="get" action="/my/add.confirm" class="entry-notFound-form js-entry-notfound-form"> <input name="url" type="text" value="" class="entry-notFound-textInput js-entry-notfound-input"> <button type="submit" class="entry-notFound-btn">ブックマークする</button> </form> <p class="entry-notFound-entryList-link js-entry-notfound-entrylist-link"> <a href="/site/ics.media/"> <span>『</span><span>ブラウザからBluetoothが使える! JSでWeb Bluetooth APIを使ってBLE機器を操作す...</span><span>』の新着エントリーを見る</span> </a> </p> </div> <button type="button" class="entry-notfound-modal-window-close js-modal-close-button">閉じる</button> </div> </div> <div id="keyboard-shortcut-help" class="shortcut-help is-hidden"> <h3 class="shortcut-help-title">キーボードショートカット一覧</h3> <p><span class="shortcut-help-key">j</span>次のブックマーク</p> <p><span class="shortcut-help-key">k</span>前のブックマーク</p> <p><span class="shortcut-help-key">l</span>あとで読む</p> <p><span class="shortcut-help-key">e</span>コメント一覧を開く</p> <p><span class="shortcut-help-key">o</span>ページを開く</p> <button tyle="button" class="shortcut-help-close js-close-button">✕</button> </div> <script id="valve-dmp" data-service="bookmark" src="//cdn.pool.st-hatena.com/valve/dmp.js" async></script> <div class="footer"> <div class="footer-inner"> <div class="footer-inner-group footer-bookmark"> <h2 class="footer-title"><a href="/" data-gtm-label="footer-btop">はてなブックマーク</a></h2> <div class="footer-list-wrapper"> <ul class="footer-list footer-list--pc"> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/all" class="hotentry js-keyboard-openable" data-gtm-label="footerCategories-hotentry">総合</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/general" class="general js-keyboard-openable" data-gtm-label="footerCategories-general">一般</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/social" class="cat-social js-keyboard-openable" data-gtm-label="footerCategories-social">世の中</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/economics" class="cat-economics js-keyboard-openable" data-gtm-label="footerCategories-economics">政治と経済</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/life" class="cat-life js-keyboard-openable" data-gtm-label="footerCategories-life">暮らし</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/knowledge" class="cat-knowledge js-keyboard-openable" data-gtm-label="footerCategories-knowledge">学び</a></li> </ul> <ul class="footer-list footer-list--pc"> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/it" class="cat-it js-keyboard-openable" data-gtm-label="footerCategories-it">テクノロジー</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/entertainment" class="cat-entertainment js-keyboard-openable" data-gtm-label="footerCategories-entertainment">エンタメ</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/game" class="cat-game js-keyboard-openable" data-gtm-label="footerCategories-game">アニメとゲーム</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/fun" class="cat-fun js-keyboard-openable" data-gtm-label="footerCategories-fun">おもしろ</a></li> </ul> <ul class="footer-list"> <li class="footer-list-item"><a href="/guide/tools">アプリ・拡張機能</a></li> <li class="footer-list-item"><a href="https://bookmark.hatenastaff.com/">開発ブログ</a></li> <li class="footer-list-item"><a href="/help/">ヘルプ</a></li> <li class="footer-list-item"><a href="https://hatena.zendesk.com/hc/ja/categories/900000153166">お問い合わせ</a></li> <li class="footer-list-item footer-list-item--sp"><a href="/guide/guideline">ガイドライン</a></li> <li class="footer-list-item footer-list-item--sp"><a href="https://policies.hatena.ne.jp/rule">利用規約</a></li> <li class="footer-list-item footer-list-item--sp"><a href="https://policies.hatena.ne.jp/privacypolicy-ja">プライバシーポリシー</a></li> <li class="footer-list-item footer-list-item--sp"><a href="https://policies.hatena.ne.jp/cookie-policy">利用者情報の外部送信について</a></li> </ul> <ul class="footer-list footer-list--pc"> <li class="footer-list-item footer-list-item--pc"><a href="/guide/guideline">ガイドライン</a></li> <li class="footer-list-item footer-list-item--pc"><a href="https://policies.hatena.ne.jp/rule">利用規約</a></li> <li class="footer-list-item footer-list-item--pc"><a href="https://policies.hatena.ne.jp/privacypolicy-ja">プライバシーポリシー</a></li> <li class="footer-list-item footer-list-item--pc"><a href="https://policies.hatena.ne.jp/cookie-policy">利用者情報の外部送信について</a></li> </ul> </div> </div> <div class="footer-inner-group footer-bookmark-sns"> <h2 class="footer-title">公式Twitter</h2> <div class="footer-bookmark-list"> <ul class="footer-list"> <li class="footer-list-item"><a href="https://twitter.com/HatenaBookmark" target="_blank" rel="noopener" data-gtm-click-label="footer-officialTwitter-name">公式アカウント</a></li> <li class="footer-list-item"><a href="https://twitter.com/hatebu" target="_blank" rel="noopener" data-gtm-click-label="footer-hotentryTwitter-name">ホットエントリー</a></li> </ul> </div> </div> <div class="footer-inner-group footer-hatena"> <h2 class="footer-title">はてなのサービス</h2> <ul class="footer-list"> <li class="footer-list-item"><a href="https://hatenablog.com/" data-gtm-label="footerServices-blog">はてなブログ</a></li> <li class="footer-list-item"><a href="https://hatenablog.com/guide/pro?plus_via=hatenabookmark_footer&utm_source=hatenabookmark&utm_medium=referral&utm_campaign=hatenabookmark_to_hatenablog_pro&utm_content=hatenabookmark_footer" data-gtm-label="footerServices-blog-pro">はてなブログPro</a></li> <li class="footer-list-item"><a href="https://q.hatena.ne.jp/" data-gtm-label="footerServices-question">人力検索はてな</a></li> <li class="footer-list-item"><a href="http://d.hatena.ne.jp/" data-gtm-label="footerServices-keyword">はてなブログ タグ</a></li> <li class="footer-list-item"><a href="http://hatenanews.com/" data-gtm-label="footerServices-hatenanews">はてなニュース</a></li> <li class="footer-list-item"><a href="https://soredoko.jp/" data-gtm-label="footerServices-soredoko">ソレドコ</a></li> </ul> </div> </div> <div class="footer-bottom"> <div class="footer-app"> <ul> <li class="footer-list-item"><a href="https://apps.apple.com/jp/app/hatenabukkumaku/id354976659?mt=8" target="_blank" rel="noopener" data-gtm-click-label="footer-app-ios"><img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/common/dl-button/appstore@2x.png" alt="App Storeからダウンロード"></a></li> <li class="footer-list-item"><a href="https://play.google.com/store/apps/details?id=com.hatena.android.bookmark&referrer=utm_source%3Dbookmark_sp%26utm_campaign%3Dbookmark_sp_user&hl=ja" target="_blank" rel="noopener" data-gtm-click-label="footer-app-android"><img src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/images/v4/public/common/dl-button/googleplay@2x.png" alt="Google Playで手に入れよう"></a></li> </ul> </div> <div class="copyright">Copyright © 2005-2025 <a href="http://www.hatena.ne.jp/">Hatena</a>. All Rights Reserved.</div> </div> </div> <div id="touch-footer-ad"></div> <div id="touch-footer-ad-placeholder"></div> <div class="modal-overlay"></div> <script type="text/javascript" src="https://b.st-hatena.com/21bb37de101e3d895eac61554a1ca07012b63961/js/v4/bookmark.star.js" async></script> <div class="js-head-notify is-hidden">設定を変更しました<span class="js-head-notify-close-button">x</span></div> </body> </html>