Изменение шрифта,цвета, расположения, размера текста в markdown?

Ссылка скопирована
1 ответ

Я создал свое меню для редактирования текста выглядит оно таким образом:
spoiler

Изменение шрифта,цвета, расположения, размера текста в markdown?

пытался реализовать изменение шрифта(жирный, курсив...)
код получился таким (использовал я vuex) :
spoiler

<template>   <div class="main-menu-edit">     <div class="section">       <div class="row">         <div class="col">           <div class="first box">             <form>               <select id="font-size" name="text-size" @change="handleFontSizeChange">                 <option value="h1">Заголовок 1</option>                 <option value="h2">Заголовок 2</option>                 <option value="h3">Заголовок 3</option>                 <option value="p">Параграф</option>               </select>             </form>           </div>           <div class="second box">             <button type="button"                     @click="handleBoldText">                     <i class="fa-solid fa-bold"></i>             </button>             <button type="button"                     @click="handleItalicText">                     <i class="fa-solid fa-italic"></i>                         </button>             <button type="button"                     @click="handleUnderlineText">                     <i class="fa-solid fa-underline"></i>             </button>             <button type="button"                     @click="handleStrikethroughText">                     <i class="fa-solid fa-strikethrough"></i>             </button>           </div>           <div class="third box">             <button type="button"                     @click="alignLeft">                     <i class="fa-solid fa-align-left"></i>             </button>             <button type="button"                     @click="alignCenter">                     <i class="fa-solid fa-align-center"></i>             </button>             <button type="button"                     @click="alignRight">                     <i class="fa-solid fa-align-right"></i>             </button>             <button type="button"                     @click="alignJustify">                     <i class="fa-solid fa-align-justify"></i>             </button>            </div>           <div class="fourth box">             <button type="button">                     <i class="fa-solid fa-image"></i>             </button>             <button type="button">                     <i class="fa-solid fa-video"></i>                         </button>             <button class="link" type="button">                     <i class="fa-solid fa-link"></i>                         </button>             <button type="button">                     <i class="fa-solid fa-table"></i>                         </button>             <button type="button" @click="applyColor">             <i class="fa-solid fa-paint-brush"></i>             </button>             <input type="color" v-model="newColor">           </div>         </div>       </div>     </div>   </div> </template>  <script> import { mapState, mapGetters, mapActions } from 'vuex';  export default {   data() {     return {       newColor: '',     };   },   computed: {     ...mapState(['color']),    },   created() {     this.newColor = this.color;    },   watch: {     newColor(event) {       this.updateColor(event);      }   },   methods: {     ...mapActions(['updateColor', 'updateSelectedText']),     insertMarkdownText(textToInsert) {       const textarea = this.$store.getters.getTextarea;       const startPos = textarea.selectionStart;       const endPos = textarea.selectionEnd;       let text = textarea.value;        if (this.$store.state.selectedText === "" || this.$store.state.selectedText === " ") {        }       else {         text = text.substring(0, startPos) + textToInsert + text.substring(startPos, endPos) + textToInsert + text.substring(endPos);         textarea.value = text;         this.markdownContent = textarea.value;       }     },      handleBoldText() {       this.insertMarkdownText('**');     },      handleItalicText() {       this.insertMarkdownText('_');     },     handleUnderlineText() {        const textarea = this.$store.getters.getTextarea;       const startPos = textarea.selectionStart;       const endPos = textarea.selectionEnd;       let text = textarea.value;        if (this.$store.state.selectedText === "" || this.$store.state.selectedText === " ") {        }       else {         text = text.substring(0, startPos) + '<u>' + text.substring(startPos, endPos) + '</u>' + text.substring(endPos);         textarea.value = text;         this.markdownContent = textarea.value;       }     },     handleStrikethroughText() {        this.insertMarkdownText('~');     },     alignLeft() {        this.insertMarkdownText('');     },     alignCenter() {        const textarea = this.$store.getters.getTextarea;       const startPos = textarea.selectionStart;       const endPos = textarea.selectionEnd;       let text = textarea.value;        if (this.$store.state.selectedText === "" || this.$store.state.selectedText === " ") {        }       else {         text = text.substring(0, startPos) + '<center>' + text.substring(startPos, endPos) + '</center>' + text.substring(endPos);         textarea.value = text;         this.markdownContent = textarea.value;       }     },     alignRight() {        const textarea = this.$store.getters.getTextarea;       const startPos = textarea.selectionStart;       const endPos = textarea.selectionEnd;       let text = textarea.value;        if (this.$store.state.selectedText === "" || this.$store.state.selectedText === " ") {        }       else {         text = text.substring(0, startPos) + '<p align="right">' + text.substring(startPos, endPos) + '</p>' + text.substring(endPos);         textarea.value = text;         this.markdownContent = textarea.value;       }     },     alignJustify() {        this.insertMarkdownText('|');      },     applyColor() {       this.updateColor(this.newColor);       this.colorText();    },     colorText() {       const textarea = this.$store.getters.getTextarea;       const startPos = textarea.selectionStart;       const endPos = textarea.selectionEnd;       const selectedText = this.$store.state.selectedText;       let text = textarea.value;        if (selectedText === "" || selectedText === " ") {         return;       }        const coloredText = `<font color="${this.color}">${selectedText}</font>`;       const fontTagRegex = /<font color="#[0-9a-fA-F]{6}">.*?</font>/g;       const existingFontTags = text.match(fontTagRegex);        if(existingFontTags){           existingFontTags.forEach((tag) => {               if(tag.includes(selectedText)){                   text = text.replace(tag, tag.replace(selectedText, coloredText));               }           });       } else {           text = text.substring(0, startPos) + coloredText + text.substring(endPos);       }        textarea.value = text;       this.markdownContent = textarea.value;     },   } }; </script>

