2013-04-26 16 views
5

Câu hỏi này có vẻ hơi điên rồ, nhưng tôi muốn giải thích rõ ràng mọi thứ.Tại sao nút này không mở rộng đến độ rộng của nội dung trong Firefox giống như trong các trình duyệt khác?

Kết quả mong muốn

Tôi có thanh menu ngang với menu phụ. Tôi đã tạo nó từ đầu, vì vậy tôi không sử dụng bất kỳ khung công tác hiện có nào. Nó sử dụng kết hợp các nút, neo và nhịp để đánh dấu ngữ nghĩa.

  • neo cho các hạng mục đó đi đến một trang mới
  • nút cho các hạng mục mà đừng đi đâu cả nhưng có menu con
  • nhịp cho các hạng mục tàn tật

Lưu ý: Trang web này là một số lượng người dùng cụ thể có giới hạn vì vậy tôi không quan tâm đến việc thiếu khả năng truy cập.

Menu phụ phải rộng bằng mục menu rộng nhất chứa trong đó. Và mỗi mục menu phải điền vào chiều rộng của menu con sao cho con trỏ và các đường nét tiêu điểm hiển thị như mong muốn.

Vấn đề

Trong Firefox, một menu con không mở rộng đến chiều rộng của mặt hàng rộng nhất trong các tình huống sau:

  • menu con là hoàn toàn vị trí
  • menu con được chứa trong một khối có vị trí khác với static
  • menuitem dài nhất là một nút

Tôi đã thử nghiệm với Chrome, IE 8, Firefox 12 và Firefox 20. Nó hiển thị như mong muốn trong Chrome và IE, nhưng không hiển thị trong cả hai phiên bản của Firefox.

Tôi đã tạo phiên bản thu nhỏ với JavaScript, hình ảnh, mục bị vô hiệu hóa và nhiều mục menu đã bị xóa. Mã dưới đây và cũng trên jsFiddle. Dưới đây là một ảnh chụp màn hình trong Firefox 20.

Firefox screenshot with squished menu item
Lưu ý cách Titles Mục mục được squished. Menu phụ chỉ rộng bằng Tiêu đề trang mục (có đệm). Cũng lưu ý rằng đây không phải là vấn đề trong menu con cấp cao nhất - trình đơn đó được mở rộng tới chiều rộng Tùy chỉnh tiêu đề PDF.

Các tiêu đề mục Mục là một nút. Nếu tôi thay đổi nó thành một neo, menu con sẽ mở rộng như mong muốn. Nếu tôi thay đổi nút CSS để xóa width: 100%, thì menu phụ sẽ mở rộng như mong muốn. Nhưng sau đó, các mục menu hẹp hơn menu phụ không còn lấp đầy chiều rộng (ngay cả khi tôi thêm display: block).

Đây là ảnh chụp màn hình về cách sửa lỗi ngắt các phần khác của trình đơn.

Firefox screenshot with narrow menu item
Lưu ý cách con trỏ không phải là con trỏ khi di chuột ra ngoài văn bản.Có, tôi có thể khắc phục điều đó bằng cách thay đổi con trỏ cho số li, nhưng vấn đề khác là phác thảo tiêu điểm. Tôi muốn các phác thảo tập trung được xung quanh toàn bộ mục trình đơn không chỉ là văn bản (đó là cách nó hoạt động với width: 100%).

Tôi cũng đã thử chơi xung quanh với -moz-box-sizing, nhưng vẫn không có niềm vui.

Cách giải quyết đơn giản, đối với trường hợp cụ thể này, tôi vừa thêm một vài số   vào Tiêu đề trang để làm cho dài hơn. Nhưng giải pháp đó sẽ không hoạt động khi trình đơn được tạo động.

HTML Mã (jsFiddle)

<ul id="navAdminMenu"> 
    <li><a href="#">Companies</a></li 
    ><li class="hasSubmenu"><button type="button">Books</button> 
     <ul> 
      <li><a href="#">Manage Books</a></li 
      ><li><a href="#">PDF Profiles</a></li 
      ><li class="hasSubmenu"><button type="button">Customize PDF Titles</button> 
       <ul> 
        <li><a href="#">Page Titles</a></li 
        ><li class="hasSubmenu"><button type="button">Section Titles</button> 
         <ul> 
          <li><a href="#">Profile Section</a></li 
          ><li><a href="#">Index Section</a></li> 
         </ul> 
        </li> 
       </ul> 
      </li> 
     </ul> 
    </li 
    ><li class="hasSubmenu"><button type="button">Lists</button> 
     <ul> 
      <li class="hasSubmenu"><button type="button">Categories</button> 
       <ul> 
        <li><a href="#">Manage</a></li 
        ><li><a href="#">Reports</a></li> 
       </ul> 
      </li 
      ><li><a href="#">Key Contact Positions</a></li> 
     </ul> 
    </li> 
</ul> 

CSS Mã

#navAdminMenu { 
    font-family: Arial, Helvetica, sans-serif; 
    font-size: 1em; 
    list-style: none; 
    margin: 0; 
    padding: 0; 
    background-color: #efefef; 
} 
#navAdminMenu button { 
    margin: 0; 
    padding: 0; 
    vertical-align: baseline; 
    border: none; 
    background-color: transparent; 
    cursor: pointer; 
    font-family: Arial, Helvetica, sans-serif; 
    font-size: 1em; 
} 
#navAdminMenu button::-moz-focus-inner { 
    padding: 0; 
    border: none; 
} 
#navAdminMenu a { 
    text-decoration: none; 
} 
#navAdminMenu li { 
    display: inline-block; 
    margin: 0; 
    border-right: 1px solid #ccc; 
} 
#navAdminMenu li:hover { 
    background-color: #4b545f; 
} 
#navAdminMenu > li > button, #navAdminMenu > li > a { 
    display: inline-block; 
    height: 2.3em; 
    line-height: 2.6; 
    padding: 0 10px; 
} 
#navAdminMenu > li > button, #navAdminMenu > li > a { 
    color: #06c; 
} 
#navAdminMenu > li > button:focus, #navAdminMenu > li > a:focus { 
    outline: 0; /* Firefox displays outline outside the menu box-shadow */ 
    box-shadow: 0 0 0 3px #06c; 
} 
#navAdminMenu > li:hover > button, #navAdminMenu > li:hover > a { 
    color: #fff; 
} 
#navAdminMenu > li.hasSubmenu > button:after { 
    content: "v"; 
    display: inline-block; 
    width: 13px; 
    margin-left: 5px; 
} 
#navAdminMenu ul { 
    display: none; 
    position: absolute; 
    padding: 0; 
    background-color: #5f6975; 
} 
#navAdminMenu li:hover > ul { 
    display: block; 
} 
#navAdminMenu ul > li { 
    display: block; 
    position: relative; 
    border-top: 1px solid #999; 
    border-bottom: 1px solid #000; 
} 
#navAdminMenu ul > li > button, #navAdminMenu ul > li > a { 
    height: 2em; 
    line-height: 2; 
    padding: 0 30px 0 10px; 
    white-space: nowrap; 
} 
#navAdminMenu ul > li > button { 
    width: 100%; /* full width of submenu */ 
    text-align: left; 
} 
#navAdminMenu ul > li > a { 
    display: block; /* full width of submenu */ 
} 
#navAdminMenu ul > li > button, #navAdminMenu ul > li > a { 
    color: #fff; 
} 
#navAdminMenu ul > li > button:focus, #navAdminMenu ul > li > a:focus { 
    outline: #fdcb01 solid 3px; 
} 
#navAdminMenu ul > li.hasSubmenu > button:after { 
    content: ">"; 
    width: 16px; 
    position: absolute; 
    right: 0; 
} 
#navAdminMenu ul ul { 
    left: 100%; 
    top: 0; 
} 

Câu hỏi

Có một cái gì đó đơn giản tôi đang thiếu? Hoặc tôi có nên báo cáo điều này là một lỗi cho Mozilla không?

Lưu ý: Tôi không muốn thay đổi các nút thành neo.

Trả lời

6

Tôi đã dành cách quá nhiều thời gian trên trục trặc nhỏ bé này, nhưng tôi giống như một con chó có xương.

Sau tất cả bản dùng thử và lỗi và thời gian dành cho việc soạn thảo câu hỏi, tôi đã tìm thấy giải pháp rất đơn giản. Tôi đã nghĩ đến việc vứt bỏ câu hỏi của mình, nhưng có lẽ nó có thể giúp người khác.

Giải pháp rất đơn giản. Rất đơn giản, tôi gần như có thể khóc.

#navAdminMenu ul > li > button { 
    /* full width of submenu (even when its the longest item) */ 
    min-width: 100%; 
} 

Lưu ý việc sử dụng phút -width.

+0

cảm ơn bạn, tôi dành 5 giờ để tìm hiểu điều này cho đến khi tôi tìm thấy câu trả lời của bạn – Ulterior