これは、ChromeがWindows10でHTMLをレンダリングする方法です。
そして、これはInternet Explorer11がWindows10で私のHTMLをレンダリングする方法です。
Chromeではすべてのサブメニューリンクが表示されますが、Internet Explorer11では表示されないことに注意してください。InternetExplorer11で機能させるにはどうすればよいですか。
これが私のコードです:
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
min-width: 1280px;
}
a {
color: #000;
text-decoration: none;
}
a.active {
color: #f00;
}
ul {
margin: 0;
padding: 0;
}
ul li {
display: inline-block;
}
.menu > li {
position: relative;
font-size: 18px;
}
.menu > li + li {
margin-left: 100px;
}
.submenu {
position: absolute;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
.submenu-4,
.submenu-5 {
right: 0;
}
.submenu li {
font-size: 14px;
white-space: nowrap;
}
.submenu > li + li {
margin-left: 25px;
}
a:not(.active) + ul {
display: none;
}
<nav>
<ul class="menu">
<li>
<a href="#">Top Level Link 1</a>
<ul class="submenu submenu-1">
<li><a href="#">Submenu 1 Link 1</a></li>
<li><a href="#">Submenu 1 Link 2</a></li>
<li><a href="#">Submenu 1 Link 3</a></li>
<li><a href="#">Submenu 1 Link 4</a></li>
<li><a href="#">Submenu 1 Link 5</a></li>
</ul>
</li>
<li>
<a href="#">Top Level Link 2</a>
<ul class="submenu submenu-2">
<li><a href="#">Submenu 2 Link 1</a></li>
<li><a href="#">Submenu 2 Link 2</a></li>
<li><a href="#">Submenu 2 Link 3</a></li>
<li><a href="#">Submenu 2 Link 4</a></li>
<li><a href="#">Submenu 2 Link 5</a></li>
</ul>
</li>
<li>
<a href="#">Top Level Link 3</a>
<ul class="submenu submenu-3">
<li><a href="#">Submenu 3 Link 1</a></li>
<li><a href="#">Submenu 3 Link 2</a></li>
<li><a href="#">Submenu 3 Link 3</a></li>
<li><a href="#">Submenu 3 Link 4</a></li>
<li><a href="#">Submenu 3 Link 5</a></li>
</ul>
</li>
<li>
<a href="#" class="active">Top Level Link 4</a>
<ul class="submenu submenu-4">
<li><a href="#">Submenu 4 Link 1</a></li>
<li><a href="#">Submenu 4 Link 2</a></li>
<li><a href="#">Submenu 4 Link 3</a></li>
<li><a href="#">Submenu 4 Link 4</a></li>
<li><a href="#">Submenu 4 Link 5</a></li>
</ul>
</li>
<li>
<a href="#">Top Level Link 5</a>
<ul class="submenu submenu-5">
<li><a href="#">Submenu 5 Link 1</a></li>
<li><a href="#">Submenu 5 Link 2</a></li>
<li><a href="#">Submenu 5 Link 3</a></li>
<li><a href="#">Submenu 5 Link 4</a></li>
<li><a href="#">Submenu 5 Link 5</a></li>
</ul>
</li>
</ul>
</nav>
私はFlexboxを採用することに非常に賛成であり、最近のすべてのプロジェクトで採用していますが、コードでは重要な役割を果たしていないようです。そのことを念頭に置いて、 CSSからdisplay: flex
とそのバリアントを削除し、white-space: nowrap
を.submenu
に追加すると、この特定の問題に対するより簡単で保守しやすい修正があることを知っています。
このようにして、サブメニュー項目の並べ替えを処理する必要がなくなります。これは、項目の数が変更された場合に問題になる可能性があります。
ある日、IE11が問題でなくなったら、元のコードに戻ることができます。
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
min-width: 1280px;
}
a {
color: #000;
text-decoration: none;
}
a.active {
color: #f00;
}
ul {
margin: 0;
padding: 0;
}
ul li {
display: inline-block;
}
.menu > li {
position: relative;
font-size: 18px;
}
.menu > li + li {
margin-left: 100px;
}
.submenu {
position: absolute;
/* removed flexbox */
white-space: nowrap; /* new */
}
.submenu-4,
.submenu-5 {
right: 0;
}
.submenu li {
font-size: 14px;
white-space: nowrap;
}
.submenu > li + li {
margin-left: 25px;
}
a:not(.active) + ul {
display: none;
}
<nav>
<ul class="menu">
<li>
<a href="#">Top Level Link 1</a>
<ul class="submenu submenu-1">
<li><a href="#">Submenu 1 Link 1</a></li>
<li><a href="#">Submenu 1 Link 2</a></li>
<li><a href="#">Submenu 1 Link 3</a></li>
<li><a href="#">Submenu 1 Link 4</a></li>
<li><a href="#">Submenu 1 Link 5</a></li>
</ul>
</li>
<li>
<a href="#">Top Level Link 2</a>
<ul class="submenu submenu-2">
<li><a href="#">Submenu 2 Link 1</a></li>
<li><a href="#">Submenu 2 Link 2</a></li>
<li><a href="#">Submenu 2 Link 3</a></li>
<li><a href="#">Submenu 2 Link 4</a></li>
<li><a href="#">Submenu 2 Link 5</a></li>
</ul>
</li>
<li>
<a href="#">Top Level Link 3</a>
<ul class="submenu submenu-3">
<li><a href="#">Submenu 3 Link 1</a></li>
<li><a href="#">Submenu 3 Link 2</a></li>
<li><a href="#">Submenu 3 Link 3</a></li>
<li><a href="#">Submenu 3 Link 4</a></li>
<li><a href="#">Submenu 3 Link 5</a></li>
</ul>
</li>
<li>
<a href="#" class="active">Top Level Link 4</a>
<ul class="submenu submenu-4">
<li><a href="#">Submenu 4 Link 1</a></li>
<li><a href="#">Submenu 4 Link 2</a></li>
<li><a href="#">Submenu 4 Link 3</a></li>
<li><a href="#">Submenu 4 Link 4</a></li>
<li><a href="#">Submenu 4 Link 5</a></li>
</ul>
</li>
<li>
<a href="#">Top Level Link 5</a>
<ul class="submenu submenu-5">
<li><a href="#">Submenu 5 Link 1</a></li>
<li><a href="#">Submenu 5 Link 2</a></li>
<li><a href="#">Submenu 5 Link 3</a></li>
<li><a href="#">Submenu 5 Link 4</a></li>
<li><a href="#">Submenu 5 Link 5</a></li>
</ul>
</li>
</ul>
</nav>