<template> <div class="main-menu-edit"> <div class="section"> <div class="row"> <div class="col"> <div class="first box"> <form> <select id="font-size" name="text-size" @change="handleFontSizeChange"> <option value="h1">Заголовок 1</option> <option value="h2">Заголовок 2</option> <option value="h3">Заголовок 3</option> <option value="p">Параграф</option> </select> </form> </div> <div class="second box"> <button type="button" @click="handleBoldText"> <i class="fa-solid fa-bold"></i> </button> <button type="button" @click="handleItalicText"> <i class="fa-solid fa-italic"></i> </button> <button type="button" @click="handleUnderlineText"> <i class="fa-solid fa-underline"></i> </button> <button type="button" @click="handleStrikethroughText"> <i class="fa-solid fa-strikethrough"></i> </button> </div> <div class="third box"> <button type="button" @click="alignLeft"> <i class="fa-solid fa-align-left"></i> </button> <button type="button" @click="alignCenter"> <i class="fa-solid fa-align-center"></i> </button> <button type="button" @click="alignRight"> <i class="fa-solid fa-align-right"></i> </button> <button type="button" @click="alignJustify"> <i class="fa-solid fa-align-justify"></i> </button> </div> <div class="fourth box"> <button type="button"> <i class="fa-solid fa-image"></i> </button> <button type="button"> <i class="fa-solid fa-video"></i> </button> <button class="link" type="button"> <i class="fa-solid fa-link"></i> </button> <button type="button"> <i class="fa-solid fa-table"></i> </button> <button type="button" @click="applyColor"> <i class="fa-solid fa-paint-brush"></i> </button> <input type="color" v-model="newColor"> </div> </div> </div> </div> </div> </template> <script> import { mapState, mapGetters, mapActions } from 'vuex'; export default { data() { return { newColor: '', }; }, computed: { ...mapState(['color']), }, created() { this.newColor = this.color; }, watch: { newColor(event) { this.updateColor(event); } }, methods: { ...mapActions(['updateColor', 'updateSelectedText']), insertMarkdownText(textToInsert) { const textarea = this.$store.getters.getTextarea; const startPos = textarea.selectionStart; const endPos = textarea.selectionEnd; let text = textarea.value; if (this.$store.state.selectedText === "" || this.$store.state.selectedText === " ") { } else { text = text.substring(0, startPos) + textToInsert + text.substring(startPos, endPos) + textToInsert + text.substring(endPos); textarea.value = text; this.markdownContent = textarea.value; } }, handleBoldText() { this.insertMarkdownText('**'); }, handleItalicText() { this.insertMarkdownText('_'); }, handleUnderlineText() { const textarea = this.$store.getters.getTextarea; const startPos = textarea.selectionStart; const endPos = textarea.selectionEnd; let text = textarea.value; if (this.$store.state.selectedText === "" || this.$store.state.selectedText === " ") { } else { text = text.substring(0, startPos) + '<u>' + text.substring(startPos, endPos) + '</u>' + text.substring(endPos); textarea.value = text; this.markdownContent = textarea.value; } }, handleStrikethroughText() { this.insertMarkdownText('~'); }, alignLeft() { this.insertMarkdownText(''); }, alignCenter() { const textarea = this.$store.getters.getTextarea; const startPos = textarea.selectionStart; const endPos = textarea.selectionEnd; let text = textarea.value; if (this.$store.state.selectedText === "" || this.$store.state.selectedText === " ") { } else { text = text.substring(0, startPos) + '<center>' + text.substring(startPos, endPos) + '</center>' + text.substring(endPos); textarea.value = text; this.markdownContent = textarea.value; } }, alignRight() { const textarea = this.$store.getters.getTextarea; const startPos = textarea.selectionStart; const endPos = textarea.selectionEnd; let text = textarea.value; if (this.$store.state.selectedText === "" || this.$store.state.selectedText === " ") { } else { text = text.substring(0, startPos) + '<p align="right">' + text.substring(startPos, endPos) + '</p>' + text.substring(endPos); textarea.value = text; this.markdownContent = textarea.value; } }, alignJustify() { this.insertMarkdownText('|'); }, applyColor() { this.updateColor(this.newColor); this.colorText(); }, colorText() { const textarea = this.$store.getters.getTextarea; const startPos = textarea.selectionStart; const endPos = textarea.selectionEnd; const selectedText = this.$store.state.selectedText; let text = textarea.value; if (selectedText === "" || selectedText === " ") { return; } const coloredText = `<font color="${this.color}">${selectedText}</font>`; const fontTagRegex = /<font color="#[0-9a-fA-F]{6}">.*?</font>/g; const existingFontTags = text.match(fontTagRegex); if(existingFontTags){ existingFontTags.forEach((tag) => { if(tag.includes(selectedText)){ text = text.replace(tag, tag.replace(selectedText, coloredText)); } }); } else { text = text.substring(0, startPos) + coloredText + text.substring(endPos); } textarea.value = text; this.markdownContent = textarea.value; }, } }; </script>

