zoukankan      html  css  js  c++  java
  • HTML编辑器(1)

    前言
    现在网上有很多这样的HTML编辑器,这种编辑器无疑给人带来了很多方便,所以自己也想尝试制作一款这样的HTML编辑器,既然要制作,那就肯定是先把UI搭起来,再慢慢完善功能

    设计思路
    我的思路就是将div标签设置一个属性(contenteditable="true"),使div成为可编辑的div
    并且我发现可编辑div有个特征:在内部换行会将上一个标签复制下来,所以为了防止这种问题,我决定在内部加入<p><br></p>这样,每次换行就会自动复制<p><br></p>标签

    把这些东西弄好后,我就开始写UI,俗话说:交互也是一门技术

    UI用的Icon使用了图标字体
    后面使用html写好了交互的菜单以及用css做了交互效果

    UI效果
    在这里插入图片描述
    交互效果
    鼠标移到Icon
    在这里插入图片描述
    鼠标移到有下拉框的Icon
    在这里插入图片描述在这里插入图片描述
    开启功能
    在这里插入图片描述
    完整代码

    引用的css文件
    /Icon字体/

    Css

    @font-face {
        font-family: 'poppin';
        src: url('../../Content/Font/poppin.ttf') format('truetype');
    }
    @font-face {
        font-family: 'SEGUIEMJ';
        src: url('../Font/SEGUIEMJ.TTF') format('truetype');
    }
    
    *::-webkit-scrollbar {
         3px;
        height:1px;
    }
    
    *::-webkit-scrollbar-thumb {
        border-radius: 10px;
        -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
        background: #0094ff;
    }
    
    *::-webkit-scrollbar-track {
        -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
        border-radius: 10px;
        background: #ccc;
    }
    
    
    body {
        font-family: 'poppin';
        margin: 0;
        padding: 0px;
    }
    
        #YolxRichText {
            min- 1000px;
            max- 1600px;
            height: 620px;
            margin: 0 auto;
            position: relative;
            box-sizing: border-box;
            padding: 0px 40px;
            margin-top: 10px;
            font-family: 'poppin';
        }
    
    #YolxRichText_Input {
         calc(100% - 40px);
        font-size: 16px;
        color: rgba(0,0,0,.8);
        letter-spacing: 2px;
        margin: 0;
        padding: 10px 20px 245px;
        outline: none;
    }
    
    .YolxRichText_Input_token {
        white-space: pre-wrap;
    }
    
    #YolxRichText_Ouput {
        position: absolute;
        top: 0px;
        right: 0px;
         100%;
        height: 500px;
        font-size: 12px;
        color: #fff;
        letter-spacing: 2px;
    }
    
    #YolxRichText_Ouput_Preview {
        padding: 10px 20px 245px;
        color: #000;
    }
    
    #YolxRichText_Ouput h1 {
        text-align: center;
        border-bottom: 2px dotted #ff6a00;
        color: #ff6a00;
    }
    
    #YolxRichText_Input_section * {
        display: inline;
    }
    
    
    .editor {
         calc(100% - 15px);
        height: 100%;
        overflow: auto;
        float: left;
    }
    
    .color_SkyBlue {
        color: skyblue !important;
    }
    
    
    .YolxRichText_editor, .YolxRichText_Preview, .YolxRichText_Help {
         50%;
        height: 500px;
        overflow: auto;
        position: relative;
        float: left;
        border: 1px solid #ccc;
        box-sizing: border-box;
    }
    
    .YolxRichText_Help {
         20%;
        font-size: 14px;
        padding: 0px 10px;
        display:none;
    }
    
            .YolxRichText_Help p {
                display:block;
            }
    
            .YolxRichText_Help p span {
                display: block;
            }
    
            br {
                line-height: 26px;
            }
    
    .EditorMenu {
         100%;
        height: 36px;
        position: relative;
        float: left;
        box-sizing: border-box;
        background: #f1f1f1;
        border: 1px solid #ccc;
        border-bottom: none;
    }
    
        .EditorMenu ul {
            margin: 0;
            padding: 0px;
            height: 100%;
            display: flex;
            text-align: center;
            margin: 0px 5px;
        }
    
            .EditorMenu ul li {
                display: block;
                 36px;
                line-height: 2.3em;
                position: relative;
            }
    
                .EditorMenu ul li:hover {
                    cursor: pointer;
                }
    
                    .EditorMenu ul li:hover i {
                        color: #000;
                    }
    
                    .EditorMenu ul li:hover div {
                        z-index: 2;
                        display: block;
                        animation: EditorMenuAnima  ease 0.5s forwards;
                    }
    
    @keyframes EditorMenuAnima {
        0% {
            top:-100px;
        }
        30% {
            top: 35px;
        }
        60% {
            top: 20px;
        }
        100% {
            top: 35px;
        }
    }
    
                .EditorMenu ul li svg {
                     26px;
                    height: 34px;
                }
    
                .EditorMenu ul li div {
                     100px;
                    z-index: 1;
                    position: absolute;
                    top: 35px;
                    left: 0px;
                    background-color: #fff;
                    border: 1px solid #f1f1f1;
                    border-right-color: #ccc;
                    border-bottom-color: #ccc;
                    border-top:1px solid #ccc;
                    margin: 0;
                    display: none;
                    transition: all ease 0.5s;
                    box-sizing: border-box;
                    overflow: hidden;
                }
    
    .EditorMenu ul .editor_menu_face {
    }
    
    .EditorMenu ul .editor_menu_face div ul {
        display: flex;
    }
    
        .EditorMenu ul .editor_menu_face .face {
            display: block;
            position: initial;
             100%;
            padding: 10px;
            border: none;
            max-height: 138px;
            overflow-y: auto;
        }
    
        .EditorMenu ul .editor_menu_face .face span {
            font-size: 24px;
            padding: 0px 4px;
        }
        .EditorMenu ul .editor_menu_face .face span:hover {
            background:#ccc;
            border-radius:3px;
        }
    
                    .EditorMenu ul li div p {
    
                    }
    
    .EditorMenu_ul_li_div_p {
        text-align: center;
        color: #999;
        line-height: 2;
        border-bottom: 1px solid #f1f1f1;
        font-size: 13px;
    }
    
    .EditorMenu ul li ul {
        display: block;
        margin: 0px;
    }
    
                .EditorMenu ul li div ul li {
                    color: #333;
                    padding: 5px 0;
                     100%;
                    float: left;
                }
    
                    .EditorMenu ul li div ul li:hover {
                        background: #ccc;
                    }
    
                    .noPaddingAndMargin {
                        margin: 0;
                        padding: 0;
                    }
    
                .EditorMenu ul li i {
                    color: #999;
                }
    
    .LinesOfCode {
        height: 100%;
        float: left;
        background: #eee;
        padding: 10px 5px 0px 5px;
    }
    
    .LinesOfCode ul {
        text-align:left;
        font-size:12px;
    }
    
        .LinesOfCode ul li {
            margin: 20px 0px;
    }
    

    Html

    <div id="YolxRichText">
            <div class="EditorMenu">
                <ul>
                    <li title="撤销"><i class="fa fa-undo"></i></li>
                    <li title="重做"><i class="fa fa-repeat"></i></li>
                    <li title="标题">
                        <i class="fa fa-header"></i>
                        <div style="transform: translateX(-35%);">
                            <p class="EditorMenu_ul_li_div_p noPaddingAndMargin">设置标题</p>
                            <ul>
                                <li><h1 class="noPaddingAndMargin">H1</h1></li>
                                <li><h2 class="noPaddingAndMargin">H2</h2></li>
                                <li><h3 class="noPaddingAndMargin">H3</h3></li>
                                <li><h4 class="noPaddingAndMargin">H4</h4></li>
                                <li><h5 class="noPaddingAndMargin">H5</h5></li>
                                <li><p class="noPaddingAndMargin">正文</p></li>
                            </ul>
                        </div>
                    </li>
                    <li title="字体">
                        <i class="fa fa-font"></i>
                        <div style="transform: translateX(-35%);">
                            <p class="EditorMenu_ul_li_div_p noPaddingAndMargin">设置字体</p>
                            <ul>
                                <li>poppin</li>
                                <li>微软雅黑</li>
                                <li>宋体</li>
                                <li>A字体</li>
                                <li>B字体</li>
                                <li>C字体</li>
                            </ul>
                        </div>
                    </li>
    
                    <li title="字号">
                        <i class="fa fa-text-height"></i>
                        <div style="transform: translateX(-35%);">
                            <p class="EditorMenu_ul_li_div_p noPaddingAndMargin">设置字号</p>
                            <ul>
                                <li>x-small</li>
                                <li>small</li>
                                <li>normal</li>
                                <li>large</li>
                                <li>x-large</li>
                                <li>xx-large</li>
                            </ul>
                        </div>
                    </li>
                    <li title="颜色">
                        <i class="fa fa-pencil"></i>
                        <div style=" 300px;transform: translateX(-45%);">
                            <p class="EditorMenu_ul_li_div_p noPaddingAndMargin">字体颜色</p>
                            <ul>
                                <li style="99px"><i class="fa fa-pencil" style="color: #000000;"></i></li>
                                <li style="100px"><i class="fa fa-pencil" style="color: #1c487f;"></i></li>
                                <li style="99px"><i class="fa fa-pencil" style="color: #4d80bf;"></i></li>
                                <li style="99px"><i class="fa fa-pencil" style="color: #c24f4a;"></i></li>
                                <li style="100px"><i class="fa fa-pencil" style="color: #8baa4a;"></i></li>
                                <li style="99px"><i class="fa fa-pencil" style="color: #7b5ba1;"></i></li>
                                <li style="99px"><i class="fa fa-pencil" style="color: #46acc8;"></i></li>
                                <li style="100px"><i class="fa fa-pencil" style="color: #f9963b;"></i></li>
                                <li style="99px"><i class="fa fa-pencil" style="color: #eeece0;"></i></li>
                                <li style="99px"><i class="fa fa-pencil" style="color: #ffffff;"></i></li>
                                <li style="99px"><i class="fa fa-magic" style="color: coral;"></i></li>
                            </ul>
                        </div>
                    </li>
                    <li title="背景色">
                        <i class="fa fa-paint-brush"></i>
                        <div style=" 300px;transform: translateX(-45%);">
                            <p class="EditorMenu_ul_li_div_p noPaddingAndMargin">字体颜色</p>
                            <ul>
                                <li style="99px"><i class="fa fa-paint-brush" style="color: #000000;"></i></li>
                                <li style="100px"><i class="fa fa-paint-brush" style="color: #1c487f;"></i></li>
                                <li style="99px"><i class="fa fa-paint-brush" style="color: #4d80bf;"></i></li>
                                <li style="99px"><i class="fa fa-paint-brush" style="color: #c24f4a;"></i></li>
                                <li style="100px"><i class="fa fa-paint-brush" style="color: #8baa4a;"></i></li>
                                <li style="99px"><i class="fa fa-paint-brush" style="color: #7b5ba1;"></i></li>
                                <li style="99px"><i class="fa fa-paint-brush" style="color: #46acc8;"></i></li>
                                <li style="100px"><i class="fa fa-paint-brush" style="color: #f9963b;"></i></li>
                                <li style="99px"><i class="fa fa-paint-brush" style="color: #eeece0;"></i></li>
                                <li style="99px"><i class="fa fa-paint-brush" style="color: #ffffff;"></i></li>
                                <li style="99px"><i class="fa fa-magic" style="color: coral;"></i></li>
                            </ul>
                        </div>
                    </li>
    
                    <li title="加粗"><i class="fa fa-bold"></i></li>
                    <li title="斜体"><i class="fa fa-italic"></i></li>
                    <li title="下划线"><i class="fa fa-underline"></i></li>
                    <li title="删除线"><i class="fa fa-strikethrough"></i></li>
                    <li title="对齐方式">
                        <i class="fa fa-paragraph"></i>
                        <div style="transform: translateX(-35%);">
                            <p class="EditorMenu_ul_li_div_p noPaddingAndMargin">对齐方式</p>
                            <ul>
                                <li title="靠左"><i class="fa fa-list-ol"></i></li>
                                <li title="居中"><i class="fa fa-list-ul"></i></li>
                                <li title="靠右"><i class="fa fa-list-ul"></i></li>
                            </ul>
                        </div>
                    </li>
                    <li class="editor_menu_face" title="插入表情">
                        <i class="fa fa-meh-o"></i>
                        <div style="300px;transform: translateX(-45%);">
                            <p class="EditorMenu_ul_li_div_p noPaddingAndMargin">插入表情</p>
                            <ul>
                                <li><span>Emoji</span></li>
                                <li style="1px;background:#ccc;"></li>
                                <li><span>更多表情</span></li>
                            </ul>
                            <div class="face">
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                                <span>?</span>
                            </div>
                        </div>
                    </li>
                    <li title="设置列表">
                        <i class="fa fa-list-ul"></i>
                        <div style="transform: translateX(-35%);">
                            <p class="EditorMenu_ul_li_div_p noPaddingAndMargin">设置列表</p>
                            <ul>
                                <li><i class="fa fa-list-ol" title="有序列表"></i></li>
                                <li><i class="fa fa-list-ul" title="无序列表"></i></li>
                            </ul>
                        </div>
                    </li>
    
                    <li title="媒体">
                        <i class="fa fa-tv"></i>
                        <div style="transform: translateX(-35%);">
                            <p class="EditorMenu_ul_li_div_p noPaddingAndMargin">插入媒体</p>
                            <ul>
                                <li><i class="fa fa-youtube-play" title="视频"></i></li>
                                <li><i class="fa fa-music" title="音乐"></i></li>
                            </ul>
                        </div>
                    </li>
    
                    <li title="超链接"><i class="fa fa-chain"></i></li>
                    <li title="代码块"><i class="fa fa-terminal"></i></li>
                    <li title="引用"><i class="fa fa-quote-left"></i></li>
                    <li title="表格"><i class="fa fa-table"></i></li>
                    <li title="图片"><i class="fa fa-image"></i></li>
                    <li title="导入"><i class="fa fa-importfile"><svg t="1552977381714" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2344" xmlns:xlink="http://www.w3.org/1999/xlink" width="26" height="26" class="icon"><path d="M708.266667 460.8h-140.8V307.2H384v25.6a34.133333 34.133333 0 1 1-68.266667 0V290.133333c0-28.2752 22.9248-51.2 51.2-51.2h298.666667l110.933333 128v366.933334c0 28.2752-22.9248 51.2-51.2 51.2H366.933333c-28.2752 0-51.2-22.9248-51.2-51.2v-42.666667a34.133333 34.133333 0 1 1 68.266667 0v25.6h324.266667v-256z m0-68.266667v-0.132266l-72.533334-83.694934V392.533333h72.533334z m-352.674134 149.905067H277.282133c-16.469333 0-29.815467-14.574933-29.815466-32.554667 0-17.975467 13.3504-32.5504 29.815466-32.5504h78.3104l-27.997866-25.706666a25.924267 25.924267 0 0 1 0-38.190934 30.754133 30.754133 0 0 1 41.6 0l83.2 76.386134a25.8688 25.8688 0 0 1 8.375466 20.0704 25.8432 25.8432 0 0 1-8.375466 20.053333l-83.2 76.3904a30.754133 30.754133 0 0 1-41.6 0 25.924267 25.924267 0 0 1 0-38.190933l27.997866-25.706667z" fill="#999999" p-id="2345"></path></svg></i></li>
                    <li title="导出"><i class="fa fa-derivefile"><svg t="1552977587969" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2453" xmlns:xlink="http://www.w3.org/1999/xlink" width="26" height="26" class="icon"><path d="M674.133333 682.666667v51.2c0 28.2752-22.9248 51.2-51.2 51.2H264.533333c-28.2752 0-51.2-22.9248-51.2-51.2V290.133333c0-28.2752 22.9248-51.2 51.2-51.2h358.4c28.2752 0 51.2 22.9248 51.2 51.2v51.2a34.133333 34.133333 0 1 1-68.266666 0v-34.133333H281.6v409.6h324.266667v-34.133333a34.133333 34.133333 0 1 1 68.266666 0z m31.325867-140.228267h-78.3104c-16.469333 0-29.815467-14.574933-29.815467-32.554667 0-17.975467 13.3504-32.5504 29.815467-32.5504h78.3104l-27.997867-25.706666a25.924267 25.924267 0 0 1 0-38.190934 30.754133 30.754133 0 0 1 41.6 0l83.2 76.386134a25.8688 25.8688 0 0 1 8.375467 20.0704 25.8432 25.8432 0 0 1-8.375467 20.053333l-83.2 76.3904a30.754133 30.754133 0 0 1-41.6 0 25.924267 25.924267 0 0 1 0-38.190933l27.997867-25.706667zM443.733333 588.782933a31.338667 31.338667 0 0 1-22.976-8.802133L375.466667 535.9104v24.0512c0 15.927467-13.371733 28.8384-29.866667 28.8384s-29.866667-12.910933-29.866667-28.842667v-95.914666c0-15.931733 13.371733-28.842667 29.866667-28.842667l0.541867 0.004267a31.317333 31.317333 0 0 1 22.434133 8.814933L443.733333 517.149867l75.157334-73.130667a31.317333 31.317333 0 0 1 22.434133-8.814933L541.866667 435.2c16.494933 0 29.866667 12.910933 29.866666 28.842667v95.914666c0 15.931733-13.371733 28.842667-29.866666 28.842667s-29.866667-12.910933-29.866667-28.842667v-24.046933l-45.290667 44.0704a31.338667 31.338667 0 0 1-22.976 8.802133z" fill="#999999" p-id="2454"></path></svg></i></li>
                    <li title="新建"><i class="fa fa-newfile"><svg t="1552977627227" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2562" xmlns:xlink="http://www.w3.org/1999/xlink" width="26" height="26" class="icon"><path d="M511.278933 426.756267c-17.109333 22.741333 72.738133 14.208 68.458667 18.474666-47.061333 31.266133-88.4224 54.0032-149.751467 78.161067-41.361067 15.6288-86.997333 110.843733-104.1152 149.213867-18.538667 38.370133-21.393067 58.261333-27.093333 76.736-1.429333 5.687467-9.984 24.157867-27.101867 17.053866-17.1136-5.6832-17.1136-25.578667-14.263466-34.103466 48.494933-170.530133 126.933333-305.536 215.36-405.009067 19.968-22.741333 48.490667-39.790933 71.313066-46.8992 98.4064-28.420267 161.160533-24.157867 223.914667-24.157867-12.834133 18.474667-25.672533 35.528533-39.936 52.5824-2.850133 2.8416-115.52 17.0496-132.637867 39.790934-17.109333 22.737067 91.281067 7.104 88.426667 9.9456a723.473067 723.473067 0 0 1-49.92 45.474133c-2.850133 1.4208-105.536-1.4208-122.653867 22.741333zM605.866667 605.866667v-59.733334a34.133333 34.133333 0 1 1 68.266666 0v59.733334h59.733334a34.133333 34.133333 0 1 1 0 68.266666h-59.733334v59.733334a34.133333 34.133333 0 1 1-68.266666 0v-59.733334h-59.733334a34.133333 34.133333 0 1 1 0-68.266666h59.733334z" fill="#999999" p-id="2563"></path></svg></i></li>
                    <li title="保存"><i class="fa fa-save"></i></li>
                    <li title="预览"><i class="fa fa-eye color_SkyBlue"></i></li>
                    <li title="帮助"><i class="fa fa-question-circle-o"></i></li>
                    <li title="切换编辑器"><i class="fa fa-wrench color_SkyBlue"></i></li>
                </ul>
            </div>
            <div class="YolxRichText_editor">
                <div class="LinesOfCode">
                    <ul class="noPaddingAndMargin">
                        <li>1</li>
                    </ul>
                </div>
                <div class="editor">
                    <div id="YolxRichText_Input" tabindex="0" contenteditable="true"><p><br></p></div>
                </div>
            </div>
            <div class="YolxRichText_Preview">
                <div id="YolxRichText_Ouput">
                    <h1>预览</h1>
                    <div id="YolxRichText_Ouput_Preview">
    
                    </div>
                </div>
            </div>
            <div class="YolxRichText_Help">
                <h1>帮助文档</h1>
                <hr />
                <h3>快捷键</h3>
                <p>
                    <span>撤销:Ctrl / Command + Z</span>
                    <span>重做:Ctrl / Command + Shift + Z || Ctrl / Command + Y</span>
                    <span>加粗:Ctrl / Command + B</span>
                    <span>斜体:Ctrl / Command + I</span>
                    <span>斜体:Ctrl / Command + I</span>
                    <span>标题:Ctrl / Command + Shift + H</span>
                    <span>无序列表:Ctrl / Command + Shift + U</span>
                    <span>有序列表:Ctrl / Command + Shift + O</span>
                    <span>检查列表:Ctrl / Command + Shift + C</span>
                    <span>插入代码:Ctrl / Command + Shift + K</span>
                    <span>插入链接:Ctrl / Command + Shift + L</span>
                    <span>插入图片:Ctrl / Command + Shift + G</span>
                </p>
                <hr />
                <h3>标题 Title</h3>
                <p>
                    <span>$[Title|1] 1级标题 <span style="color:#46acc8">示例:$[Title|1]HelloWorld</span></span>
                    <span>$[Title|2] 2级标题 <span style="color:#46acc8">示例:$[Title|2]HelloWorld</span></span>
                    <span>$[Title|3] 3级标题 <span style="color:#46acc8">示例:$[Title|3]HelloWorld</span></span>
                    <span>$[Title|4] 4级标题 <span style="color:#46acc8">示例:$[Title|4]HelloWorld</span></span>
                    <span>$[Title|5] 5级标题 <span style="color:#46acc8">示例:$[Title|5]HelloWorld</span></span>
                    <span>$[Title|p] 正文 <span style="color:#46acc8">示例:$[Title|p]HelloWorld</span></span>
                </p>
                <hr />
                <h3>文本 Text</h3>
                <p>
                    <span>$[Text|b]Value^ 加粗文本 <span style="color:#46acc8">示例:$[Text|b]HelloWorld^</span></span>
                    <span>$[Text|i]Value^ 斜体文本 <span style="color:#46acc8">示例:$[Text|i]HelloWorld^</span></span>
                    <span>$[Text|d]Value^ 删除文本 <span style="color:#46acc8">示例:$[Text|d]HelloWorld^</span></span>
                    <span>$[Text|u]Value^ 重点文本 <span style="color:#46acc8">示例:$[Text|u]HelloWorld^</span></span>
                </p>
                <hr />
                <h3>代码 Code</h3>
                <p>
                    <span>$[Code|*]^ 自识别代码 <span style="color:#46acc8">$[Code|*]HelloWorld^</span></span>
                </p>
                <hr />
                <h3>列表 List</h3>
                <p>
                    <span>$[List|u]^ 无序列表 <span style="color:#46acc8">$[List|u]HelloWorld^</span></span>
                    <span>$[List|o]^ 有序列表 <span style="color:#46acc8">$[List|o]HelloWorld^</span></span>
                </p>
                <hr />
                <h3>表格 Table</h3>
                <p>
                    <span>$[Table|*]^ 表格 <span style="color:#46acc8">$[Table|*]HelloWorld^</span></span>
                </p>
                <hr />
                <h3>注释 Annotation</h3>
                <p>
                    <span>$[Annotation|*]^ 注释 <span style="color:#46acc8">$[Annotation|*]HelloWorld^</span></span>
                </p>
            </div>
    </div>
    

    现在就做到这里,下一篇我们继续完善

  • 相关阅读:
    yocto/bitbake 学习资源
    QEMU/KVM学习资源
    ubuntu 中创建和删除用户
    git 重命名本地和远程分支
    Ubuntu 上搭建 FTP 服务器
    gdb 常见用法
    git log 显示与特定文件相关的 commit 信息
    基于 qemu system mode 运行 arm 程序
    基于 qemu user mode 运行 aarch64 程序
    checking in(airport)
  • 原文地址:https://www.cnblogs.com/LRolinx/p/13850380.html
Copyright © 2011-2022 走看看