
どうも!フジグチです!
はてなのロゴが新しくなりました。わたしが思うはてな(ブログ)のロゴは なのですが、変わったのは、株式会社はてなのロゴマークです。
以前のひし形のマークからシンプルな丸になり、「?」はてなマークが浮かんでいるのがよく分かるようになりました。

新しいロゴを見て気付いたのですが、以前のロゴも「?」はてなマークをモチーフにしていたんですね。
このロゴについてはてなは以下のように述べています。
ロゴマークは、「ノード」や「二進法」をモチーフに、知的好奇心と当社を象徴する「はてなマーク」が浮かび上がるデザインです。
また、技術の力でWebサービスを開発する「ものづくり」企業として、シンボルマークも身近なものを使って「つくる」ことができるよう設計しました。
「身近なものを使ってつくることができる」という言葉に「知的好奇心」がくすぐられたのでHTMLとCSSでこのロゴを作ってみました。
とは言っても丸を並べただけで簡単にできそうなので、「Hatena」の部分も合わせて作ってみました。
とりあえずロゴは簡単そうなので、属性セレクタや否定疑似クラスなどを使用して、いかに難しそうな感じのCSSで書くかということ。
「Hatena」の部分は1文字につき使っていい要素は空の<span>タグ1つのみとし、あとはCSSで工夫して作ること。という謎のルールを決めて作ってみました。
そうして出来たのがこちら▽
もう一度ホントのロゴ▽

どれがホントのロゴ?(正解はクリックするとポップアップされます)

コードは以下のようになっていますが、見たまま編集では空タグは削除されてしまうので使えません。
<div class="logo">
<div class="logo-container">
<div class="logo-wrap1">
<span></span>
<span></span>
</div>
<div class="logo-wrap2">
<span></span>
<span></span>
<span></span>
</div>
<div class="logo-wrap3">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
<div class="logo-wrap4">
<span></span>
<span></span>
<span></span>
</div>
<div class="logo-wrap5">
<span></span>
</div>
</div>
<div class="title-container">
<span class="H"></span>
<span class="a"></span>
<span class="t"></span>
<span class="e"></span>
<span class="n"></span>
<span class="a"></span>
</div>
</div>
<style>
.logo {
display: flex;
align-items: center;
padding: 2em 0 2em 2em;
font-size: 2.7vw;
}
@media (min-width: 360px) {
.logo {
font-size: 10px;
padding: 2em;
}
}
.logo-container {
min-width: 7em;
margin-right: 1.5em;
}
[class^="logo-wrap"] {
display: flex;
width: 100%;
height: 100%;
justify-content: space-evenly;
margin-bottom: .25em;
}
[class^="logo-wrap"]:last-child {
margin-top: .5em;
}
[class^="logo-wrap"] span {
display: block;
width: 1em;
height: 1em;
background: #eeefef;
border-radius: 50%;
}
.logo-wrap1 {
justify-content: center;
}
.logo-wrap1 span {
margin: 0 .5em;
}
.logo-wrap3 {
justify-content: space-between;
}
.logo-wrap1 span, .logo-wrap2 span:not(:nth-child(2)), .logo-wrap3 span:nth-child(3), .logo-wrap5 span {
background: #00a1f0;
}
.title-container {
display: flex;
align-items: flex-end;
}
.H {
width: .8em;
height: 4em;
display: flex;
background: #0c0c12;
border-radius: 1px;
position: relative;
box-shadow: 2.6em 0 0 #0c0c12;
margin-right: 2.6em;
}
.H::before {
content: "";
display: block;
width: 3.3em;
height: .6em;
background: #0c0c12;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.a {
border-radius: 50%;
width: 3em;
height: 3.2em;
background: #fff;
position: relative;
margin-left: .5em;
box-shadow: inset .1em 0 0 .6em #0c0c12;
z-index: 1;
}
.a::before {
content: "";
display: block;
width: .8em;
height: 3em;
background: #0c0c12;
border-radius: 1px;
position: absolute;
right: -.2em;
top: .1em;
z-index: 2;
}
.t {
background: #0c0c12;
width: 1.3em;
height: 3.7em;
margin-left: 1.3em;
border-radius: .1em 0 .1em .8em;
position: relative;
}
.t::before {
content: "";
display: block;
width: .6em;
height: 3.1em;
background: #fff;
border-radius: 0 0 0 1px;
position: absolute;
top: -.1em;
right: -.1em;
z-index: 2;
}
.t::after {
content: "";
display: block;
width: 1.8em;
height: .6em;
background: #0c0c12;
border-radius: 1px;
position: absolute;
top: .7em;
right: 0;
z-index: 3;
}
.e {
background: #fff;
width: 3.2em;
height: 3.2em;
margin-left: .5em;
border-radius: 50%;
box-shadow: inset 0 0 0 .7em #0c0c12;
position: relative;
}
.e::before {
content: "";
display: block;
width: 2.8em;
height: .6em;
background: #0c0c12;
border-radius: .1em .5em;
position: absolute;
top: 50%;
right: 0;
transform: translateY(-50%);
z-index: 3;
}
.e::after {
content: "";
display: block;
border-style: solid;
border-width: .9em 1.8em 0 1.8em;
border-color: #fff transparent transparent transparent;
position: absolute;
right: -2em;
bottom: .4em;
z-index: 2;
}
.n {
background: #0c0c12;
width: 2.2em;
height: 3em;
margin-left: 1.3em;
border-radius: 1.2em 1.2em .2em 0;
position: relative;
}
.n::before {
content: "";
display: block;
width: .8em;
height: 2.9em;
background: #0c0c12;
border-radius: 1px;
position: absolute;
top: .1em;
left: -.7em;
z-index: 2;
}
.n::after {
content: "";
display: block;
width: 1.4em;
height: 2.3em;
background: #fff;
border-radius: 1em 1em 0 0;
position: absolute;
bottom: -.1em;
right: .8em;
z-index: 1;
}
</style>
あとがき
パーツごとに色分けるとこのようになっています。

「H」は左右にラインを引き真ん中に線を引けば出来そうですが、そうすると全ての角を丸めることが出来ないので、疑似要素とbox-shadowで色々とやっています(他の文字も)。
知的好奇心をくすぐられて作ってみましたが、文字の角を1px丸めるというのが難しくて「t」「e」「n」の一部分は妥協してしまいました。
たった1pxされど1px。このこだわりに気付いてくれる方が、どれくらいいるか分かりませんが(笑)