store.ts

import { Store } from 'vuex';  interface RootState {   selectedText: string;   textarea: string;   setflag: boolean;   setpreview: boolean;   selectedTitle: string;   articleContent: string;   color: string; }  const store = new Store<RootState>({   state: {     selectedText: '', // Выбранный текст     textarea: null,     flag: false,     preview: false,     selectedTitle: '',     color: "#000000",   },   mutations: {     setSelectedText(state, text) {       state.selectedText = text;     },     setTextarea(state, textarea) {       state.textarea = textarea;     },     setflag(state, boolean) {        state.flag = boolean;     },     setpreview(state, boolean) {        state.preview = boolean;     },     setSelectedTitle(state, text) {        state.selectedTitle = text;     },     setArticleContent(state, text) {        state.articleContent = text     },     setColor(state, text) {        state.color = text     },         },   actions: {     updateColor({ commit }, newColor) {       commit('setColor', newColor);     },     updateSelectedText({ commit }, text) {       commit('setSelectedText', text);     },     updateTextarea({ commit }, textarea) {       commit('setTextarea', textarea);     },    },   getters: {     getColor: state => state.color,     getSelectedText: state => state.selectedText,     getTextarea: state => state.textarea,   } });  export default store;

import { Store } from 'vuex'; interface RootState { selectedText: string; textarea: string; setflag: boolean; setpreview: boolean; selectedTitle: string; articleContent: string; color: string; } const store = new Store<RootState>({ state: { selectedText: '', // Выбранный текст textarea: null, flag: false, preview: false, selectedTitle: '', color: "#000000", }, mutations: { setSelectedText(state, text) { state.selectedText = text; }, setTextarea(state, textarea) { state.textarea = textarea; }, setflag(state, boolean) { state.flag = boolean; }, setpreview(state, boolean) { state.preview = boolean; }, setSelectedTitle(state, text) { state.selectedTitle = text; }, setArticleContent(state, text) { state.articleContent = text }, setColor(state, text) { state.color = text }, }, actions: { updateColor({ commit }, newColor) { commit('setColor', newColor); }, updateSelectedText({ commit }, text) { commit('setSelectedText', text); }, updateTextarea({ commit }, textarea) { commit('setTextarea', textarea); }, }, getters: { getColor: state => state.color, getSelectedText: state => state.selectedText, getTextarea: state => state.textarea, } }); export default store;

все работает топорно, никак не могу придумать, чтобы сделать с кодом. Помогите оптимизировать и улучшить функционал кода.

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ольга Сеть Ответ

Чтобы изменить шрифт, цвет, расположение и размер текста в markdown, вы можете использовать HTML теги внутри блока кода

. Например, если вы хотите изменить размер текста, вы можете использовать тег <span style="font-size:16px"> ваш текст </span>. 
 
Чтобы изменить цвет текста, вы можете использовать тег <span style="color:red"> ваш текст </span>. Для изменения шрифта можно использовать тег <span style="font-family:Arial"> ваш текст </span>. 
 
Чтобы изменить расположение текста, вы можете использовать CSS свойство text-align, например <div style="text-align:center"> ваш текст </div> для центрирования текста. 
 
Например, вот пример кода на HTML, который демонстрирует изменение шрифта, цвета, расположения и размера текста:
 
<pre lang="html">
<div style="font-family:Arial;color:blue;font-size:18px;text-align:center">
    Пример текста с измененными параметрами
</div>

. Например, если вы хотите изменить размер текста, вы можете использовать тег <span style="font-size:16px"> ваш текст </span>. Чтобы изменить цвет текста, вы можете использовать тег <span style="color:red"> ваш текст </span>. Для изменения шрифта можно использовать тег <span style="font-family:Arial"> ваш текст </span>. Чтобы изменить расположение текста, вы можете использовать CSS свойство text-align, например <div style="text-align:center"> ваш текст </div> для центрирования текста. Например, вот пример кода на HTML, который демонстрирует изменение шрифта, цвета, расположения и размера текста: <pre lang="html"> <div style="font-family:Arial;color:blue;font-size:18px;text-align:center"> Пример текста с измененными параметрами </div>

Этот код позволит вам креативно оформить текст на вашей странице и сделать его более привлекательным для пользователей. Не забывайте проверять совместимость стилей с различными браузерами для лучшего отображения вашего контента.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно