Răsfoiți Sursa

feat: popup close button accessible with `tab` key

chikara-chan 8 ani în urmă
părinte
comite
d41c0c4ba9

+ 5 - 4
packages/dialog/src/component.vue

@@ -1,6 +1,6 @@
 <template>
   <transition name="dialog-fade">
-    <div class="el-dialog__wrapper" v-show="visible" @click.self="handleWrapperClick">
+    <div class="el-dialog__wrapper" tabindex="-1" v-show="visible" @click.self="handleWrapperClick">
       <div
         class="el-dialog"
         :class="[sizeClass, customClass]"
@@ -10,9 +10,10 @@
           <slot name="title">
             <span class="el-dialog__title">{{title}}</span>
           </slot>
-          <div class="el-dialog__headerbtn">
-            <i v-if="showClose" class="el-dialog__close el-icon el-icon-close" @click='handleClose'></i>
-          </div>
+          <button type="button" class="el-dialog__headerbtn" aria-label="Close" 
+                  v-if="showClose" @click="handleClose">
+            <i class="el-dialog__close el-icon el-icon-close"></i>
+          </button>
         </div>
         <div class="el-dialog__body" v-if="rendered"><slot></slot></div>
         <div class="el-dialog__footer" v-if="$slots.footer">

+ 5 - 2
packages/message-box/src/main.vue

@@ -1,10 +1,13 @@
 <template>
   <transition name="msgbox-fade">
-    <div class="el-message-box__wrapper" v-show="visible" @click.self="handleWrapperClick">
+    <div class="el-message-box__wrapper" tabindex="-1" v-show="visible" @click.self="handleWrapperClick">
       <div class="el-message-box" :class="customClass">
         <div class="el-message-box__header" v-if="title !== undefined">
           <div class="el-message-box__title">{{ title || t('el.messagebox.title') }}</div>
-          <i class="el-message-box__close el-icon-close" @click="handleAction('cancel')" v-if="showClose"></i>
+          <button type="button" class="el-message-box__headerbtn" aria-label="Close" 
+                  v-if="showClose" @click="handleAction('cancel')">
+            <i class="el-message-box__close el-icon-close"></i>
+          </button>
         </div>
         <div class="el-message-box__content" v-if="message !== ''">
           <div class="el-message-box__status" :class="[ typeClass ]"></div>

+ 14 - 8
packages/theme-default/src/dialog.css

@@ -44,12 +44,22 @@
       padding: 20px 20px 0;
     }
 
-    @e close {
+    @e headerbtn {
+      float: right;
+      background: transparent;
+      border: none;
+      outline: none;
+      padding: 0;
       cursor: pointer;
-      color: var(--dialog-close-color);
 
-      &:hover {
-        color: var(--dialog-close-hover-color);
+      .el-dialog__close {
+        color: var(--dialog-close-color);
+      }
+      
+      &:focus, &:hover {
+        .el-dialog__close {
+          color: var(--dialog-close-hover-color);
+        }
       }
     }
 
@@ -66,10 +76,6 @@
       font-size: var(--dialog-font-size);
     }
 
-    @e headerbtn {
-      float: right;
-    }
-
     @e footer {
       padding: 10px 20px 15px;
       text-align: right;

+ 21 - 14
packages/theme-default/src/message-box.css

@@ -37,26 +37,33 @@
       padding: 20px 20px 0;
     }
 
-    @e content {
-      padding: 30px 20px;
-      color: var(--msgbox-content-color);
-      font-size: var(--msgbox-content-font-size);
-      position: relative;
-    }
-
-    @e close {
-      display: inline-block;
+    @e headerbtn {
       position: absolute;
       top: 19px;
       right: 20px;
-      color: #999;
+      background: transparent;
+      border: none;
+      outline: none;
+      padding: 0;
       cursor: pointer;
-      line-height: 20px;
-      text-align: center;
 
-      &:hover {
-        color: var(--color-primary);
+      .el-message-box__close {
+        color: #999;
+      }
+      
+      &:focus, &:hover {
+        .el-message-box__close {
+          color: var(--color-primary);
+        }
       }
+
+    }
+
+    @e content {
+      padding: 30px 20px;
+      color: var(--msgbox-content-color);
+      font-size: var(--msgbox-content-font-size);
+      position: relative;
     }
 
     @e input {