まず、結論から申し上げます。
「display: inline
は仕様がややこしすぎるので、安易に触るべからず」
さて、まず比較的簡単な②についてですが。
__aタグのwidthは270pxでheightは文字サイズと同じ16px(widthは想定通りでしたが、heightは200pxになると思っていました)。 __
これは以下の仕様によるものだと思います。
The content area of the inline box is sized and positioned to fit (possibly hypothetical) text from its first available font.
6.1. Inline Box Heights: the inline-sizing property | CSS Inline Layout Module Level 3
以上のように、通常ですとインラインボックスの高さは「最初の有効なフォント」に合わせられるようになっていることが原因です。(なお、このプロパティを実装しているブラウザはないと思います)
ただ、当方で試したところ、heightは文字サイズと同じではなく、フォントサイズの1.5倍でした。
この差は、おそらくフォントやOSの違いによるものだと思います。
(ためしに、font-family を変えてみてください。高さが変わるはずです)
先ほどの仕様には続きがあります。
This specification does not specify how. A UA may, e.g., use the the maximum ascender and descender of the font.
6.1. Inline Box Heights: the inline-sizing property | CSS Inline Layout Module Level 3
訳:この仕様はどのように実装するかを定めません。例えば、UAは最大アセンダーと最大ディセンダーを使用することができます。
フォントに詳しい方の間では有名な話なのですが、同じフォントでもOSによってアセンダーとディセンダーの値が異なります。
つまり、インラインボックスの高さについて、何かを期待するのはやめた方がいいです。
次に、ややこしい①についてですが。
aタグのwidthはウィンドウのサイズでheightは200px(heightは想定通りでしたが、widthは200pxになると思っていました)。
ご提示のコードに少し変更を加えたものを、サンプルとして提示します。
https://jsfiddle.net/Lhankor_Mhy/upvr0L7y/
これは、ボーダーとパディングを当てたものですが、ご覧の通りインラインボックスが途中で改行した時のようにちぎれています。
MDNによると、
flow
要素は、フローレイアウト (ブロックおよびインラインのレイアウト) を使用して、内容物をレイアウトします。
外部表示種別が inline または run-in であり、またブロックまたはインラインの整形コンテキストに関係する場合は、インラインボックスを生成します。
display - CSS: カスケーディングスタイルシート | MDN
となってます。
ですので、a要素はインラインボックスを生成しますが、インラインボックスにはブロックレベル要素が入らないので、その場で改行が起きたように処理され、ブロックレベル要素がブロック整形コンテキストに従って配置され、フロートもされていないので回り込みも起きず、ブロックレベル要素の後にインラインボックスの続きが表示されているのだと思います。
ただ、そのブロックレベル要素自体はa要素の子要素なので、リンクの対象となっており、ブロック整形コンテキストで配置されたブロックレベル要素は水平方向全てを使ってしまうため、横幅一杯にリンクが広がっているのだと思います。
これは、a要素の親要素にdisplay: flex
を適用して、ブロック整形コンテキストではなくフレックス整形コンテキスト下に置いてみると、違いがわかるかと思います。(サンプルの下部)
(この部分は誤っていたので削除します。)
つまり、インラインボックスの中にインラインレベル以外のものを入れるな、ということかと思います。